OSDN Git Service

[NyARToolKit for java]update document
[nyartoolkit-and/nyartoolkit-and.git] / lib / src / jp / nyatla / nyartoolkit / core / raster / rgb / NyARRgbRaster.java
1 package jp.nyatla.nyartoolkit.core.raster.rgb;\r
2 \r
3 import jp.nyatla.nyartoolkit.core.rasterreader.*;\r
4 import jp.nyatla.nyartoolkit.core.types.*;\r
5 import jp.nyatla.nyartoolkit.*;\r
6 \r
7 /**\r
8  * このクラスは、指定形式のバッファを持つRGBラスタです。\r
9  * 外部参照バッファ、内部バッファの両方に対応します。\r
10  * <p>\r
11  * 対応しているバッファタイプ-\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
18  * </ul>\r
19  * </p>\r
20  */\r
21 public class NyARRgbRaster extends NyARRgbRaster_BasicClass\r
22 {\r
23         /** バッファオブジェクト*/\r
24         protected Object _buf;\r
25         /** ピクセルリーダ*/\r
26         protected INyARRgbPixelReader _reader;\r
27         /** バッファオブジェクトがアタッチされていればtrue*/\r
28         protected boolean _is_attached_buffer;\r
29         \r
30         /**\r
31          * コンストラクタです。\r
32          * 画像のサイズパラメータとバッファ形式を指定して、インスタンスを生成します。\r
33          * @param i_width\r
34          * ラスタのサイズ\r
35          * @param i_height\r
36          * ラスタのサイズ\r
37          * @param i_raster_type\r
38          * ラスタのバッファ形式。\r
39          * {@link NyARBufferType}に定義された定数値を指定してください。\r
40          * 指定できる値は、クラスの説明を見てください。\r
41          * @param i_is_alloc\r
42          * バッファを外部参照にするかのフラグ値。\r
43          * trueなら内部バッファ、falseなら外部バッファを使用します。\r
44          * falseの場合、初期のバッファはnullになります。インスタンスを生成したのちに、{@link #wrapBuffer}を使って割り当ててください。\r
45          * @throws NyARException\r
46          */\r
47         public NyARRgbRaster(int i_width, int i_height,int i_raster_type,boolean i_is_alloc) throws NyARException\r
48         {\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
52                 }\r
53         }\r
54         /**\r
55          * コンストラクタです。\r
56          * 画像のサイズパラメータとバッファ形式を指定して、インスタンスを生成します。\r
57          * @param i_width\r
58          * ラスタのサイズ\r
59          * @param i_height\r
60          * ラスタのサイズ\r
61          * @param i_raster_type\r
62          * ラスタのバッファ形式。\r
63          * {@link NyARBufferType}に定義された定数値を指定してください。\r
64          * 指定できる値は、クラスの説明を見てください。\r
65          * @throws NyARException\r
66          */\r
67         public NyARRgbRaster(int i_width, int i_height,int i_raster_type) throws NyARException\r
68         {\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
72                 }\r
73         }\r
74         /**\r
75          * Readerとbufferを初期化する関数です。コンストラクタから呼び出します。\r
76          * 継承クラスでこの関数を拡張することで、対応するバッファタイプの種類を増やせます。\r
77          * @param i_size\r
78          * ラスタのサイズ\r
79          * @param i_raster_type\r
80          * バッファタイプ\r
81          * @param i_is_alloc\r
82          * 外部参照/内部バッファのフラグ\r
83          * @return\r
84          * 初期化が成功すると、trueです。\r
85          */\r
86         protected boolean initInstance(NyARIntSize i_size,int i_raster_type,boolean i_is_alloc)\r
87         {\r
88                 switch(i_raster_type)\r
89                 {\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
93                                 break;\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
97                                 break;\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
101                                 break;\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
105                                 break;\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
109                                 break;\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
113                                 break;\r
114                         default:\r
115                                 return false;\r
116                 }\r
117                 this._is_attached_buffer=i_is_alloc;\r
118                 return true;\r
119         }\r
120         /**\r
121          * この関数は、画素形式によらない画素アクセスを行うオブジェクトへの参照値を返します。\r
122          * @return\r
123          * オブジェクトの参照値\r
124          * @throws NyARException\r
125          */     \r
126         public INyARRgbPixelReader getRgbPixelReader() throws NyARException\r
127         {\r
128                 return this._reader;\r
129         }\r
130         /**\r
131          * この関数は、ラスタのバッファへの参照値を返します。\r
132          * バッファの形式は、コンストラクタに指定した形式と同じです。\r
133          */     \r
134         public Object getBuffer()\r
135         {\r
136                 return this._buf;\r
137         }\r
138         /**\r
139          * インスタンスがバッファを所有するかを返します。\r
140          * コンストラクタでi_is_allocをfalseにしてラスタを作成した場合、\r
141          * バッファにアクセスするまえに、バッファの有無をこの関数でチェックしてください。\r
142          * @return\r
143          * インスタンスがバッファを所有すれば、trueです。\r
144          */             \r
145         public boolean hasBuffer()\r
146         {\r
147                 return this._buf!=null;\r
148         }\r
149         /**\r
150          * この関数は、ラスタに外部参照バッファをセットします。\r
151          * 外部参照バッファの時にだけ使えます。\r
152          */\r
153         public void wrapBuffer(Object i_ref_buf) throws NyARException\r
154         {\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
159         }\r
160 }\r