* <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