OSDN Git Service

[backup]NyARToolkit
[nyartoolkit-and/nyartoolkit-and.git] / trunk / src.utils / qt / jp / nyatla / nyartoolkit / qt / utils / QtNyARRaster_RGB.java
index 3c96abd..edd972e 100644 (file)
  */\r
 package jp.nyatla.nyartoolkit.qt.utils;\r
 \r
-import java.awt.image.BufferedImage;\r
-import java.awt.image.DataBuffer;\r
-import java.awt.image.WritableRaster;\r
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
-import jp.nyatla.nyartoolkit.core.raster.rgb.NyARRgbRaster_BasicClass;\r
+import jp.nyatla.nyartoolkit.core.raster.*;\r
+import jp.nyatla.nyartoolkit.core.raster.rgb.*;\r
 import jp.nyatla.nyartoolkit.core.rasterreader.*;\r
 import jp.nyatla.nyartoolkit.core.types.*;\r
+\r
 /**\r
  * RGB形式のbyte配列をラップするNyARRasterです。\r
  * 保持したデータからBufferedImageを出力する機能も持ちます。\r
  */\r
-public class QtNyARRaster_RGB extends NyARRgbRaster_BasicClass\r
+public class QtNyARRaster_RGB implements INyARRgbRaster\r
 {\r
-       private class PixcelReader extends NyARRgbPixelReader_RGB24 implements INyARBufferReader\r
-       {\r
-               public PixcelReader(NyARIntSize i_size)\r
-               {\r
-                       super(null, i_size);\r
-                       return;\r
-               }\r
-\r
-               public void syncBuffer(byte[] i_ref_buffer)\r
-               {\r
-                       this._ref_buf = i_ref_buffer;\r
-                       return;\r
-               }\r
-\r
-               //\r
-               // INyARBufferReader\r
-               //\r
-               public Object getBuffer()\r
-               {\r
-                       return this._ref_buf;\r
-               }\r
-\r
-               public int getBufferType()\r
-               {\r
-                       return INyARBufferReader.BUFFERFORMAT_BYTE1D_R8G8B8_24;\r
-               }\r
-\r
-               public boolean isEqualBufferType(int i_type_value)\r
-               {\r
-                       return i_type_value == INyARBufferReader.BUFFERFORMAT_BYTE1D_R8G8B8_24;\r
-               }\r
-       }\r
-\r
-       protected byte[] _ref_buf;\r
-\r
-       protected PixcelReader _reader;\r
-\r
-       private WritableRaster _raster;\r
-\r
-       private BufferedImage _image;\r
+       private NyARIntSize _size;\r
+       private byte[] _buffer;\r
+       private NyARRgbPixelReader_BYTE1D_R8G8B8_24 _reader;\r
+       private int _buffer_type;\r
 \r
        /**\r
-        * RGB形式のJMFバッファをラップするオブジェクトをつくります。 生成直後のオブジェクトはデータを持ちません。 メンバ関数はsetBufferを実行後に使用可能になります。\r
+        * QuickTimeオブジェクトからイメージを取得するラスタオブジェクトを作ります。\r
+        * この\r
+        * @param i_width\r
+        * @param i_height\r
         */\r
        public QtNyARRaster_RGB(int i_width, int i_height)\r
        {\r
-               super(new NyARIntSize(i_width,i_height));\r
-               this._ref_buf = null;\r
-               this._reader = new PixcelReader(this._size);\r
-               _raster = WritableRaster.createInterleavedRaster(DataBuffer.TYPE_BYTE, i_width, i_height, i_width * 3, 3, new int[] { 0, 1, 2 }, null);\r
-               _image = new BufferedImage(i_width, i_height, BufferedImage.TYPE_3BYTE_BGR);\r
+               this._size=new NyARIntSize(i_width,i_height);\r
+               this._buffer= null;\r
+               this._buffer_type=INyARRaster.BUFFERFORMAT_BYTE1D_R8G8B8_24;\r
+               this._reader = new NyARRgbPixelReader_BYTE1D_R8G8B8_24(null,this._size);\r
        }\r
-\r
-       /**\r
-        * javax.media.Bufferを分析して、その分析結果をNyARRasterに適合する形で保持します。 関数実行後に外部でi_bufferの内容変更した場合には、再度setBuffer関数を呼び出してください。\r
-        * \r
-        * @param i_buffer\r
-        * RGB形式のデータを格納したjavax.media.Bufferオブジェクトを指定してください。\r
-        * @return i_bufferをラップしたオブジェクトを返します。\r
-        * @throws NyARException\r
-        */\r
-       public void setBuffer(byte[] i_buffer)\r
+       \r
+       final public int getWidth()\r
        {\r
-               this._ref_buf = i_buffer;\r
-               this._reader.syncBuffer(i_buffer);\r
+               return this._size.w;\r
        }\r
 \r
-       public INyARBufferReader getBufferReader()\r
+       final public int getHeight()\r
        {\r
-               return this._reader;\r
+               return this._size.h;\r
        }\r
 \r
-       public INyARRgbPixelReader getRgbPixelReader()\r
+       final public NyARIntSize getSize()\r
+       {\r
+               return this._size;\r
+       }\r
+       final public int getBufferType()\r
+       {\r
+               return this._buffer_type;\r
+       }\r
+       final public INyARRgbPixelReader getRgbPixelReader()\r
        {\r
                return this._reader;\r
        }\r
-\r
-       /**\r
-        * データを持っているかを返します。\r
-        * \r
-        * @return\r
-        */\r
-       public boolean hasData()\r
+       final public boolean hasBuffer()\r
        {\r
-               return this._ref_buf != null;\r
+               return this._buffer!=null;\r
+       }\r
+       final public Object getBuffer()\r
+       {\r
+               assert(this._buffer!=null);\r
+               return this._buffer;\r
+       }\r
+       final public boolean isEqualBufferType(int i_type_value)\r
+       {\r
+               return this._buffer_type==i_type_value;\r
+       }\r
+       final public void wrapBuffer(Object i_ref_buf) throws NyARException\r
+       {\r
+               this._buffer=(byte[])i_ref_buf;\r
+               this._reader.switchBuffer(i_ref_buf);\r
        }\r
-\r
        /**\r
-        * 保持しているデータからBufferedImageを作って返します\r
+        *      @deprecated hasBuffer()関数を使ってください\r
         * \r
-        * @return\r
         */\r
-       public BufferedImage createImage()\r
+       final public boolean hasData()\r
        {\r
-               _raster.setDataElements(0, 0, this._size.w, this._size.h, this._ref_buf);\r
-               _image.setData(_raster);\r
-               return _image;\r
+               return this.hasBuffer();\r
        }\r
-\r
 }\r