OSDN Git Service

73aff17819cbd50c5ae290a7ac759dd1d297eb68
[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 public class NyARRgbRaster extends NyARRgbRaster_BasicClass\r
8 {\r
9         protected Object _buf;\r
10         protected INyARRgbPixelReader _reader;\r
11         /**\r
12          * バッファオブジェクトがアタッチされていればtrue\r
13          */\r
14         protected boolean _is_attached_buffer;\r
15         \r
16         /**\r
17          * \r
18          * @param i_width\r
19          * @param i_height\r
20          * @param i_raster_type\r
21          * NyARBufferTypeに定義された定数値を指定してください。\r
22          * @param i_is_alloc\r
23          * @throws NyARException\r
24          */\r
25         public NyARRgbRaster(int i_width, int i_height,int i_raster_type,boolean i_is_alloc) throws NyARException\r
26         {\r
27                 super(i_width,i_height,i_raster_type);\r
28                 if(!initInstance(this._size,i_raster_type,i_is_alloc)){\r
29                         throw new NyARException();\r
30                 }\r
31         }\r
32         /**\r
33          * \r
34          * @param i_width\r
35          * @param i_height\r
36          * @param i_raster_type\r
37          * NyARBufferTypeに定義された定数値を指定してください。\r
38          * @throws NyARException\r
39          */\r
40         public NyARRgbRaster(int i_width, int i_height,int i_raster_type) throws NyARException\r
41         {\r
42                 super(i_width,i_height,i_raster_type);\r
43                 if(!initInstance(this._size,i_raster_type,true)){\r
44                         throw new NyARException();\r
45                 }\r
46         }\r
47         /**\r
48          * Readerとbufferを初期化する関数です。コンストラクタから呼び出します。\r
49          * 継承クラスでこの関数を拡張することで、対応するバッファタイプの種類を増やせます。\r
50          * @param i_size\r
51          * @param i_raster_type\r
52          * @param i_is_alloc\r
53          * @return\r
54          */\r
55         protected boolean initInstance(NyARIntSize i_size,int i_raster_type,boolean i_is_alloc)\r
56         {\r
57                 switch(i_raster_type)\r
58                 {\r
59                         case NyARBufferType.INT1D_X8R8G8B8_32:\r
60                                 this._buf=i_is_alloc?new int[i_size.w*i_size.h]:null;\r
61                                 this._reader=new NyARRgbPixelReader_INT1D_X8R8G8B8_32((int[])this._buf,i_size);\r
62                                 break;\r
63                         case NyARBufferType.BYTE1D_B8G8R8X8_32:\r
64                                 this._buf=i_is_alloc?new byte[i_size.w*i_size.h*4]:null;\r
65                                 this._reader=new NyARRgbPixelReader_BYTE1D_B8G8R8X8_32((byte[])this._buf,i_size);\r
66                                 break;\r
67                         case NyARBufferType.BYTE1D_R8G8B8_24:\r
68                                 this._buf=i_is_alloc?new byte[i_size.w*i_size.h*3]:null;\r
69                                 this._reader=new NyARRgbPixelReader_BYTE1D_R8G8B8_24((byte[])this._buf,i_size);\r
70                                 break;\r
71                         case NyARBufferType.BYTE1D_B8G8R8_24:\r
72                                 this._buf=i_is_alloc?new byte[i_size.w*i_size.h*3]:null;\r
73                                 this._reader=new NyARRgbPixelReader_BYTE1D_B8G8R8_24((byte[])this._buf,i_size);\r
74                                 break;\r
75                         case NyARBufferType.BYTE1D_X8R8G8B8_32:\r
76                                 this._buf=i_is_alloc?new byte[i_size.w*i_size.h*4]:null;\r
77                                 this._reader=new NyARRgbPixelReader_BYTE1D_X8R8G8B8_32((byte[])this._buf,i_size);\r
78                                 break;\r
79                         case NyARBufferType.WORD1D_R5G6B5_16LE:\r
80                                 this._buf=i_is_alloc?new short[i_size.w*i_size.h]:null;\r
81                                 this._reader=new NyARRgbPixelReader_WORD1D_R5G6B5_16LE((short[])this._buf,i_size);\r
82                                 break;\r
83                         default:\r
84                                 return false;\r
85                 }\r
86                 this._is_attached_buffer=i_is_alloc;\r
87                 return true;\r
88         }\r
89         public INyARRgbPixelReader getRgbPixelReader() throws NyARException\r
90         {\r
91                 return this._reader;\r
92         }\r
93         public Object getBuffer()\r
94         {\r
95                 return this._buf;\r
96         }\r
97         public boolean hasBuffer()\r
98         {\r
99                 return this._buf!=null;\r
100         }\r
101         public void wrapBuffer(Object i_ref_buf) throws NyARException\r
102         {\r
103                 assert(!this._is_attached_buffer);//バッファがアタッチされていたら機能しない。\r
104                 this._buf=i_ref_buf;\r
105                 //ピクセルリーダーの参照バッファを切り替える。\r
106                 this._reader.switchBuffer(i_ref_buf);\r
107         }\r
108 }\r