如何使用C#处理大图像

时间:2009-04-22 21:50:26

标签: c# image-processing

当尝试在jpg中加载20 Mb或在bmp中加载200 Mb的图像时,我的内存不足

3 个答案:

答案 0 :(得分:1)

我们的地图控件中有一个非常大的(~50MB)光栅图像。

解决方案是将主图像切割成小块并加载到 Image [,] 数组中。

            -------------------------------------
            |  pic00 |  pic01 |        |        |
            -------------------------------------
            |  pic10 |        |        |        |
pic.png ->  -------------------------------------
            |        |        |        |        |
            -------------------------------------
            |        |        |        |  picnm |
            -------------------------------------

您可以使用 Graphics.DrawImage(..)绘制这些作品。

唯一的问题是:如果您需要在屏幕上显示整个图片,绘图过程可能会很慢。保存缩略图并在需要时显示的好方法。

答案 1 :(得分:0)

我认为web.config中可能有一个设置允许您的应用消耗超过默认的内存量。如果失败了,如果它是一个网络应用程序,则创建一个更大的应用程序池。

还要确保尽快处理()资源。

默认情况下,.net不会做任何花哨的技巧来提高内存效率。它本身并不坏,但它不会对你有任何好处。

答案 2 :(得分:0)

如果你正在使用WPF,你可以将图像的“缩略图”加载到内存中,这可能是更合理的分辨率:

BitmapImage bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.DecodePixelWidth = 100;
bitmapImage.UriSource = new Uri(imageData.Name);
bitmapImage.EndInit();

this.imageControl.Source = bitmapImage;