1 package jp.nyatla.nyartoolkit.core.raster.rgb;
\r
3 import jp.nyatla.nyartoolkit.core.rasterreader.*;
\r
4 import jp.nyatla.nyartoolkit.core.types.*;
\r
5 import jp.nyatla.nyartoolkit.*;
\r
8 * このクラスは、指定形式のバッファを持つRGBラスタです。
\r
9 * 外部参照バッファ、内部バッファの両方に対応します。
\r
12 * <ul>{@link NyARBufferType#INT1D_X8R8G8B8_32}
\r
13 * <li>{@link NyARBufferType#BYTE1D_B8G8R8X8_32}
\r
14 * <li>{@link NyARBufferType#BYTE1D_R8G8B8_24}
\r
15 * <li>{@link NyARBufferType#BYTE1D_B8G8R8_24}
\r
16 * <li>{@link NyARBufferType#BYTE1D_X8R8G8B8_32}
\r
17 * <li>{@link NyARBufferType#WORD1D_R5G6B5_16LE}
\r
21 public class NyARRgbRaster extends NyARRgbRaster_BasicClass
\r
24 protected Object _buf;
\r
26 protected INyARRgbPixelReader _reader;
\r
27 /** バッファオブジェクトがアタッチされていればtrue*/
\r
28 protected boolean _is_attached_buffer;
\r
32 * 画像のサイズパラメータとバッファ形式を指定して、インスタンスを生成します。
\r
37 * @param i_raster_type
\r
39 * {@link NyARBufferType}に定義された定数値を指定してください。
\r
40 * 指定できる値は、クラスの説明を見てください。
\r
42 * バッファを外部参照にするかのフラグ値。
\r
43 * trueなら内部バッファ、falseなら外部バッファを使用します。
\r
44 * falseの場合、初期のバッファはnullになります。インスタンスを生成したのちに、{@link #wrapBuffer}を使って割り当ててください。
\r
45 * @throws NyARException
\r
47 public NyARRgbRaster(int i_width, int i_height,int i_raster_type,boolean i_is_alloc) throws NyARException
\r
49 super(i_width,i_height,i_raster_type);
\r
50 if(!initInstance(this._size,i_raster_type,i_is_alloc)){
\r
51 throw new NyARException();
\r
56 * 画像のサイズパラメータとバッファ形式を指定して、インスタンスを生成します。
\r
61 * @param i_raster_type
\r
63 * {@link NyARBufferType}に定義された定数値を指定してください。
\r
64 * 指定できる値は、クラスの説明を見てください。
\r
65 * @throws NyARException
\r
67 public NyARRgbRaster(int i_width, int i_height,int i_raster_type) throws NyARException
\r
69 super(i_width,i_height,i_raster_type);
\r
70 if(!initInstance(this._size,i_raster_type,true)){
\r
71 throw new NyARException();
\r
75 * Readerとbufferを初期化する関数です。コンストラクタから呼び出します。
\r
76 * 継承クラスでこの関数を拡張することで、対応するバッファタイプの種類を増やせます。
\r
79 * @param i_raster_type
\r
86 protected boolean initInstance(NyARIntSize i_size,int i_raster_type,boolean i_is_alloc)
\r
88 switch(i_raster_type)
\r
90 case NyARBufferType.INT1D_X8R8G8B8_32:
\r
91 this._buf=i_is_alloc?new int[i_size.w*i_size.h]:null;
\r
92 this._reader=new NyARRgbPixelReader_INT1D_X8R8G8B8_32((int[])this._buf,i_size);
\r
94 case NyARBufferType.BYTE1D_B8G8R8X8_32:
\r
95 this._buf=i_is_alloc?new byte[i_size.w*i_size.h*4]:null;
\r
96 this._reader=new NyARRgbPixelReader_BYTE1D_B8G8R8X8_32((byte[])this._buf,i_size);
\r
98 case NyARBufferType.BYTE1D_R8G8B8_24:
\r
99 this._buf=i_is_alloc?new byte[i_size.w*i_size.h*3]:null;
\r
100 this._reader=new NyARRgbPixelReader_BYTE1D_R8G8B8_24((byte[])this._buf,i_size);
\r
102 case NyARBufferType.BYTE1D_B8G8R8_24:
\r
103 this._buf=i_is_alloc?new byte[i_size.w*i_size.h*3]:null;
\r
104 this._reader=new NyARRgbPixelReader_BYTE1D_B8G8R8_24((byte[])this._buf,i_size);
\r
106 case NyARBufferType.BYTE1D_X8R8G8B8_32:
\r
107 this._buf=i_is_alloc?new byte[i_size.w*i_size.h*4]:null;
\r
108 this._reader=new NyARRgbPixelReader_BYTE1D_X8R8G8B8_32((byte[])this._buf,i_size);
\r
110 case NyARBufferType.WORD1D_R5G6B5_16LE:
\r
111 this._buf=i_is_alloc?new short[i_size.w*i_size.h]:null;
\r
112 this._reader=new NyARRgbPixelReader_WORD1D_R5G6B5_16LE((short[])this._buf,i_size);
\r
117 this._is_attached_buffer=i_is_alloc;
\r
121 * この関数は、画素形式によらない画素アクセスを行うオブジェクトへの参照値を返します。
\r
124 * @throws NyARException
\r
126 public INyARRgbPixelReader getRgbPixelReader() throws NyARException
\r
128 return this._reader;
\r
131 * この関数は、ラスタのバッファへの参照値を返します。
\r
132 * バッファの形式は、コンストラクタに指定した形式と同じです。
\r
134 public Object getBuffer()
\r
139 * インスタンスがバッファを所有するかを返します。
\r
140 * コンストラクタでi_is_allocをfalseにしてラスタを作成した場合、
\r
141 * バッファにアクセスするまえに、バッファの有無をこの関数でチェックしてください。
\r
143 * インスタンスがバッファを所有すれば、trueです。
\r
145 public boolean hasBuffer()
\r
147 return this._buf!=null;
\r
150 * この関数は、ラスタに外部参照バッファをセットします。
\r
151 * 外部参照バッファの時にだけ使えます。
\r
153 public void wrapBuffer(Object i_ref_buf) throws NyARException
\r
155 assert(!this._is_attached_buffer);//バッファがアタッチされていたら機能しない。
\r
156 this._buf=i_ref_buf;
\r
157 //ピクセルリーダーの参照バッファを切り替える。
\r
158 this._reader.switchBuffer(i_ref_buf);
\r