簡體   English   中英

加載高分辨率JPG時出現GDI +錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM