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.NyARBufferType;
\r
43 class NyARCodeFileReader
\r
47 * ARコードファイルからデータを読み込んでo_raster[4]に格納します。
\r
50 * @throws NyARException
\r
52 public static void loadFromARToolKitFormFile(InputStream i_stream,NyARRaster[] o_raster) throws NyARException
\r
54 assert o_raster.length==4;
\r
57 StreamTokenizer st = new StreamTokenizer(new InputStreamReader(i_stream));
\r
59 for (int h = 0; h < 4; h++) {
\r
60 assert o_raster[h].isEqualBufferType(NyARBufferType.INT1D_X8R8G8B8_32);
\r
61 final NyARRaster ra=o_raster[h];
\r
62 readBlock(st,ra.getWidth(),ra.getHeight(),(int[])ra.getBuffer());
\r
64 } catch (Exception e) {
\r
65 throw new NyARException(e);
\r
70 * ARコードファイルからデータを読み込んでo_codeに格納します。
\r
73 * @throws NyARException
\r
75 public static void loadFromARToolKitFormFile(InputStream i_stream,NyARCode o_code) throws NyARException
\r
77 int width=o_code.getWidth();
\r
78 int height=o_code.getHeight();
\r
79 NyARRaster tmp_raster=new NyARRaster(width,height, NyARBufferType.INT1D_X8R8G8B8_32);
\r
82 StreamTokenizer st = new StreamTokenizer(new InputStreamReader(i_stream));
\r
83 int[] buf=(int[])tmp_raster.getBuffer();
\r
85 for (int h = 0; h < 4; h++){
\r
86 readBlock(st,width,height,buf);
\r
88 o_code.getColorData(h).setRaster(tmp_raster);
\r
89 o_code.getBlackWhiteData(h).setRaster(tmp_raster);
\r
91 } catch (Exception e) {
\r
92 throw new NyARException(e);
\r
94 tmp_raster=null;//ポイ
\r
98 * 1ブロック分のXRGBデータをi_stからo_bufへ読みだします。
\r
102 private static void readBlock(StreamTokenizer i_st,int i_width,int i_height,int[] o_buf) throws NyARException
\r
105 final int pixels=i_width*i_height;
\r
106 for (int i3 = 0; i3 < 3; i3++) {
\r
107 for (int i2 = 0; i2 < pixels; i2++){
\r
109 switch (i_st.nextToken()){
\r
110 case StreamTokenizer.TT_NUMBER:
\r
113 throw new NyARException();
\r
115 o_buf[i2]=(o_buf[i2]<<8)|((0x000000ff&(int)i_st.nval));
\r
119 for(int i3=0;i3<pixels;i3++){
\r
120 o_buf[i3]=((o_buf[i3]<<16)&0xff0000)|(o_buf[i3]&0x00ff00)|((o_buf[i3]>>16)&0x0000ff);
\r
122 } catch (Exception e) {
\r
123 throw new NyARException(e);
\r
130 * ARToolKitのマーカーコードを1個保持します。
\r
133 public class NyARCode
\r
135 private NyARMatchPattDeviationColorData[] _color_pat=new NyARMatchPattDeviationColorData[4];
\r
136 private NyARMatchPattDeviationBlackWhiteData[] _bw_pat=new NyARMatchPattDeviationBlackWhiteData[4];
\r
137 private int _width;
\r
138 private int _height;
\r
140 public NyARMatchPattDeviationColorData getColorData(int i_index)
\r
142 return this._color_pat[i_index];
\r
144 public NyARMatchPattDeviationBlackWhiteData getBlackWhiteData(int i_index)
\r
146 return this._bw_pat[i_index];
\r
148 public int getWidth()
\r
153 public int getHeight()
\r
157 public NyARCode(int i_width, int i_height) throws NyARException
\r
159 this._width = i_width;
\r
160 this._height = i_height;
\r
162 for(int i=0;i<4;i++){
\r
163 this._color_pat[i]=new NyARMatchPattDeviationColorData(i_width,i_height);
\r
164 this._bw_pat[i]=new NyARMatchPattDeviationBlackWhiteData(i_width,i_height);
\r
168 public void loadARPattFromFile(String filename) throws NyARException
\r
171 loadARPatt(new FileInputStream(filename));
\r
172 } catch (Exception e) {
\r
173 throw new NyARException(e);
\r
177 public void setRaster(NyARRaster[] i_raster) throws NyARException
\r
179 assert i_raster.length!=4;
\r
181 for(int i=0;i<4;i++){
\r
182 this._color_pat[i].setRaster(i_raster[i]);
\r
187 public void loadARPatt(InputStream i_stream) throws NyARException
\r
190 NyARCodeFileReader.loadFromARToolKitFormFile(i_stream,this);
\r