小编Seo*_*Yoo的帖子

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万
查看次数

如何将分辨率为 32767 x 32767 的 C# .NET WriteableBitmap 保存为 JPG 或 PNG

这是针对在具有 32GB 内存的 64 位 Windows 8 系统上运行的 .NET 4.5 控制台应用程序。该应用程序面向 64 位平台,并启用了 gcAllowVeryLargeObjects 标志,这允许应用程序创建大于 .NET 2Gb 限制的对象。因此,我能够创建一个最大 15GB 的整数数组。

我使用以下构造函数创建一个 32,767 x 32,767 像素的 System.Windows.Media.Imaging.WriteableBitmap,它使用 WIC(Windows 成像组件而不是 GDI+,因为 WIC 可以处理比 GDI+ 更高的分辨率)

WriteableBitmap wbit = new WriteableBitmap(32767, 32767, 300, 300, PixelFormats.Bgra32, null);
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下代码将其另存为 JPG

using (FileStream stream = new FileStream("c:\\test.jpg",FileMode.Create))
{
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(wbit));
encoder.Save(stream);
}
Run Code Online (Sandbox Code Playgroud)

我还尝试使用以下代码将其另存为 PNG

using (FileStream stream = new FileStream("c:\\test.png",FileMode.Create))
{
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(wbit));
encoder.Save(stream);
}
Run Code Online (Sandbox Code Playgroud)

对于 JPG 和 …

.net c# jpeg bitmap writeablebitmap

5
推荐指数
1
解决办法
704
查看次数

标签 统计

.net ×2

bitmap ×2

c# ×2

jpeg ×1

writeablebitmap ×1