*/\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