[英]GDI+ error when loading a high resolution JPG
嘗試通過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);
非常感謝任何人可以幫助解釋
您需要可用的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稱為原始圖像文件(即位圖)。
如果GDI +不支持文件的像素格式,它將拋出“ OutOfMemoryException”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.