2007 年 1 月 14 日 0 時 51 分

画面データと AWT クラス


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


通信を行うための最低限の準備は整った。
次はいよいよ画面データについて考えていかなければならない。

まず、RFB の画面は画素形式である PIXEL_FORMAT で示される。
PIXEL_FORMAT は、ピクセルの RGB の内訳を定義しており、
ピクセル値は U8, U16, U32 の基本型にパッキングされる。
画面は、ピクセル値が縦横に連なったものである。

Java による実装で上記画面のデータを作るためには、
byte や int 等の配列を直接取り扱う方法もあるが、
AWT のパッケージに存在する各種クラスを方法もある。
RFB の各種画素形式を自分で扱うのは大変なので、
今回は既存のクラスをある程度利用する方法で進めよう。

AWT のサポートを利用するためには、
RFB の各種データ構造に対応するクラスを調べる必要がある。

Java には、GUI の描画だけでなく、
GUI コンポーネントを扱うフレームワークがあるのだが、
それを使うと実装が非常に煩雑になるため、
今回は描画は独自で行うことを前提とし、
画面データ管理と色変換等に的を絞ってみよう。

まず、メインの画面データの格納には、
java.awt.image.WritableRaster を使うとよさそうだ。
このクラスを利用すれば、縦横の画像データは、
座標とピクセル値で操作する事ができるようになる。

WritableRaster は DataBuffer クラスのデータ領域に、
SampleModel クラスの格納形式に基づいて、
自動的にピクセルデータを格納してくれる。

SampleModel はパッキングのみを管理しており、
色空間等は別のクラスのサポートが必要である。

RFB では画素形式を PIXEL_FORMAT 構造体で管理するのだが、
AWT では java.awt.image.ColorModel やその派生クラスが、
同等の役割を担っており、これを使えば、
RGB 値とピクセル値の相互変換を行う事ができる。

なお、RFB では RGB のみしか扱わないので、
カラーテーブルを持つ場合は IndexColorModel、
TrueColor の場合は DirectColorModel を使うことになる。

基本的には、上記クラスを利用することで、
画像データの管理を行う事が可能となる。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.