我在尝试通过C#加载JPG图像时遇到了常见的GDI +错误。我不确定这是否是由于这个JPG(46495px * 4536px)的高分辨率,因为加载其他低分辨率JPG文件工作正常。问题JPG文件大小为4696KB。
代码:
var newImage = Image.FromFile("demo.jpg"); //issue jpg
使用Image.FromStream()API时也失败了:
var stream = File.OpenRead("demo.jpg");
var image = Image.FromStream(stream);
如果有人能帮忙解释,我们非常感谢
答案 0 :(得分:1)
您需要可用的RAM来存储解压缩的图像位图
在32位显示器上,您将需要width * height * 4 + c
个字节空闲,其中c
未知,具体取决于所使用的绘图类的实现。
示例强>
在您的具体情况下,计算如下:
46495 * 4536 * 4 + c = 843605280 bytes + c = 805mb + c
使用以下内容查看您的位图可用的内存量。
包含对VisualBasic dll的引用:
using Microsoft.VisualBasic.Devices;
方法如下:
Console.Out.Write(new ComputerInfo().AvailablePhysicalMemory + "bytes free");
...或...
Console.Out.Write((ComputerInfo().AvailablePhysicalMemory / 1048576) + "mb free");
查找c
要查找c
,请在图像加载之前和之后使用上述方法。
成功加载大量图像并记录加载前后使用的内存。
通过比较加载不同尺寸图像之前和之后使用的内存进行实验,考虑到位图的大小,您会发现c
的近似值。
请注意,所有图像类型都会在内部转换为原始位图以供查看,无论它是以.jpg,.png,.gif还是其他方式存储。所以当我说Bitmp时,我并没有提到扩展名.bmp。相反,我指的是字面意义上的bitmp作为原始图像文件,即位图。
答案 1 :(得分:0)