【问题标题】:Display Images in .Net Without Crashing Application在 .Net 中显示图像而不会导致应用程序崩溃
【发布时间】:2015-09-25 13:07:00
【问题描述】:

所以我创建了一个程序,将100张图片加载到屏幕上,每张图片基本上代表一个对象,让用户选择他们想要的。

问题是应用无法加载 100 张图片而不在我的图片框中留下大量的红色 x。

如何减少每张图片所需的内存量?

编辑:图像实际上并不是纯黑色,我只是还没有使用图像比例来显示我想要的东西。图像尺寸实际上是 4288 x 2848。我不需要在这个屏幕上,一个小比例的图像就可以了。

这是用于拍卖展示。因此,您在此处看到的图像本质上是一个缩略图,它将带您进入拍卖物品的页面。

代码: 使用基础架构/WPF

        foreach (var item in Vehicles)
        {
            BitmapImage b = new BitmapImage();
            b.BeginInit();
            b.UriSource = new Uri(item.OverviewImage);
            b.EndInit();

          var addTile = new XamTile
          {
              Content = new Image { Source = b}
          };

          tileManager.Items.Add(addTile);
        }

我尝试过的其他代码,没有使用 infragistics/C#

   public List<Vehicle> Vehicles { get; set; }
    private int count = 0;

    public AuctionScreen()
    {
        InitializeComponent();

        Vehicles = new List<Vehicle>();
    }

    private void AuctionScreen_Load(object sender, EventArgs e)
    {
        timer1.Start();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
            var m = new PictureBox();
            m.ImageLocation = Vehicles[count].OverviewImage;

            flowLayoutPanel1.Controls.Add(m);
            if (count > Vehicles.Count)
            {
                timer1.Stop();
            }
    }

【问题讨论】:

  • 每张图片的尺寸是多少?他们真的是黑人吗(或者这只是一个隐私问题)?
  • 请发布您的代码
  • 如果您的问题确实是 “我如何以一种形式显示 100 张 12 兆像素的图像”,您可能需要重新考虑您的方法。一张一张地加载图片,适当地缩小它们,然后将它们渲染到一些画布上(你真的不希望一个表单上有 100 个图片框)。这不是微不足道的,会表现得很糟糕而且问题太宽泛,请尝试做一些研究。
  • @CodeCaster 我已经进行了研究,而你说我没有,这令人沮丧。我已经为此工作了 2 天,最后在这里发布了一个问题,希望得到帮助,而不是说做更多研究的评论。我显然对如何渲染图像知之甚少,也无法将所有内容放在一个有凝聚力的解决方案中。 “这不是微不足道的”..如果是的话,我就不会在这里了。

标签: c# .net wpf


【解决方案1】:

您可能希望将所有图像绘制到单个画布上,以减少显示这么多图片框的 CPU 和 RAM 开销

我会看看这个问题。 How to render bitmap into canvas in WPF?这里他们说的是在画布上绘制图像,您应该能够在一个画布上绘制多个图像,方法是在创建它们时指定矩形。

如果您需要这些可点击的,那么只需监听画布的onClick 事件并通过鼠标位置获取您需要的图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多