相关疑难解决方法(0)

C#.NET Bitmap的最大分辨率是多少?

从理论上讲,它应该是65,535 x 65,535,因为你有足够的内存,大约17GB.

但是,创建一个.NET 4.5控制台应用程序来测试它,它会抛出System.ArgumentException:参数无效.

该应用程序是为64位平台构建的.在具有32GB内存的64位平台上运行.我能够获得的最大分辨率是22,000 x 22,000像素.

我找不到任何关于此的文件.

奇怪的是,即使在22,000 x 22,000像素,它也不总是有效.它有时会起作用,它有时会抛出异常.这让我觉得它与连续的内存分配有关,但是有大约30GB的可用内存.

有没有人有这方面的经验?如果我想使用100,000 x 100,000像素图像和更大的图像,那么除了实现我自己的位图之外,最好的方法是什么?

编辑:问题不是.NET最大对象大小.这可以通过针对64位平台,并在应用程序配置中设置gcAllowVeryLargeObjects标志来克服.通过这种方式,我可以让应用程序使用单个整数数组消耗超过15GB的内存.到目前为止,答案似乎在于GDI +的底层实现,但我该如何解决呢?

.net c# bitmap

9
推荐指数
2
解决办法
1万
查看次数

.NET GDI +图像大小 - 文件编解码器限制

是否可以使用.NET提供的图像文件编解码器编码的图像大小有限制?

我正在尝试编码大小为4GB的图像,但它根本无法正常工作(或无法正常工作,即写出不可读的文件).bmp,.jpg,.png或.tif编码器.

当我将图像大小降低到<2GB时,它确实适用于.jpg而不是.bmp,.tif或.png.

我的下一次尝试是尝试libtiff,因为我知道tiff文件适用于大图像.

什么是大图像的良好文件格式?或者我只是达到文件格式限制?

(所有这些都是在具有8 GB RAM的64位操作系统(WinXP 64)上完成的,并使用x64架构进行编译.)

Random r = new Random((int)DateTime.Now.Ticks);

int width = 64000;
int height = 64000;
int stride = (width % 4) > 0 ? width + (width % 4) : width;
UIntPtr dataSize = new UIntPtr((ulong)stride * (ulong)height);
IntPtr p = Program.VirtualAlloc(IntPtr.Zero, dataSize, Program.AllocationType.COMMIT | Program.AllocationType.RESERVE, Program.MemoryProtection.READWRITE);

Bitmap bmp = new Bitmap(width, height, stride, PixelFormat.Format8bppIndexed, p);
BitmapData bd = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat);

ColorPalette cp = bmp.Palette;
for (int i …
Run Code Online (Sandbox Code Playgroud)

.net gdi+ codec

6
推荐指数
1
解决办法
4071
查看次数

标签 统计

.net ×2

bitmap ×1

c# ×1

codec ×1

gdi+ ×1