如何以最大分辨率构建C#.NET WIC WriteableBitmap?

时间:2015-03-21 15:11:40

标签: c# .net bitmap writeablebitmap wic

根据这个 - > https://social.msdn.microsoft.com/Forums/vstudio/en-US/58710bdd-4832-4531-a50a-b83a7e733cdd/maximum-size-of-a-writeablebitmap-systemwindowsmediaimagingwritablebitmap?forum=wpf

  

图像的最大高度和宽度为2 ^ 16像素,每通道32位* 4通道。 BitmapSource的最大大小为2 ^ 32字节(64千兆字节)>最大图像大小为4千兆像素。最小图像尺寸为1x1。

     

最大尺寸为(2 ^ 16)^ 2 = 4,294,967,296像素

     

每个像素每个通道4个字节,有4个通道(A / R / G / B),即16个字节。

     

因此,字节的最大大小为16 * 4,294,967,296 = 68,719,476,736字节= 64千兆字节。

但是,我只能高达

  

System.Windows.Media.Imaging.WriteableBitmap wbit = new WriteableBitmap(32000,32000,97,97,PixelFormats.Bgra32,null);

如果我更高,例如33,000 x 33,000,则构造函数抛出System.OverflowException:图像数据在处理期间生成溢出。 ---> System.ArithmeticException:算术运算中的溢出或下溢。

我的计算机有32GB内存,运行Windows 8.1,VS,这是一个针对64位平台的.NET 4.5控制台应用程序,并且已在App.Config中启用了gcAllowVeryLargeObjects,因此这不是一个与之相关的问题。 NET最大对象大小为2GB。我可以在这个应用程序中创建一个大到15GB的整数数组。

此外,我正在引用PresentationCore,PresentationFramework和WindowsBase来访问WIC,它们都位于C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5 \中,它们发出警报我起初因为它在x86目录中,但据我所知,这些仅用于检索元数据,实际使用的实际程序集在GAC中,因此,例如,在Windows 8.1 Pro中,有32位和64位PresentationCore分别位于C:\ Windows \ assembly \ NativeImages_v4.0.30319_32 \ PresentationCore \ 24f6c80242420a1cea5cc254bf420027和C:\ Windows \ assembly \ NativeImages_v4.0.30319_64 \ PresentationCore \ 7a22d69ccf672cec14abf04d9551b3a0。对于PresentationFramework和WindowsBase,同样类型的交易,我不是100%,但我认为应用程序可能在GAC中使用这些程序集的64位版本,即使引用程序集目录中的引用程序集正在引用。

有谁知道如何以最大分辨率2 ^ 16构建一个WriteableBitmap,即65,536 x 65,536或者我做错了什么?

0 个答案:

没有答案