1 package jp.nyatla.nyartoolkit.core.rasterfilter;
\r
3 import jp.nyatla.nyartoolkit.NyARException;
\r
4 import jp.nyatla.nyartoolkit.core.raster.*;
\r
5 import jp.nyatla.nyartoolkit.core.types.NyARBufferType;
\r
6 import jp.nyatla.nyartoolkit.core.types.NyARIntSize;
\r
12 public class NyARRasterFilter_Rgb2Hsv implements INyARRasterFilter
\r
14 private IdoFilterImpl _dofilterimpl;
\r
15 public NyARRasterFilter_Rgb2Hsv(int i_raster_type) throws NyARException
\r
17 switch (i_raster_type) {
\r
18 case NyARBufferType.BYTE1D_B8G8R8_24:
\r
19 this._dofilterimpl=new IdoFilterImpl_BYTE1D_B8G8R8_24();
\r
21 case NyARBufferType.BYTE1D_R8G8B8_24:
\r
23 throw new NyARException();
\r
26 public void doFilter(INyARRaster i_input, INyARRaster i_output) throws NyARException
\r
28 assert (i_input.getSize().isEqualSize(i_output.getSize()) == true);
\r
29 this._dofilterimpl.doFilter(i_input,i_output,i_input.getSize());
\r
32 abstract class IdoFilterImpl
\r
34 public abstract void doFilter(INyARRaster i_input, INyARRaster i_output,NyARIntSize i_size) throws NyARException;
\r
37 class IdoFilterImpl_BYTE1D_B8G8R8_24 extends IdoFilterImpl
\r
39 public void doFilter(INyARRaster i_input, INyARRaster i_output,NyARIntSize i_size) throws NyARException
\r
41 assert( i_input.isEqualBufferType(NyARBufferType.INT1D_X7H9S8V8_32));
\r
43 int[] out_buf = (int[]) i_output.getBuffer();
\r
44 byte[] in_buf = (byte[]) i_input.getBuffer();
\r
46 for(int i=i_size.h*i_size.w-1;i>=0;i--)
\r
48 int r=(in_buf[i*3+2] & 0xff);
\r
49 int g=(in_buf[i*3+1] & 0xff);
\r
50 int b=(in_buf[i*3+0] & 0xff);
\r
71 s=(cmax-cmin)*255/cmax;
\r
78 h=(b-r)*60/cdes+2*60;
\r
80 h=(r-g)*60/cdes+4*60;
\r
91 out_buf[i]=(0x1ff0000&(h<<16))|(0x00ff00&(s<<8))|(cmax&0xff);
\r