2005年07月05日

SWTのImageData

SWTで画像の生データのバイト配列はImageDataで扱う

depthが32の場合は1ドットで4バイト使うので以下のようにすると1ドットの情報が得られる。
4つめのバイトは使われていない模様。アルファチャンネルは別にデータを持ってるしなぁ。

bytedata[( x * bpp ) + ( y * imageWidth * bpp) ] = R
bytedata[( x * bpp ) + ( y * imageWidth * bpp) + 1 ] = G
bytedata[( x * bpp ) + ( y * imageWidth * bpp) + 2 ] = B
bytedata[( x * bpp ) + ( y * imageWidth * bpp) + 3 ] = ?


よく見たらこれに関しての詳しいドキュメントがあるじゃないか。Standard Widget Toolkit でのJava 2D画像

最初に書いた式では16bitの場合画面が乱れることがあった。どうもImageの横幅が奇数ドットの場合に乱れていた。これに関しても以下のように説明&解決策があった。日本語ドキュメントバンザイ。
と言うことで最初に書いた式では完璧に動作するわけではない。が、めんどくさいので放置。

各ピクセルは3バイトでコード化されていますが、24ビット画像の場合はピクセル中の1ラインのピクセル・サイズは必ずしも3*widthではありません。2ラインのピクセル間で、一部のインデックスは使われずに残る場合もあります。(次のラインがどのインデックスで始まるかを知るために)各ラインのピクセルに対して実際に何バイト使われているかを知るには、ImageDataのbytesPerLineフィールドの値を使う必要があります。

Trackback on "SWTのImageData"

このエントリーのトラックバックURL: 

"SWTのImageData"へのトラックバックはまだありません。

Comment on "SWTのImageData"

"SWTのImageData"へのコメントはまだありません。

Post a Comment

コメントする

コメント登録機能が設定されていますが、TypeKey トークンが設定されていません。