我必须生成大尺寸的大图像,比如 15000x3000。我使用 GDI+ 类Bitmap生成这些图像。
当然,有时生成会失败,因为没有更多的内存来实例化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 中检索连续内存?
我是否提出了正确的问题来实现我的目标?