Bitmap.LockBits溢出异常(大图)

时间:2018-01-29 20:06:49

标签: c# .net wpf bitmap

我正在处理需要大量图像处理的问题, 我使用C#WPF进行GUI,并使用C ++ GPU加速DLL支持图像处理。 我喜欢保持界面不变并使用指针,GUI只是用于上传和下载图像。 但是,我遇到了System.Drawing的问题,这似乎是由大尺寸引起的。

srcImage = (Bitmap)Bitmap.FromStream(ms, 
/*useEmbeddedColorManagement*/true,
/*validateImageData*/ false); // would throw "System.Overflowexception" if set to 'true',
//but doesn't seem to actually load Bitmap to RAM when set to 'false'
int width = srcImage.Width;
int height = srcImage.Height;
// LockBits throws "System.Overflowexception"
BitmapData srcImageData = srcImage.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, srcImage.PixelFormat); 
uint* ptr = (uint*)srcImageData.Scan0;
ExternalCPPCall(ptr, height, width);
srcImage.UnlockBits(srcImageData);

图像高度x宽度

  • 30720 x 30720 - (注意 - 在32bpp远高于3.5GB)抛出" System.Overflowexception",并且任何更大的也抛出
  • 23040 x 23040 - (注意 - 在32bpp刚好低于2GB)工作得很好,任何小的也可以正常工作

另请注意 - ' ms' MemoryStream包含从磁盘读取的PNG(通常比生成的BMP小1000倍)

是GDI +支持System.Drawing 32位库吗?我正在编译并运行64位,我的整个过程突然显示10GB的使用情况

0 个答案:

没有答案