OSDN Git Service

[更新]NyARToolkit for Java
[nyartoolkit-and/nyartoolkit-and.git] / trunk / src / jp / nyatla / nyartoolkit / core / rasterfilter / rgb2gs / NyARRasterFilter_RgbAveAdd.java
  *     <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>\r
  * \r
  */\r
-package jp.nyatla.nyartoolkit.core2.rasterfilter.rgb2gs;\r
+package jp.nyatla.nyartoolkit.core.rasterfilter.rgb2gs;\r
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
 import jp.nyatla.nyartoolkit.core.raster.*;\r
 import jp.nyatla.nyartoolkit.core.raster.rgb.INyARRgbRaster;\r
-import jp.nyatla.nyartoolkit.core.rasterfilter.INyARRasterFilter_RgbToGs;\r
 import jp.nyatla.nyartoolkit.core.rasterreader.INyARBufferReader;\r
 import jp.nyatla.nyartoolkit.core.types.NyARIntSize;\r
 \r
-public class NyARRasterFilter_RgbAve implements INyARRasterFilter_RgbToGs\r
+/**\r
+ * RGBラスタをGrayScaleに変換するフィルタを作成します。\r
+ * このフィルタは、RGB値の平均値を、(R+G+B)/3で算出します。\r
+ *\r
+ */\r
+public class NyARRasterFilter_RgbAveAdd implements INyARRasterFilter_RgbToGs\r
 {\r
-       public void doFilter(INyARRgbRaster i_input, NyARGrayscaleRaster i_output) throws NyARException\r
+       IdoThFilterImpl _do_filter_impl;\r
+       public NyARRasterFilter_RgbAveAdd(int i_raster_type) throws NyARException\r
        {\r
-               INyARBufferReader in_buffer_reader=i_input.getBufferReader();   \r
-               INyARBufferReader out_buffer_reader=i_output.getBufferReader(); \r
-               assert (i_input.getSize().isEqualSize(i_output.getSize()) == true);\r
-\r
-               int[] out_buf = (int[]) out_buffer_reader.getBuffer();\r
-               byte[] in_buf = (byte[]) in_buffer_reader.getBuffer();\r
-\r
-               NyARIntSize size = i_output.getSize();\r
-               switch (in_buffer_reader.getBufferType()) {\r
+               switch (i_raster_type) {\r
                case INyARBufferReader.BUFFERFORMAT_BYTE1D_B8G8R8_24:\r
                case INyARBufferReader.BUFFERFORMAT_BYTE1D_R8G8B8_24:\r
-                       convert24BitRgb(in_buf, out_buf, size);\r
+                       this._do_filter_impl=new doThFilterImpl_BYTE1D_B8G8R8_24();\r
                        break;\r
                case INyARBufferReader.BUFFERFORMAT_BYTE1D_B8G8R8X8_32:\r
-                       convert32BitRgbx(in_buf, out_buf, size);\r
+                       this._do_filter_impl=new doThFilterImpl_BYTE1D_B8G8R8X8_32();\r
                        break;\r
                default:\r
                        throw new NyARException();\r
                }\r
+       }\r
+       public void doFilter(INyARRgbRaster i_input, NyARGrayscaleRaster i_output) throws NyARException\r
+       {\r
+               INyARBufferReader in_buffer_reader=i_input.getBufferReader();   \r
+               INyARBufferReader out_buffer_reader=i_output.getBufferReader(); \r
+               assert (i_input.getSize().isEqualSize(i_output.getSize()) == true);\r
+               this._do_filter_impl.doFilter(in_buffer_reader,out_buffer_reader,i_input.getSize());\r
                return;\r
        }\r
-\r
-       private void convert24BitRgb(byte[] i_in, int[] i_out, NyARIntSize i_size)\r
+       \r
+       /*\r
+        * ここから各種ラスタ向けのフィルタ実装\r
+        *\r
+        */\r
+       interface IdoThFilterImpl\r
+       {\r
+               public void doFilter(INyARBufferReader i_input, INyARBufferReader i_output,NyARIntSize i_size);\r
+       }\r
+       class doThFilterImpl_BYTE1D_B8G8R8_24 implements IdoThFilterImpl\r
        {\r
-               int bp = 0;\r
-               for (int y = 0; y < i_size.h; y++) {\r
-                       for (int x = 0; x < i_size.w; x++) {\r
-                               i_out[y*i_size.w+x] = ((i_in[bp] & 0xff) + (i_in[bp + 1] & 0xff) + (i_in[bp + 2] & 0xff)) / 3;\r
-                               bp += 3;\r
+               public void doFilter(INyARBufferReader i_input, INyARBufferReader i_output,NyARIntSize i_size)\r
+               {\r
+                       int[] out_buf = (int[]) i_output.getBuffer();\r
+                       byte[] in_buf = (byte[]) i_input.getBuffer();\r
+                       \r
+                       int bp = 0;\r
+                       for (int y = 0; y < i_size.h; y++) {\r
+                               for (int x = 0; x < i_size.w; x++) {\r
+                                       out_buf[y*i_size.w+x] = ((in_buf[bp] & 0xff) + (in_buf[bp + 1] & 0xff) + (in_buf[bp + 2] & 0xff)) / 3;\r
+                                       bp += 3;\r
+                               }\r
                        }\r
-               }\r
-               return;\r
+                       return;\r
+               }               \r
        }\r
-       private void convert32BitRgbx(byte[] i_in, int[] i_out, NyARIntSize i_size)\r
+       class doThFilterImpl_BYTE1D_B8G8R8X8_32 implements IdoThFilterImpl\r
        {\r
-               int bp = 0;\r
-               for (int y = 0; y < i_size.h; y++) {\r
-                       for (int x = 0; x < i_size.w; x++) {\r
-                               i_out[y*i_size.w+x] = ((i_in[bp] & 0xff) + (i_in[bp + 1] & 0xff) + (i_in[bp + 2] & 0xff)) / 3;\r
-                               bp += 4;\r
+               public void doFilter(INyARBufferReader i_input, INyARBufferReader i_output,NyARIntSize i_size)\r
+               {\r
+                       int[] out_buf = (int[]) i_output.getBuffer();\r
+                       byte[] in_buf = (byte[]) i_input.getBuffer();\r
+\r
+                       int bp = 0;\r
+                       for (int y = 0; y < i_size.h; y++) {\r
+                               for (int x = 0; x < i_size.w; x++) {\r
+                                       out_buf[y*i_size.w+x] = ((in_buf[bp] & 0xff) + (in_buf[bp + 1] & 0xff) + (in_buf[bp + 2] & 0xff)) / 3;\r
+                                       bp += 4;\r
+                               }\r
                        }\r
                }\r
-               return;\r
-       }       \r
-}
\ No newline at end of file
+       }\r
+       \r
+       \r
+       \r
+}\r
+\r
+\r
+\r
+\r
+\r
+\r