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 version ARToolkit class library.
\r
11 * Copyright (C)2008 R.Iizuka
\r
13 * This program is free software; you can redistribute it and/or
\r
14 * modify it under the terms of the GNU General Public License
\r
15 * as published by the Free Software Foundation; either version 2
\r
16 * of the License, or (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 framework; if not, write to the Free Software
\r
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
\r
27 * For further information please contact.
\r
28 * http://nyatla.jp/nyatoolkit/
\r
29 * <airmail(at)ebony.plala.or.jp>
\r
32 package jp.nyatla.nyartoolkit.core;
\r
34 import java.io.FileInputStream;
\r
35 import java.io.InputStream;
\r
36 import java.io.InputStreamReader;
\r
37 import java.io.StreamTokenizer;
\r
39 import jp.nyatla.nyartoolkit.*;
\r
40 import jp.nyatla.nyartoolkit.core.match.*;
\r
41 import jp.nyatla.nyartoolkit.core.raster.*;
\r
42 import jp.nyatla.nyartoolkit.core.types.*;
\r
43 import jp.nyatla.nyartoolkit.core.rasterreader.*;
\r
45 class NyARCodeFileReader
\r
49 * ARコードファイルからデータを読み込んでo_raster[4]に格納します。
\r
52 * @throws NyARException
\r
54 public static void loadFromARToolKitFormFile(InputStream i_stream,NyARRaster[] o_raster) throws NyARException
\r
56 assert o_raster.length==4;
\r
59 StreamTokenizer st = new StreamTokenizer(new InputStreamReader(i_stream));
\r
61 for (int h = 0; h < 4; h++) {
\r
62 assert o_raster[h].getBufferReader().isEqualBufferType(INyARBufferReader.BUFFERFORMAT_INT1D_X8R8G8B8_32);
\r
63 final NyARRaster ra=o_raster[h];
\r
64 readBlock(st,ra.getWidth(),ra.getHeight(),(int[])ra.getBufferReader().getBuffer());
\r
66 } catch (Exception e) {
\r
67 throw new NyARException(e);
\r
72 * ARコードファイルからデータを読み込んでo_codeに格納します。
\r
75 * @throws NyARException
\r
77 public static void loadFromARToolKitFormFile(InputStream i_stream,NyARCode o_code) throws NyARException
\r
79 int width=o_code.getWidth();
\r
80 int height=o_code.getHeight();
\r
81 NyARRaster tmp_raster=new NyARRaster(new NyARIntSize(width,height),new int[width*height],INyARBufferReader.BUFFERFORMAT_INT1D_X8R8G8B8_32);
\r
84 StreamTokenizer st = new StreamTokenizer(new InputStreamReader(i_stream));
\r
85 int[] buf=(int[])tmp_raster.getBufferReader().getBuffer();
\r
87 for (int h = 0; h < 4; h++){
\r
88 readBlock(st,width,height,buf);
\r
90 o_code.getColorData(h).setRaster(tmp_raster);
\r
91 o_code.getBlackWhiteData(h).setRaster(tmp_raster);
\r
93 } catch (Exception e) {
\r
94 throw new NyARException(e);
\r
96 tmp_raster=null;//ポイ
\r
100 * 1ブロック分のXRGBデータをi_stからo_bufへ読みだします。
\r
104 private static void readBlock(StreamTokenizer i_st,int i_width,int i_height,int[] o_buf) throws NyARException
\r
107 final int pixels=i_width*i_height;
\r
108 for (int i3 = 0; i3 < 3; i3++) {
\r
109 for (int i2 = 0; i2 < pixels; i2++){
\r
111 switch (i_st.nextToken()){
\r
112 case StreamTokenizer.TT_NUMBER:
\r
115 throw new NyARException();
\r
117 o_buf[i2]=(o_buf[i2]<<8)|((0x000000ff&(int)i_st.nval));
\r
121 for(int i3=0;i3<pixels;i3++){
\r
122 o_buf[i3]=((o_buf[i3]<<16)&0xff0000)|(o_buf[i3]&0x00ff00)|((o_buf[i3]>>16)&0x0000ff);
\r
124 } catch (Exception e) {
\r
125 throw new NyARException(e);
\r
132 * ARToolKitのマーカーコードを1個保持します。
\r
135 public class NyARCode
\r
137 private NyARMatchPattDeviationColorData[] _color_pat=new NyARMatchPattDeviationColorData[4];
\r
138 private NyARMatchPattDeviationBlackWhiteData[] _bw_pat=new NyARMatchPattDeviationBlackWhiteData[4];
\r
139 private int _width;
\r
140 private int _height;
\r
142 public NyARMatchPattDeviationColorData getColorData(int i_index)
\r
144 return this._color_pat[i_index];
\r
146 public NyARMatchPattDeviationBlackWhiteData getBlackWhiteData(int i_index)
\r
148 return this._bw_pat[i_index];
\r
150 public int getWidth()
\r
155 public int getHeight()
\r
159 public NyARCode(int i_width, int i_height) throws NyARException
\r
161 this._width = i_width;
\r
162 this._height = i_height;
\r
164 for(int i=0;i<4;i++){
\r
165 this._color_pat[i]=new NyARMatchPattDeviationColorData(i_width,i_height);
\r
166 this._bw_pat[i]=new NyARMatchPattDeviationBlackWhiteData(i_width,i_height);
\r
170 public void loadARPattFromFile(String filename) throws NyARException
\r
173 loadARPatt(new FileInputStream(filename));
\r
174 } catch (Exception e) {
\r
175 throw new NyARException(e);
\r
179 public void setRaster(NyARRaster[] i_raster) throws NyARException
\r
181 assert i_raster.length!=4;
\r
183 for(int i=0;i<4;i++){
\r
184 this._color_pat[i].setRaster(i_raster[i]);
\r
189 public void loadARPatt(InputStream i_stream) throws NyARException
\r
192 NyARCodeFileReader.loadFromARToolKitFormFile(i_stream,this);
\r