/**
  * ラスタの異解像度間コピーをします。
  * @param i_input
  * 入力ラスタ
  * @param i_top
  * 入力ラスタの左上点を指定します。
  * @param i_left
  * 入力ラスタの左上点を指定します。
  * @param i_skip
  * skip値。1なら等倍、2なら1/2倍、3なら1/3倍の偏重の画像を出力します。
  * @param o_output
  * 出力先ラスタ。このラスタの解像度は、w=(i_input.w-i_left)/i_skip,h=(i_input.h-i_height)/i_skipを満たす必要があります。
  * 出力先ラスタと入力ラスタのバッファタイプは、同じである必要があります。
  */
 public void copyTo(int i_left, int i_top, int i_skip, NyARGrayscaleRaster o_output)
 {
     Debug.Assert(this.getSize().isInnerSize(i_left + o_output.getWidth() * i_skip, i_top + o_output.getHeight() * i_skip));
     Debug.Assert(this.isEqualBufferType(o_output.getBufferType()));
     this._impl.copyTo(this, i_left, i_top, i_skip, o_output);
     return;
 }
 /**
  *
  * @param i_ref_raster
  * 基本画像
  * @param i_ref_raster_distortion
  * 歪み解除オブジェクト(nullの場合歪み解除を省略)
  * @param i_ref_rob_raster
  * エッジ探索用のROB画像
  * @param
  */
 public NyARVectorReader_INT1D_GRAY_8(NyARGrayscaleRaster i_ref_raster,NyARCameraDistortionFactor i_ref_raster_distortion,NyARGrayscaleRaster i_ref_rob_raster)
     : base()
 {
     Debug.Assert (i_ref_raster.getBufferType() == NyARBufferType.INT1D_GRAY_8);
     Debug.Assert (i_ref_rob_raster.getBufferType() == NyARBufferType.INT1D_GRAY_8);
     this.initInstance(i_ref_raster, i_ref_raster_distortion, i_ref_rob_raster,new NyARContourPickup());
 }
        public void doFilter(NyARGrayscaleRaster i_input, NyARBinRaster i_output)
        {
            Debug.Assert(i_input.getBufferType() == NyARBufferType.INT1D_GRAY_8);
            Debug.Assert(i_output.getBufferType() == NyARBufferType.INT1D_BIN_8);
            int[]       out_buf = (int[])i_output.getBuffer();
            int[]       in_buf  = (int[])i_input.getBuffer();
            NyARIntSize s       = i_input.getSize();

            int th           = this._threshold;
            int bp           = s.w * s.h - 1;
            int pix_count    = s.h * s.w;
            int pix_mod_part = pix_count - (pix_count % 8);

            for (bp = pix_count - 1; bp >= pix_mod_part; bp--)
            {
                out_buf[bp] = (in_buf[bp] & 0xff) <= th?0:1;
            }
            //タイリング
            for (; bp >= 0;)
            {
                out_buf[bp] = (in_buf[bp] & 0xff) <= th?0:1;
                bp--;
                out_buf[bp] = (in_buf[bp] & 0xff) <= th?0:1;
                bp--;
                out_buf[bp] = (in_buf[bp] & 0xff) <= th?0:1;
                bp--;
                out_buf[bp] = (in_buf[bp] & 0xff) <= th?0:1;
                bp--;
                out_buf[bp] = (in_buf[bp] & 0xff) <= th?0:1;
                bp--;
                out_buf[bp] = (in_buf[bp] & 0xff) <= th?0:1;
                bp--;
                out_buf[bp] = (in_buf[bp] & 0xff) <= th?0:1;
                bp--;
                out_buf[bp] = (in_buf[bp] & 0xff) <= th?0:1;
                bp--;
            }
            return;
        }
	    public void doFilter(NyARGrayscaleRaster i_input, NyARBinRaster i_output)
	    {
		    Debug.Assert(i_input.getBufferType()==NyARBufferType.INT1D_GRAY_8);
		    Debug.Assert(i_output.getBufferType()==NyARBufferType.INT1D_BIN_8);
		    int[] out_buf = (int[]) i_output.getBuffer();
		    int[] in_buf = (int[]) i_input.getBuffer();
		    NyARIntSize s=i_input.getSize();
    		
		    int th=this._threshold;
		    int bp =s.w*s.h-1;
		    int pix_count   =s.h*s.w;
		    int pix_mod_part=pix_count-(pix_count%8);
		    for(bp=pix_count-1;bp>=pix_mod_part;bp--){
			    out_buf[bp]=(in_buf[bp] & 0xff)<=th?0:1;
		    }
		    //タイリング
		    for (;bp>=0;) {
			    out_buf[bp]=(in_buf[bp] & 0xff)<=th?0:1;
			    bp--;
			    out_buf[bp]=(in_buf[bp] & 0xff)<=th?0:1;
			    bp--;
			    out_buf[bp]=(in_buf[bp] & 0xff)<=th?0:1;
			    bp--;
			    out_buf[bp]=(in_buf[bp] & 0xff)<=th?0:1;
			    bp--;
			    out_buf[bp]=(in_buf[bp] & 0xff)<=th?0:1;
			    bp--;
			    out_buf[bp]=(in_buf[bp] & 0xff)<=th?0:1;
			    bp--;
			    out_buf[bp]=(in_buf[bp] & 0xff)<=th?0:1;
			    bp--;
			    out_buf[bp]=(in_buf[bp] & 0xff)<=th?0:1;
			    bp--;
		    }
		    return;			
	    }