画像の最大の高さと幅は、チャネルあたり 32 ビット * 4 チャネルで 2^16 ピクセルです。BitmapSource の最大サイズは 2^32 バイト (64 ギガバイト) で、最大画像サイズは 4 ギガピクセルです。最小画像サイズは 1x1 です。
最大サイズは (2^16)^2 = 4,294,967,296 ピクセルです
各ピクセルはチャネルごとに 4 バイトであり、4 つのチャネル (A/R/G/B) では 16 バイトです。
したがって、バイト単位の最大サイズは 16 * 4,294,967,296 = 68,719,476,736 バイト = 64 ギガバイトになります。
しかし、私はできるだけ高く行くことができます
System.Windows.Media.Imaging.WriteableBitmap wbit = new WriteableBitmap(32000, 32000, 97, 97, PixelFormats.Bgra32, null);
たとえば 33,000 x 33,000 にすると、コンストラクターは System.OverflowException: The image data generated an overload during processing. をスローします。---> System.ArithmeticException: 算術演算でオーバーフローまたはアンダーフローが発生しました。
私のコンピューターには 32 GB のメモリがあり、Windows 8.1、VS を実行しています。これは、64 ビット プラットフォームをターゲットとする .NET 4.5 コンソール アプリケーションであり、App.Config で gcAllowVeryLargeObjects が有効になっているため、これは .NET Maximum Object に関連する問題ではありません。 2GBのサイズ。このアプリケーションでは、最大 15 GB の整数の配列を作成できます。
さらに、WIC にアクセスするために、PresentationCore、PresentationFramework、および WindowsBase を参照しています。これらはすべて、C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5\ 内にあり、最初は驚きました。 x86ディレクトリにあったためですが、私が理解しているように、これらはメタデータの取得にのみ使用され、実際に使用されている実際のアセンブリはGACにあるため、たとえばWindows 8.1 Proには32ビットと64ビットの両方のPresentationCoreがありますC:\Windows\assembly\NativeImages_v4.0.30319_32\PresentationCore\24f6c80242420a1cea5cc254bf420027 および C:\Windows\assembly\NativeImages_v4.0.30319_64\PresentationCore\7a22d69ccf672cec14abf04d9551b3a0 にあります。PresentationFramework と WindowsBase についても同様の取引が行われていますが、私はこれについて 100% ではありません。
65,536 x 65,536 である 2^16 の最大解像度で WriteableBitmap を作成する方法、または私が間違っていることを知っている人はいますか?