LEADTOOLS ナレッジベース

RasterImageGdiPlusGraphicsContainerを作成した際に『Image is not GDI+ compatible』エラーが発生します。

RasterImageGdiPlusGraphicsContainerクラスを使用して画像表面のGraphicsオブジェクトを作成し、大きいサイズの画像(例:30000×30000)に文字列などを描画する際に下記のSystem.ArgumentExceptionエラーが発生します。

------------------------------------------------------------
System.ArgumentException: 'Image is not GDI+ compatible'
------------------------------------------------------------

これは、GDI+の制限事項となります。
LEADTOOLSを使用せずに、以下のようにGDI+の機能のみを使用した場合でもSystem.ArgumentExceptionがスローされます。

サンプルコード(C#)
------------------------------------------------------------
Bitmap b = new Bitmap(30000, 30000);
Graphics g = Graphics.FromImage(b);
------------------------------------------------------------
詳細については、マイクロソフト社のドキュメント「Bitmap コンストラクター」をご参照ください。

 

なお、LEADTOOLSでは通常、コンベンショナルメモリに画像データを保持するように動作しますが、連続したメモリ領域が確保できない場合は、タイル画像(IsTiled = True)を使用するように動作します。

また、GDI+ Graphicsオブジェクトを作成してGraphicsオブジェクトを扱う場合には、GDI+に準拠した(互換性のある)画像である必要があるため、LEADTOOLSの内部処理としては、GDI+での処理を行うための要件を満たすために画像変換が行われます。
必要条件としては、製品ヘルプの「ChangeToImage メソッド」の解説にある以下の要件があります。

------------------------------------------------------------
・IsConventionalMemoryがtrueであること(タイル画像、圧縮画像、およびディスク画像はサポートされていません)。
・BitsPerPixelの値が1、4、8、16、24、32のいずれかであること。
・Orderの値がRasterByteOrder.RgbまたはRasterByteOrder.Bgrであること。
・グレースケール画像でないこと。
・ViewPerspectiveの値がRasterViewPerspective.TopLeftであること。
------------------------------------------------------------

上記のとおり、連続したメモリ領域が確保できない場合にタイル画像を使用する製品の仕様と、Graphicsオブジェクトを扱うための必要条件の制限によってGDI+画像と互換性のない形式を変換しようとしているためにエラーが発生します。

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています

0 コメント

記事コメントは受け付けていません。