2 * RGB形式のbyte配列をラップするNyARRasterです。
\r
3 * 保持したデータからBufferedImageを出力する機能も持ちます。
\r
4 * (c)2008 arc@dmz, A虎@nyatla.jp
\r
5 * arc@digitalmuseum.jp
\r
8 package jp.nyatla.nyartoolkit.qt.utils;
\r
11 import java.awt.image.BufferedImage;
\r
12 import java.awt.image.DataBuffer;
\r
13 import java.awt.image.WritableRaster;
\r
15 import jp.nyatla.nyartoolkit.NyARException;
\r
16 import jp.nyatla.nyartoolkit.core.raster.NyARRaster;
\r
19 public class QtNyARRaster_RGB implements NyARRaster
\r
21 protected byte[] ref_buf;
\r
22 protected int width=0;
\r
23 protected int height=0;
\r
24 private WritableRaster raster;
\r
25 private BufferedImage image;
\r
29 * RGB形式のJMFバッファをラップするオブジェクトをつくります。
\r
30 * 生成直後のオブジェクトはデータを持ちません。
\r
31 * メンバ関数はsetBufferを実行後に使用可能になります。
\r
33 public QtNyARRaster_RGB(int i_width,int i_height)
\r
38 raster = WritableRaster.createInterleavedRaster(DataBuffer.TYPE_BYTE,
\r
41 new int[] { 0, 1, 2 }, null);
\r
42 image = new BufferedImage(width, height,
\r
43 BufferedImage.TYPE_3BYTE_BGR);
\r
46 * javax.media.Bufferを分析して、その分析結果をNyARRasterに適合する形で保持します。
\r
47 * 関数実行後に外部でi_bufferの内容変更した場合には、再度setBuffer関数を呼び出してください。
\r
49 * RGB形式のデータを格納したjavax.media.Bufferオブジェクトを指定してください。
\r
51 * i_bufferをラップしたオブジェクトを返します。
\r
52 * @throws NyARException
\r
54 public void setBuffer(byte[] i_buffer)
\r
58 public int getPixelTotal(int i_x,int i_y)
\r
60 int bp=(i_x+i_y*width)*3;
\r
61 byte[] ref=this.ref_buf;
\r
62 return (ref[bp] & 0xff)+(ref[bp+1] & 0xff)+(ref[bp+2] & 0xff);
\r
64 public void getPixelTotalRowLine(int i_row,int[] o_line)
\r
66 final byte[] ref=this.ref_buf;
\r
67 int bp=(i_row+1)*this.width*3-3;
\r
68 for(int i=this.width-1;i>=0;i--){
\r
69 o_line[i]=(ref[bp] & 0xff)+(ref[bp+1] & 0xff)+(ref[bp+2] & 0xff);
\r
73 public int getWidth()
\r
77 public int getHeight()
\r
81 public void getPixel(int i_x,int i_y,int[] i_rgb)
\r
83 int bp=(i_x+i_y*this.width)*3;
\r
84 byte[] ref=this.ref_buf;
\r
85 i_rgb[0]=ref[bp+0];//R
\r
86 i_rgb[1]=ref[bp+1];//G
\r
87 i_rgb[2]=ref[bp+2];//B
\r
93 public boolean hasData()
\r
95 return ref_buf!=null;
\r
97 public void getPixelSet(int[] i_x,int i_y[],int i_num,int[] o_rgb)
\r
99 int width=this.width;
\r
100 byte[] ref=this.ref_buf;
\r
102 for(int i=i_num-1;i>=0;i--){
\r
103 bp=(i_x[i]+i_y[i]*width)*3;
\r
104 o_rgb[i*3+0]=ref[bp+0];//R
\r
105 o_rgb[i*3+1]=ref[bp+1];//G
\r
106 o_rgb[i*3+2]=ref[bp+2];//B
\r
111 /** 保持しているデータからBufferedImageを作って返します。 */
\r
112 public BufferedImage createImage() {
\r
113 raster.setDataElements(0, 0, width, height, ref_buf);
\r
114 image.setData(raster);
\r