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 で連続したメモリを取得する方法はありますか?
目標を達成するために正しい質問をしていますか?