OSDN Git Service

[バックアップ]NyARToolkit
[nyartoolkit-and/nyartoolkit-and.git] / src / jp / nyatla / nyartoolkit / core / NyARCode.java
index 0a947d8..886b716 100644 (file)
  *     <airmail(at)ebony.plala.or.jp>\r
  * \r
  */\r
-\r
 package jp.nyatla.nyartoolkit.core;\r
 \r
 import java.io.FileInputStream;\r
+import java.io.InputStream;\r
 import java.io.InputStreamReader;\r
 import java.io.StreamTokenizer;\r
 \r
@@ -40,127 +40,159 @@ import jp.nyatla.nyartoolkit.NyARException;
 \r
 \r
 \r
-\r
-\r
 /**\r
  * ARToolKitのマーカーコードを1個保持します。\r
- *\r
+ * \r
  */\r
-public class NyARCode{\r
-    private int[][][][]        pat;//static int    pat[AR_PATT_NUM_MAX][4][AR_PATT_SIZE_Y*AR_PATT_SIZE_X*3];\r
-    private double[]           patpow=new double[4];//static double patpow[AR_PATT_NUM_MAX][4];\r
-    private short[][][]        patBW;//static int    patBW[AR_PATT_NUM_MAX][4][AR_PATT_SIZE_Y*AR_PATT_SIZE_X*3];\r
-    private double[]           patpowBW=new double[4];//static double patpowBW[AR_PATT_NUM_MAX][4];    \r
-    private int width,height;\r
-    public int[][][][] getPat()\r
-    {\r
-       return pat;\r
-    }\r
-    public double [] getPatPow()\r
-    {\r
-       return patpow;\r
-    }\r
-    public short[][][] getPatBW()\r
-    {\r
-       return patBW;\r
-    }\r
-    public double[] getPatPowBW()\r
-    {\r
-       return patpowBW;\r
-    }\r
-    public int getWidth()\r
-    {\r
-       return width;\r
-    }\r
-    public int getHeight()\r
-    {\r
-       return height;\r
-    }\r
-    \r
-    public NyARCode(int i_width,int i_height)\r
-    {\r
-       width=i_width;\r
-       height=i_height;\r
-       pat=new int[4][height][width][3];//static int    pat[AR_PATT_NUM_MAX][4][AR_PATT_SIZE_Y*AR_PATT_SIZE_X*3];\r
-       patBW=new short[4][height][width];//static int    patBW[AR_PATT_NUM_MAX][4][AR_PATT_SIZE_Y*AR_PATT_SIZE_X*3];\r
-    }\r
-\r
-\r
-    /**\r
-     * int arLoadPatt( const char *filename );\r
-     * ARToolKitのパターンファイルをロードする。\r
-     * @param filename\r
-     * @return\r
-     * @throws Exception\r
-     */\r
-    public void loadFromARFile(String filename) throws NyARException\r
-    {\r
-       try{\r
-            StreamTokenizer st=new StreamTokenizer(new InputStreamReader(new FileInputStream(filename)));\r
-            //パターンデータはGBRAで並んでる。\r
-            for(int h=0; h<4; h++ ) {\r
-                int l = 0;\r
-                for(int i3 = 0; i3 < 3; i3++ ) {\r
-                    for(int i2 = 0; i2 < height; i2++ ) {\r
-                        for(int i1 = 0; i1 < width; i1++ ){\r
-                            //数値のみ読み出す\r
-                            switch(st.nextToken()){//if( fscanf(fp, "%d", &j) != 1 ) {\r
-                            case StreamTokenizer.TT_NUMBER:\r
-                               break;\r
-                            default:\r
-                               throw new NyARException();\r
-                            }\r
-                            short j=(short)(255-st.nval);//j = 255-j;\r
-                            //標準ファイルのパターンはBGRでならんでるからRGBに並べなおす\r
-                            switch(i3){\r
-                            case 0:pat[h][i2][i1][2] = j;break;//pat[patno][h][(i2*Config.AR_PATT_SIZE_X+i1)*3+2] = j;break;\r
-                            case 1:pat[h][i2][i1][1] = j;break;//pat[patno][h][(i2*Config.AR_PATT_SIZE_X+i1)*3+1] = j;break;\r
-                            case 2:pat[h][i2][i1][0] = j;break;//pat[patno][h][(i2*Config.AR_PATT_SIZE_X+i1)*3+0] = j;break;\r
-                            }\r
-                            //pat[patno][h][(i2*Config.AR_PATT_SIZE_X+i1)*3+i3] = j;\r
-                            if( i3 == 0 ){\r
-                                patBW[h][i2][i1]  = j;//patBW[patno][h][i2*Config.AR_PATT_SIZE_X+i1]  = j;\r
-                            }else{\r
-                                patBW[h][i2][i1] += j;//patBW[patno][h][i2*Config.AR_PATT_SIZE_X+i1] += j;\r
-                            }\r
-                            if( i3 == 2 ){\r
-                               patBW[h][i2][i1] /= 3;//patBW[patno][h][i2*Config.AR_PATT_SIZE_X+i1] /= 3;\r
-                            }\r
-                            l += j;\r
-                        }\r
-                    }\r
-                }\r
-  \r
-                l /= (height*width*3);\r
-       \r
-                int m = 0;\r
-                for(int i = 0; i < height; i++ ) {//for( i = 0; i < AR_PATT_SIZE_Y*AR_PATT_SIZE_X*3; i++ ) {\r
-                    for(int i2 = 0; i2 < width; i2++ ) {\r
-                       for(int i3 = 0; i3 < 3; i3++ ) {\r
-                           pat[h][i][i2][i3] -= l;\r
-                           m += (pat[h][i][i2][i3]*pat[h][i][i2][i3]);\r
-                       }\r
-                    }\r
-                }\r
-                patpow[h] = Math.sqrt((double)m);\r
-                if( patpow[h] == 0.0 ){\r
-                    patpow[h] = 0.0000001;\r
-                }\r
-    \r
-                m = 0;\r
-                for(int i = 0; i < height; i++ ) {\r
-                    for(int i2 = 0; i2 < width; i2++ ) {\r
-                       patBW[h][i][i2] -= l;\r
-                       m += (patBW[h][i][i2]*patBW[h][i][i2]);\r
-                    }\r
-                }\r
-                patpowBW[h] = Math.sqrt((double)m);\r
-                if(patpowBW[h] == 0.0 ){\r
-                    patpowBW[h] = 0.0000001;\r
-                }\r
-            }\r
-       }catch(Exception e){\r
-           throw new NyARException(e);\r
+public class NyARCode\r
+{\r
+       private int[][][][] pat;// static int\r
+                                                       // pat[AR_PATT_NUM_MAX][4][AR_PATT_SIZE_Y*AR_PATT_SIZE_X*3];\r
+\r
+       private double[] patpow = new double[4];// static double patpow[AR_PATT_NUM_MAX][4];\r
+\r
+       private short[][][] patBW;// static int patBW[AR_PATT_NUM_MAX][4][AR_PATT_SIZE_Y*AR_PATT_SIZE_X*3];\r
+\r
+       private double[] patpowBW = new double[4];// static double patpowBW[AR_PATT_NUM_MAX][4];\r
+\r
+       private int width, height;\r
+\r
+       public int[][][][] getPat()\r
+       {\r
+               return pat;\r
+       }\r
+\r
+       public double[] getPatPow()\r
+       {\r
+               return patpow;\r
+       }\r
+\r
+       public short[][][] getPatBW()\r
+       {\r
+               return patBW;\r
+       }\r
+\r
+       public double[] getPatPowBW()\r
+       {\r
+               return patpowBW;\r
+       }\r
+\r
+       public int getWidth()\r
+       {\r
+               return width;\r
+       }\r
+\r
+       public int getHeight()\r
+       {\r
+               return height;\r
+       }\r
+\r
+       public NyARCode(int i_width, int i_height)\r
+       {\r
+               width = i_width;\r
+               height = i_height;\r
+               pat = new int[4][height][width][3];// static int pat[AR_PATT_NUM_MAX][4][AR_PATT_SIZE_Y*AR_PATT_SIZE_X*3];\r
+               patBW = new short[4][height][width];// static int patBW[AR_PATT_NUM_MAX][4][AR_PATT_SIZE_Y*AR_PATT_SIZE_X*3];\r
+       }\r
+\r
+       /**\r
+        * int arLoadPatt( const char *filename ); ARToolKitのパターンファイルをロードする。\r
+        * ファイル形式はBGR形式で記録されたパターンファイルであること。\r
+        * \r
+        * @param filename\r
+        * @return\r
+        * @throws Exception\r
+        */\r
+       public void loadARPattFromFile(String filename) throws NyARException\r
+       {\r
+               try {\r
+                       loadARPatt(new FileInputStream(filename));\r
+\r
+               } catch (Exception e) {\r
+                       throw new NyARException(e);\r
+               }\r
+       }\r
+\r
+       /**\r
+        * \r
+        * @param i_stream\r
+        * @throws NyARException\r
+        */\r
+       public void loadARPatt(InputStream i_stream) throws NyARException\r
+       {\r
+               try {\r
+                       StreamTokenizer st = new StreamTokenizer(new InputStreamReader(\r
+                                       i_stream));\r
+                       // パターンデータはGBRAで並んでる。\r
+                       for (int h = 0; h < 4; h++) {\r
+                               int l = 0;\r
+                               for (int i3 = 0; i3 < 3; i3++) {\r
+                                       for (int i2 = 0; i2 < height; i2++) {\r
+                                               for (int i1 = 0; i1 < width; i1++) {\r
+                                                       // 数値のみ読み出す\r
+                                                       switch (st.nextToken()) {// if( fscanf(fp, "%d",&j) != 1 ) {\r
+                                                       case StreamTokenizer.TT_NUMBER:\r
+                                                               break;\r
+                                                       default:\r
+                                                               throw new NyARException();\r
+                                                       }\r
+                                                       short j = (short) (255 - st.nval);// j = 255-j;\r
+                                                       // 標準ファイルのパターンはBGRでならんでるからRGBに並べなおす\r
+                                                       switch (i3) {\r
+                                                       case 0:\r
+                                                               pat[h][i2][i1][2] = j;\r
+                                                               break;// pat[patno][h][(i2*Config.AR_PATT_SIZE_X+i1)*3+2]= j;break;\r
+                                                       case 1:\r
+                                                               pat[h][i2][i1][1] = j;\r
+                                                               break;// pat[patno][h][(i2*Config.AR_PATT_SIZE_X+i1)*3+1]= j;break;\r
+                                                       case 2:\r
+                                                               pat[h][i2][i1][0] = j;\r
+                                                               break;// pat[patno][h][(i2*Config.AR_PATT_SIZE_X+i1)*3+0]= j;break;\r
+                                                       }\r
+                                                       // pat[patno][h][(i2*Config.AR_PATT_SIZE_X+i1)*3+i3]= j;\r
+                                                       if (i3 == 0) {\r
+                                                               patBW[h][i2][i1] = j;// patBW[patno][h][i2*Config.AR_PATT_SIZE_X+i1] = j;\r
+                                                       } else {\r
+                                                               patBW[h][i2][i1] += j;// patBW[patno][h][i2*Config.AR_PATT_SIZE_X+i1] += j;\r
+                                                       }\r
+                                                       if (i3 == 2) {\r
+                                                               patBW[h][i2][i1] /= 3;// patBW[patno][h][i2*Config.AR_PATT_SIZE_X+i1]/= 3;\r
+                                                       }\r
+                                                       l += j;\r
+                                               }\r
+                                       }\r
+                               }\r
+\r
+                               l /= (height * width * 3);\r
+\r
+                               int m = 0;\r
+                               for (int i = 0; i < height; i++) {// for( i = 0; i < AR_PATT_SIZE_Y*AR_PATT_SIZE_X*3;i++ ) {\r
+                                       for (int i2 = 0; i2 < width; i2++) {\r
+                                               for (int i3 = 0; i3 < 3; i3++) {\r
+                                                       pat[h][i][i2][i3] -= l;\r
+                                                       m += (pat[h][i][i2][i3] * pat[h][i][i2][i3]);\r
+                                               }\r
+                                       }\r
+                               }\r
+                               patpow[h] = Math.sqrt((double) m);\r
+                               if (patpow[h] == 0.0) {\r
+                                       patpow[h] = 0.0000001;\r
+                               }\r
+\r
+                               m = 0;\r
+                               for (int i = 0; i < height; i++) {\r
+                                       for (int i2 = 0; i2 < width; i2++) {\r
+                                               patBW[h][i][i2] -= l;\r
+                                               m += (patBW[h][i][i2] * patBW[h][i][i2]);\r
+                                       }\r
+                               }\r
+                               patpowBW[h] = Math.sqrt((double) m);\r
+                               if (patpowBW[h] == 0.0) {\r
+                                       patpowBW[h] = 0.0000001;\r
+                               }\r
+                       }\r
+               } catch (Exception e) {\r
+                       throw new NyARException(e);\r
+               }\r
        }\r
-    }\r
 }\r