我必須生成大的大圖像,像15000x3000。我用GDI +生成了這個圖像,類別爲Bitmap。檢索可用的連續內存
當然,由於沒有更多的內存來實例化位圖,所以該代會不時失敗。我的目標是告訴我的用戶他們可以生成的圖像的最大尺寸。
的消息應該是這樣的:
您試圖生成大小15000x3000的圖像,但沒有足夠的內存。 可用的最大尺寸爲10000x3000或15000x1000。
的想法創建消息是類似的東西:
public bool CanCreateBitmap(Size size, out string message)
{
long availableMemory = this.GetAvailableContiguousMemory();
long bytesRequiered = (long)size.Width * size.Height * 32;
if (availableMemory < bytesRequiered)
{
var sizeProposal1 = new Size(size.Width, (int)(availableMemory/(32 * size.Width)));
var sizeProposal2 = new Size((int)(availableMemory/(32 * size.Height)), size.Height);
message = string.Format("You tried to generate an image of size {0}, but there is not enough memory."
+ Environment.NewLine + "The maximum size available is {1}, or {2}."
, size, sizeProposal1, sizeProposal2);
return false;
}
else
{
message = "";
return true;
}
}
但我沒有代碼的功能GetAvailableContiguousMemory()
。
有沒有一種方法來檢索.Net中的連續內存?
我在問正確的問題以達到我的目標嗎?
也許你可以把位圖創建代碼放在try/catch塊中,並處理內存不足異常(如果發生的話)? – dandan78
這已經是主意了,但這裏的主要觀點也是向用戶提出一些建議。他們感到無聊,只能得到一個「無法創建位圖」的信息而沒有更多的信息。 –