【发布时间】:2021-09-08 14:39:05
【问题描述】:
我需要处理大单色图像。我基本上需要在高分辨率(如 30000x20000px)单色图像(400dpi 的 A2+ 绘图)中添加一个横幅(框架和格式化文本)。
默认PixelFormat是Format1bppIndexed,这使得即使是那些大的图片尺寸也相对较小。但是,使用 .NET GDI+ Graphics 对象需要 unindexed 位图。
将图像转换为最低可用未索引PixelFormat.Format16bppGrayscale:
bmpResized = ImgResized.Clone(New System.Drawing.Rectangle(0, 0, ImgResized.Width, ImgResized.Height),
System.Drawing.Imaging.PixelFormat.Format16bppGrayScale)
...Image 和 Bitmap(OutOfMemoryExeption: Not enough memory - 在 32GB 机器上)处理它变得很大。
我尝试单独创建横幅并以像素方式加入图片,但是我遇到了同样的限制 - SetPixel 需要未索引的位图。
有没有办法克服这些问题?
编辑:一个可能的解决方案是创建一个字节数组并根据 [https://social.msdn.microsoft.com/Forums/vstudio/en-US/54a096ff-46f3-45ce-8560-bf5a0618ef75/how 编辑字节-to-set-pixel-into-bitmap-with-pixel-format-of-format8bppindexed-?forum=csharpgeneral][1]。但是我不确定我如何能按字节“移动”第二张图像。
【问题讨论】:
-
使用 ImageMagick 吗?
-
ps; 32Gb 并不真正相关 - .NET 中的对象大小有上限,与安装的内存的物理量无关
-
@CaiusJard nope :-(。我知道并使用过 ImageMagic,但是在这种情况下我无法跨出 Windows 标准库。
-
@CaiusJard 你可能是对的,我不确定适用哪些限制。
-
@Oak_3260548 GDI+ 对图像大小有限制,并且错误消息的描述性不强。 System.Windows.Media.Imaging Namespace 有更强大的类。
标签: vb.net graphics marshalling pixelformat monochrome