2 * PROJECT: NyARToolkit
\r
3 * --------------------------------------------------------------------------------
\r
4 * This work is based on the original ARToolKit developed by
\r
7 * HITLab, University of Washington, Seattle
\r
8 * http://www.hitl.washington.edu/artoolkit/
\r
10 * The NyARToolkit is Java edition ARToolKit class library.
\r
11 * Copyright (C)2008-2009 Ryo Iizuka
\r
13 * This program is free software: you can redistribute it and/or modify
\r
14 * it under the terms of the GNU General Public License as published by
\r
15 * the Free Software Foundation, either version 3 of the License, or
\r
16 * (at your option) any later version.
\r
18 * This program is distributed in the hope that it will be useful,
\r
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
21 * GNU General Public License for more details.
\r
23 * You should have received a copy of the GNU General Public License
\r
24 * along with this program. If not, see <http://www.gnu.org/licenses/>.
\r
26 * For further information please contact.
\r
27 * http://nyatla.jp/nyatoolkit/
\r
28 * <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>
\r
31 package jp.nyatla.nyartoolkit.core;
\r
33 import java.io.FileInputStream;
\r
34 import java.io.InputStream;
\r
35 import java.io.InputStreamReader;
\r
36 import java.io.StreamTokenizer;
\r
38 import jp.nyatla.nyartoolkit.*;
\r
39 import jp.nyatla.nyartoolkit.core.match.*;
\r
40 import jp.nyatla.nyartoolkit.core.raster.*;
\r
41 import jp.nyatla.nyartoolkit.core.types.*;
\r
42 import jp.nyatla.nyartoolkit.core.rasterreader.*;
\r
44 class NyARCodeFileReader
\r
48 * ARコードファイルからデータを読み込んでo_raster[4]に格納します。
\r
51 * @throws NyARException
\r
53 public static void loadFromARToolKitFormFile(InputStream i_stream,NyARRaster[] o_raster) throws NyARException
\r
55 assert o_raster.length==4;
\r
58 StreamTokenizer st = new StreamTokenizer(new InputStreamReader(i_stream));
\r
60 for (int h = 0; h < 4; h++) {
\r
61 assert o_raster[h].getBufferReader().isEqualBufferType(INyARBufferReader.BUFFERFORMAT_INT1D_X8R8G8B8_32);
\r
62 final NyARRaster ra=o_raster[h];
\r
63 readBlock(st,ra.getWidth(),ra.getHeight(),(int[])ra.getBufferReader().getBuffer());
\r
65 } catch (Exception e) {
\r
66 throw new NyARException(e);
\r
71 * ARコードファイルからデータを読み込んでo_codeに格納します。
\r
74 * @throws NyARException
\r
76 public static void loadFromARToolKitFormFile(InputStream i_stream,NyARCode o_code) throws NyARException
\r
78 int width=o_code.getWidth();
\r
79 int height=o_code.getHeight();
\r
80 NyARRaster tmp_raster=new NyARRaster(new NyARIntSize(width,height),new int[width*height],INyARBufferReader.BUFFERFORMAT_INT1D_X8R8G8B8_32);
\r
83 StreamTokenizer st = new StreamTokenizer(new InputStreamReader(i_stream));
\r
84 int[] buf=(int[])tmp_raster.getBufferReader().getBuffer();
\r
86 for (int h = 0; h < 4; h++){
\r
87 readBlock(st,width,height,buf);
\r
89 o_code.getColorData(h).setRaster(tmp_raster);
\r
90 o_code.getBlackWhiteData(h).setRaster(tmp_raster);
\r
92 } catch (Exception e) {
\r
93 throw new NyARException(e);
\r
95 tmp_raster=null;//ポイ
\r
99 * 1ブロック分のXRGBデータをi_stからo_bufへ読みだします。
\r
103 private static void readBlock(StreamTokenizer i_st,int i_width,int i_height,int[] o_buf) throws NyARException
\r
106 final int pixels=i_width*i_height;
\r
107 for (int i3 = 0; i3 < 3; i3++) {
\r
108 for (int i2 = 0; i2 < pixels; i2++){
\r
110 switch (i_st.nextToken()){
\r
111 case StreamTokenizer.TT_NUMBER:
\r
114 throw new NyARException();
\r
116 o_buf[i2]=(o_buf[i2]<<8)|((0x000000ff&(int)i_st.nval));
\r
120 for(int i3=0;i3<pixels;i3++){
\r
121 o_buf[i3]=((o_buf[i3]<<16)&0xff0000)|(o_buf[i3]&0x00ff00)|((o_buf[i3]>>16)&0x0000ff);
\r
123 } catch (Exception e) {
\r
124 throw new NyARException(e);
\r
131 * ARToolKitのマーカーコードを1個保持します。
\r
134 public class NyARCode
\r
136 private NyARMatchPattDeviationColorData[] _color_pat=new NyARMatchPattDeviationColorData[4];
\r
137 private NyARMatchPattDeviationBlackWhiteData[] _bw_pat=new NyARMatchPattDeviationBlackWhiteData[4];
\r
138 private int _width;
\r
139 private int _height;
\r
141 public NyARMatchPattDeviationColorData getColorData(int i_index)
\r
143 return this._color_pat[i_index];
\r
145 public NyARMatchPattDeviationBlackWhiteData getBlackWhiteData(int i_index)
\r
147 return this._bw_pat[i_index];
\r
149 public int getWidth()
\r
154 public int getHeight()
\r
158 public NyARCode(int i_width, int i_height) throws NyARException
\r
160 this._width = i_width;
\r
161 this._height = i_height;
\r
163 for(int i=0;i<4;i++){
\r
164 this._color_pat[i]=new NyARMatchPattDeviationColorData(i_width,i_height);
\r
165 this._bw_pat[i]=new NyARMatchPattDeviationBlackWhiteData(i_width,i_height);
\r
169 public void loadARPattFromFile(String filename) throws NyARException
\r
172 loadARPatt(new FileInputStream(filename));
\r
173 } catch (Exception e) {
\r
174 throw new NyARException(e);
\r
178 public void setRaster(NyARRaster[] i_raster) throws NyARException
\r
180 assert i_raster.length!=4;
\r
182 for(int i=0;i<4;i++){
\r
183 this._color_pat[i].setRaster(i_raster[i]);
\r
188 public void loadARPatt(InputStream i_stream) throws NyARException
\r
191 NyARCodeFileReader.loadFromARToolKitFormFile(i_stream,this);
\r