public void doFilter(INyARRgbRaster i_input, NyARBinRaster i_output)
        {
            //INyARBufferReader in_buffer_reader = i_input.getBufferReader();
            //INyARBufferReader out_buffer_reader = i_output.getBufferReader();
            int in_buf_type = i_input.getBufferType();

            NyARIntSize size = i_output.getSize();
            Debug.Assert(i_output.isEqualBufferType(NyARBufferType.INT2D_BIN_8));
            Debug.Assert(checkInputType(in_buf_type) == true);
            Debug.Assert(i_input.getSize().isEqualSize(size.w * 2, size.h * 2) == true);

            int[][] out_buf = (int[][])i_output.getBuffer();


            switch (i_input.getBufferType())
            {
                case NyARBufferType.BYTE1D_B8G8R8_24:
                case NyARBufferType.BYTE1D_R8G8B8_24:
                    convert24BitRgb((byte[])i_input.getBuffer(), out_buf, size);
                    break;
                case NyARBufferType.BYTE1D_B8G8R8X8_32:
                    convert32BitRgbx((byte[])i_input.getBuffer(), out_buf, size);
                    break;
                case NyARBufferType.WORD1D_R5G6B5_16LE:
                    convert16BitRgb565word((short[])i_input.getBuffer(), out_buf, size);
                    break;
                default:
                    throw new NyARException();
            }
            return;
        }
Exemplo n.º 2
0
        public void doFilter(INyARRgbRaster i_input, NyARBinRaster i_output)
        {
            //INyARBufferReader in_buffer_reader = i_input.getBufferReader();
            //INyARBufferReader out_buffer_reader = i_output.getBufferReader();
            int in_buf_type = i_input.getBufferType();

            NyARIntSize size = i_output.getSize();

            Debug.Assert(i_output.isEqualBufferType(NyARBufferType.INT2D_BIN_8));
            Debug.Assert(checkInputType(in_buf_type) == true);
            Debug.Assert(i_input.getSize().isEqualSize(size.w * 2, size.h * 2) == true);

            int[][] out_buf = (int[][])i_output.getBuffer();


            switch (i_input.getBufferType())
            {
            case NyARBufferType.BYTE1D_B8G8R8_24:
            case NyARBufferType.BYTE1D_R8G8B8_24:
                convert24BitRgb((byte[])i_input.getBuffer(), out_buf, size);
                break;

            case NyARBufferType.BYTE1D_B8G8R8X8_32:
                convert32BitRgbx((byte[])i_input.getBuffer(), out_buf, size);
                break;

            case NyARBufferType.WORD1D_R5G6B5_16LE:
                convert16BitRgb565word((short[])i_input.getBuffer(), out_buf, size);
                break;

            default:
                throw new NyARException();
            }
            return;
        }
 /**
  * この関数は、i_rasterを操作するピクセルドライバインスタンスを生成します。
  * @param i_raster
  * @return
  * @
  */
 public static INyARRgbPixelDriver createDriver(INyARRgbRaster i_raster)
 {
     INyARRgbPixelDriver ret;
     switch (i_raster.getBufferType())
     {
         case NyARBufferType.BYTE1D_B8G8R8_24:
             ret = new NyARRgbPixelDriver_BYTE1D_B8G8R8_24();
             break;
         case NyARBufferType.BYTE1D_B8G8R8X8_32:
             ret = new NyARRgbPixelDriver_BYTE1D_B8G8R8X8_32();
             break;
         case NyARBufferType.BYTE1D_R8G8B8_24:
             ret = new NyARRgbPixelDriver_BYTE1D_R8G8B8_24();
             break;
         case NyARBufferType.BYTE1D_X8R8G8B8_32:
             ret = new NyARRgbPixelDriver_BYTE1D_X8R8G8B8_32();
             break;
         case NyARBufferType.INT1D_GRAY_8:
             ret = new NyARRgbPixelDriver_INT1D_GRAY_8();
             break;
         case NyARBufferType.INT1D_X8R8G8B8_32:
             ret = new NyARRgbPixelDriver_INT1D_X8R8G8B8_32();
             break;
         case NyARBufferType.BYTE1D_R5G6B5_16BE:
             ret = new NyARRgbPixelDriver_WORD1D_R5G6B5_16LE();
             break;
         default:
             throw new NyARException();
     }
     ret.switchRaster(i_raster);
     return ret;
 }
 /**
  * この関数は、(R*G*B>>16) でグレースケール化するフィルタを生成します。
  * 最適化されていません。
  * @param i_raster
  * @return
  * @
  */
 public static INyARRgb2GsFilterRgbAve createRgbCubeDriver(INyARRgbRaster i_raster)
 {
     switch (i_raster.getBufferType())
     {
     default:
         return(new NyARRgb2GsFilterRgbCube_Any(i_raster));
     }
 }
 /**
  * この関数は(Yrcb)でグレースケール化するフィルタを生成します。
  * 最適化されていません。
  * @param i_raster
  * @return
  * @
  */
 public static INyARRgb2GsFilterYCbCr createYCbCrDriver(INyARRgbRaster i_raster)
 {
     switch (i_raster.getBufferType())
     {
     default:
         return(new NyARRgb2GsFilterYCbCr_Any(i_raster));
     }
 }
 /**
  * この関数は、(R*G*B>>16) でグレースケール化するフィルタを生成します。
  * 最適化されていません。
  * @param i_raster
  * @return
  * @
  */
 public static INyARRgb2GsFilterRgbAve createRgbCubeDriver(INyARRgbRaster i_raster)
 {
     switch (i_raster.getBufferType())
     {
         default:
             return new NyARRgb2GsFilterRgbCube_Any(i_raster);
     }
 }
 /**
  * この関数は(Yrcb)でグレースケール化するフィルタを生成します。
  * 最適化されていません。
  * @param i_raster
  * @return
  * @
  */
 public static INyARRgb2GsFilterYCbCr createYCbCrDriver(INyARRgbRaster i_raster)
 {
     switch (i_raster.getBufferType())
     {
         default:
             return new NyARRgb2GsFilterYCbCr_Any(i_raster);
     }
 }
Exemplo n.º 8
0
        /* DsXRGB32Rasterの内容を保持しているサーフェイスにコピーします。
         */
        public void setRaster(INyARRgbRaster i_sample)
        {
            Debug.Assert(!this._is_dispose);
            int pitch;
            int s_stride = this.m_width * 4;

            using (GraphicsStream gs = this._surface.LockRectangle(LockFlags.None, out pitch))
            {
                try{
                    switch (i_sample.getBufferType())
                    {
                    case NyARBufferType.BYTE1D_B8G8R8X8_32:
                        if (pitch % s_stride == 0)
                        {
                            Marshal.Copy((byte[])i_sample.getBuffer(), 0, (IntPtr)((int)gs.InternalData), this.m_width * 4 * this.m_height);
                        }
                        else
                        {
                            int s_idx = 0;
                            int d_idx = (int)gs.InternalData;
                            for (int i = this.m_height - 1; i >= 0; i--)
                            {
                                //どう考えてもポインタです。
                                Marshal.Copy((byte[])i_sample.getBuffer(), s_idx, (IntPtr)(d_idx), s_stride);
                                s_idx += s_stride;
                                d_idx += pitch;
                            }
                        }
                        break;

                    case NyARBufferType.OBJECT_CS_Bitmap:
                        NyARBitmapRaster ra = (NyARBitmapRaster)(i_sample);
                        BitmapData       bm = ra.lockBitmap();
                        try{
                            //コピー
                            int src = (int)bm.Scan0;
                            int dst = (int)gs.InternalData;
                            for (int r = this.m_height - 1; r >= 0; r--)
                            {
                                NyARD3dUtil.RtlCopyMemory((IntPtr)dst, (IntPtr)src, s_stride);
                                dst += pitch;
                                src += bm.Stride;
                            }
                        }finally{
                            ra.unlockBitmap();
                        }
                        break;

                    default:
                        throw new NyARException();
                    }
                }finally{
                    this._surface.UnlockRectangle();
                }
                return;
            }
        }
Exemplo n.º 9
0
        /* DsXRGB32Rasterの内容を保持しているテクスチャにコピーします。
         * i_rasterのサイズは、このインスタンスに指定したテクスチャサイズ(コンストラクタ等に指定したサイズ)と同じである必要です。
         * ラスタデータはテクスチャの左上を基点にwidth x heightだけコピーされ、残りの部分は更新されません。
         */
        public void setRaster(INyARRgbRaster i_raster)
        {
            Debug.Assert(!this._is_dispose);
            int pitch;

            using (GraphicsStream texture_rect = this.m_texture.LockRectangle(0, LockFlags.None, out pitch))
            {
                try{
                    int dst = (int)texture_rect.InternalData;
                    switch (i_raster.getBufferType())
                    {
                    case NyARBufferType.BYTE1D_B8G8R8X8_32:
                    {
                        byte[] buf = (byte[])i_raster.getBuffer();
                        //テクスチャのピッチって何?
                        int src_w = this.m_width * 4;
                        int src   = 0;
                        for (int r = this.m_height - 1; r >= 0; r--)
                        {
                            Marshal.Copy(buf, src, (IntPtr)dst, pitch);
                            dst += pitch;
                            src += src_w;
                        }
                    }
                    break;

                    case NyARBufferType.OBJECT_CS_Bitmap:
                        NyARBitmapRaster ra = (NyARBitmapRaster)(i_raster);
                        BitmapData       bm = ra.lockBitmap();
                        try
                        {
                            int src = (int)bm.Scan0;
                            for (int r = this.m_height - 1; r >= 0; r--)
                            {
                                NyARD3dUtil.RtlCopyMemory((IntPtr)dst, (IntPtr)src, pitch);
                                dst += pitch;
                                src += bm.Stride;
                            }
                        }
                        finally
                        {
                            ra.unlockBitmap();
                        }
                        break;

                    default:
                        throw new NyARException();
                    }
                }
                finally
                {
                    //テクスチャをアンロックする
                    this.m_texture.UnlockRectangle(0);
                }
            }
            return;
        }
 public static IRasterDriver createDriver(INyARRgbRaster i_raster)
 {
     switch (i_raster.getBufferType())
     {
         case NyARBufferType.INT1D_X8R8G8B8_32:
             return new NyARMatchPattDeviationDataDriver_INT1D_X8R8G8B8_32(i_raster);
         default:
             break;
     }
     return new NyARMatchPattDeviationDataDriver_RGBAny(i_raster);
 }
Exemplo n.º 11
0
            public static IRasterDriver createDriver(INyARRgbRaster i_raster)
            {
                switch (i_raster.getBufferType())
                {
                case NyARBufferType.INT1D_X8R8G8B8_32:
                    return(new NyARMatchPattDeviationDataDriver_INT1D_X8R8G8B8_32(i_raster));

                default:
                    break;
                }
                return(new NyARMatchPattDeviationDataDriver_RGBAny(i_raster));
            }
 /**
  * この関数は、(R*G*B)/3 でグレースケール化するフィルタを生成します。
  * 最適化されている形式は以下の通りです。
  * <ul>
  * <li>{@link NyARBufferType#BYTE1D_B8G8R8X8_32}</li>
  * </ul>
  * @param i_raster
  * @return
  * @
  */
 public static INyARRgb2GsFilterRgbAve createRgbAveDriver(INyARRgbRaster i_raster)
 {
     switch (i_raster.getBufferType())
     {
         case NyARBufferType.BYTE1D_B8G8R8X8_32:
             return new NyARRgb2GsFilterRgbAve_BYTE1D_B8G8R8X8_32(i_raster);
         case NyARBufferType.BYTE1D_B8G8R8_24:
             return new NyARRgb2GsFilterRgbAve_BYTE1D_C8C8C8_24(i_raster);
         case NyARBufferType.BYTE1D_X8R8G8B8_32:
             return new NyARRgb2GsFilterRgbAve_INT1D_X8R8G8B8_32(i_raster);
         default:
             return new NyARRgb2GsFilterRgbAve_Any(i_raster);
     }
 }
        /**
         * NyARRasterからパターンデータをセットします。
         * この関数は、データを元に所有するデータ領域を更新します。
         * @param i_buffer
         * @throws NyARException
         */
        public void setRaster(INyARRgbRaster i_raster)
        {
            Debug.Assert(i_raster.getSize().isEqualSize(this._size));
            switch (i_raster.getBufferType())
            {
            case NyARBufferType.INT1D_X8R8G8B8_32:
                this._pow = setRaster_INT1D_X8R8G8B8_32((int[])i_raster.getBuffer(), this._size.w * this._size.h, this._optimize_for_mod, this._data);
                break;

            default:
                this._pow = setRaster_ANY(i_raster.getRgbPixelReader(), this._size, this._size.w * this._size.h, this._data);
                break;
            }
            return;
        }
        public void multiPixel(int pk_l, int pk_t, double[] cpara, int i_resolution, INyARRgbRaster i_in_raster, INyARRgbRaster o_out)
        {
            //出力形式による分岐
            switch (o_out.getBufferType())
            {
            case NyARBufferType.INT1D_X8R8G8B8_32:
                multiPixel_INT1D_X8R8G8B8_32(pk_l, pk_t, i_in_raster.getWidth(), i_in_raster.getHeight(), i_resolution, cpara, i_in_raster.getRgbPixelReader(), o_out);
                break;

            default:
                multiPixel_ANY(pk_l, pk_t, i_in_raster.getWidth(), i_in_raster.getHeight(), i_resolution, cpara, i_in_raster.getRgbPixelReader(), o_out);
                break;
            }
            return;
        }
 /**
  * 指定したIN/OUTに最適な{@link INyARPerspectiveReaader}を生成します。
  * <p>入力ラスタについて
  * 基本的には全ての{@link INyARRgbRaster}を実装したクラスを処理できますが、次の3種類のバッファを持つものを推奨します。
  * <ul>
  * <li>{@link NyARBufferType#BYTE1D_B8G8R8X8_32}
  * <li>{@link NyARBufferType#BYTE1D_B8G8R8_24}
  * <li>{@link NyARBufferType#BYTE1D_R8G8B8_24}
  * </ul>
  * </p>
  * <p>出力ラスタについて
  * 基本的には全ての{@link NyARBufferType#INT1D_X8R8G8B8_32}形式のバッファを持つラスタを使用してください。
  * 他の形式でも動作しますが、低速な場合があります。
  * </p>
  * <p>高速化について -
  * 入力ラスタ形式が、{@link NyARBufferType#BYTE1D_B8G8R8X8_32},{@link NyARBufferType#BYTE1D_B8G8R8_24}
  * ,{@link NyARBufferType#BYTE1D_R8G8B8_24}のものについては、他の形式よりも高速に動作します。
  * また、出力ラスタ形式が、{@link NyARBufferType#INT1D_X8R8G8B8_32}の物については、単体サンプリングモードの時のみ、さらに高速に動作します。
  * 他の形式のラスタでは、以上のものよりも低速転送で対応します。
  * @param i_in_raster_type
  * 入力ラスタの形式です。
  * @param i_out_raster_type
  * 出力ラスタの形式です。
  * @return
  */
 public static INyARPerspectiveCopy createDriver(INyARRgbRaster i_raster)
 {
     //新しいモードに対応したら書いてね。
     switch (i_raster.getBufferType())
     {
         case NyARBufferType.BYTE1D_B8G8R8X8_32:
             return new PerspectiveCopy_BYTE1D_B8G8R8X8_32(i_raster);
         case NyARBufferType.BYTE1D_B8G8R8_24:
             return new PerspectiveCopy_BYTE1D_B8G8R8_24(i_raster);
         case NyARBufferType.BYTE1D_R8G8B8_24:
             return new PerspectiveCopy_BYTE1D_R8G8B8_24(i_raster);
         default:
             return new PerspectiveCopy_ANYRgb(i_raster);
     }
 }
        public void onePixel(int pk_l, int pk_t, double[] cpara, INyARRgbRaster i_in_raster, INyARRgbRaster o_out)
        {
            Debug.Assert(i_in_raster.isEqualBufferType(NyARBufferType.BYTE1D_B8G8R8X8_32));
            //出力形式による分岐
            switch (o_out.getBufferType())
            {
            case NyARBufferType.INT1D_X8R8G8B8_32:
                onePixel_INT1D_X8R8G8B8_32(pk_l, pk_t, i_in_raster.getWidth(), i_in_raster.getHeight(), cpara, (byte[])i_in_raster.getBuffer(), o_out);
                break;

            default:
                onePixel_ANY(pk_l, pk_t, i_in_raster.getWidth(), i_in_raster.getHeight(), cpara, (byte[])i_in_raster.getBuffer(), o_out);
                break;
            }
            return;
        }
        /**
         * この関数は、(R*G*B)/3 でグレースケール化するフィルタを生成します。
         * 最適化されている形式は以下の通りです。
         * <ul>
         * <li>{@link NyARBufferType#BYTE1D_B8G8R8X8_32}</li>
         * </ul>
         * @param i_raster
         * @return
         * @
         */
        public static INyARRgb2GsFilterRgbAve createRgbAveDriver(INyARRgbRaster i_raster)
        {
            switch (i_raster.getBufferType())
            {
            case NyARBufferType.BYTE1D_B8G8R8X8_32:
                return(new NyARRgb2GsFilterRgbAve_BYTE1D_B8G8R8X8_32(i_raster));

            case NyARBufferType.BYTE1D_B8G8R8_24:
                return(new NyARRgb2GsFilterRgbAve_BYTE1D_C8C8C8_24(i_raster));

            case NyARBufferType.BYTE1D_X8R8G8B8_32:
                return(new NyARRgb2GsFilterRgbAve_INT1D_X8R8G8B8_32(i_raster));

            default:
                return(new NyARRgb2GsFilterRgbAve_Any(i_raster));
            }
        }
        /**
         * 指定したIN/OUTに最適な{@link INyARPerspectiveReaader}を生成します。
         * <p>入力ラスタについて
         * 基本的には全ての{@link INyARRgbRaster}を実装したクラスを処理できますが、次の3種類のバッファを持つものを推奨します。
         * <ul>
         * <li>{@link NyARBufferType#BYTE1D_B8G8R8X8_32}
         * <li>{@link NyARBufferType#BYTE1D_B8G8R8_24}
         * <li>{@link NyARBufferType#BYTE1D_R8G8B8_24}
         * </ul>
         * </p>
         * <p>出力ラスタについて
         * 基本的には全ての{@link NyARBufferType#INT1D_X8R8G8B8_32}形式のバッファを持つラスタを使用してください。
         * 他の形式でも動作しますが、低速な場合があります。
         * </p>
         * <p>高速化について -
         * 入力ラスタ形式が、{@link NyARBufferType#BYTE1D_B8G8R8X8_32},{@link NyARBufferType#BYTE1D_B8G8R8_24}
         * ,{@link NyARBufferType#BYTE1D_R8G8B8_24}のものについては、他の形式よりも高速に動作します。
         * また、出力ラスタ形式が、{@link NyARBufferType#INT1D_X8R8G8B8_32}の物については、単体サンプリングモードの時のみ、さらに高速に動作します。
         * 他の形式のラスタでは、以上のものよりも低速転送で対応します。
         * @param i_in_raster_type
         * 入力ラスタの形式です。
         * @param i_out_raster_type
         * 出力ラスタの形式です。
         * @return
         */
        public static INyARPerspectiveCopy createDriver(INyARRgbRaster i_raster)
        {
            //新しいモードに対応したら書いてね。
            switch (i_raster.getBufferType())
            {
            case NyARBufferType.BYTE1D_B8G8R8X8_32:
                return(new PerspectiveCopy_BYTE1D_B8G8R8X8_32(i_raster));

            case NyARBufferType.BYTE1D_B8G8R8_24:
                return(new PerspectiveCopy_BYTE1D_B8G8R8_24(i_raster));

            case NyARBufferType.BYTE1D_R8G8B8_24:
                return(new PerspectiveCopy_BYTE1D_R8G8B8_24(i_raster));

            default:
                return(new PerspectiveCopy_ANYRgb(i_raster));
            }
        }
 public static INyARRgb2GsFilterArtkTh createDriver(INyARRgbRaster i_raster)
 {
     switch (i_raster.getBufferType())
     {
         case NyARBufferType.BYTE1D_B8G8R8_24:
         case NyARBufferType.BYTE1D_R8G8B8_24:
             return new NyARRgb2GsFilterArtkTh_BYTE1D_C8C8C8_24(i_raster);
         case NyARBufferType.BYTE1D_B8G8R8X8_32:
             return new NyARRgb2GsFilterArtkTh_BYTE1D_B8G8R8X8_32(i_raster);
         case NyARBufferType.BYTE1D_X8R8G8B8_32:
             return new NyARRgb2GsFilterArtkTh_BYTE1D_X8R8G8B8_32(i_raster);
         case NyARBufferType.INT1D_X8R8G8B8_32:
             return new NyARRgb2GsFilterArtkTh_INT1D_X8R8G8B8_32(i_raster);
         case NyARBufferType.WORD1D_R5G6B5_16LE:
             return new NyARRgb2GsFilterArtkTh_WORD1D_R5G6B5_16LE(i_raster);
         default:
             return new NyARRgb2GsFilterArtkTh_Any(i_raster);
     }
 }
Exemplo n.º 20
0
        /**
         * この関数は、i_rasterを操作するピクセルドライバインスタンスを生成します。
         * @param i_raster
         * @return
         * @
         */
        public static INyARRgbPixelDriver createDriver(INyARRgbRaster i_raster)
        {
            INyARRgbPixelDriver ret;

            switch (i_raster.getBufferType())
            {
            case NyARBufferType.BYTE1D_B8G8R8_24:
                ret = new NyARRgbPixelDriver_BYTE1D_B8G8R8_24();
                break;

            case NyARBufferType.BYTE1D_B8G8R8X8_32:
                ret = new NyARRgbPixelDriver_BYTE1D_B8G8R8X8_32();
                break;

            case NyARBufferType.BYTE1D_R8G8B8_24:
                ret = new NyARRgbPixelDriver_BYTE1D_R8G8B8_24();
                break;

            case NyARBufferType.BYTE1D_X8R8G8B8_32:
                ret = new NyARRgbPixelDriver_BYTE1D_X8R8G8B8_32();
                break;

            case NyARBufferType.INT1D_GRAY_8:
                ret = new NyARRgbPixelDriver_INT1D_GRAY_8();
                break;

            case NyARBufferType.INT1D_X8R8G8B8_32:
                ret = new NyARRgbPixelDriver_INT1D_X8R8G8B8_32();
                break;

            case NyARBufferType.BYTE1D_R5G6B5_16BE:
                ret = new NyARRgbPixelDriver_WORD1D_R5G6B5_16LE();
                break;

            default:
                throw new NyARException();
            }
            ret.switchRaster(i_raster);
            return(ret);
        }
Exemplo n.º 21
0
        public void Test()
        {
            //AR用カメラパラメタファイルをロード
            NyARParam ap = NyARParam.loadFromARParamFile(File.OpenRead(camera_file), 320, 240);

            //試験イメージの読み出し(320x240 RGBのRAWデータ)
            StreamReader sr = new StreamReader(data_file);
            BinaryReader bs = new BinaryReader(sr.BaseStream);

            byte[]         raw = bs.ReadBytes(320 * 240 * 3);
            INyARRgbRaster ra  = NyARRgbRaster.createInstance(320, 240, NyARBufferType.BYTE1D_R8G8B8_24, false);

            ra.wrapBuffer(raw);

            MarkerProcessor pr = new MarkerProcessor(ap, ra.getBufferType());

            pr.detectMarker(ra);
            Console.WriteLine(pr.transmat.m00 + "," + pr.transmat.m01 + "," + pr.transmat.m02 + "," + pr.transmat.m03);
            Console.WriteLine(pr.transmat.m10 + "," + pr.transmat.m11 + "," + pr.transmat.m12 + "," + pr.transmat.m13);
            Console.WriteLine(pr.transmat.m20 + "," + pr.transmat.m21 + "," + pr.transmat.m22 + "," + pr.transmat.m23);
            Console.WriteLine(pr.transmat.m30 + "," + pr.transmat.m31 + "," + pr.transmat.m32 + "," + pr.transmat.m33);
            Console.WriteLine(pr.current_id);
            return;
        }
        public static INyARRgb2GsFilterArtkTh createDriver(INyARRgbRaster i_raster)
        {
            switch (i_raster.getBufferType())
            {
            case NyARBufferType.BYTE1D_B8G8R8_24:
            case NyARBufferType.BYTE1D_R8G8B8_24:
                return(new NyARRgb2GsFilterArtkTh_BYTE1D_C8C8C8_24(i_raster));

            case NyARBufferType.BYTE1D_B8G8R8X8_32:
                return(new NyARRgb2GsFilterArtkTh_BYTE1D_B8G8R8X8_32(i_raster));

            case NyARBufferType.BYTE1D_X8R8G8B8_32:
                return(new NyARRgb2GsFilterArtkTh_BYTE1D_X8R8G8B8_32(i_raster));

            case NyARBufferType.INT1D_X8R8G8B8_32:
                return(new NyARRgb2GsFilterArtkTh_INT1D_X8R8G8B8_32(i_raster));

            case NyARBufferType.WORD1D_R5G6B5_16LE:
                return(new NyARRgb2GsFilterArtkTh_WORD1D_R5G6B5_16LE(i_raster));

            default:
                return(new NyARRgb2GsFilterArtkTh_Any(i_raster));
            }
        }
Exemplo n.º 23
0
 /* DsXRGB32Rasterの内容を保持しているテクスチャにコピーします。
  * i_rasterのサイズは、このインスタンスに指定したテクスチャサイズ(コンストラクタ等に指定したサイズ)と同じである必要です。
  * ラスタデータはテクスチャの左上を基点にwidth x heightだけコピーされ、残りの部分は更新されません。
  */
 public void setRaster(INyARRgbRaster i_raster)
 {
     Debug.Assert(!this._is_dispose);
     int pitch;
     using(GraphicsStream texture_rect = this.m_texture.LockRectangle(0, LockFlags.None, out pitch))
     {
         try{
             int dst = (int)texture_rect.InternalData;
             switch (i_raster.getBufferType())
             {
                 case NyARBufferType.BYTE1D_B8G8R8X8_32:
                     {
                         byte[] buf = (byte[])i_raster.getBuffer();
                         //テクスチャのピッチって何?
                         int src_w = this.m_width * 4;
                         int src = 0;
                         for (int r = this.m_height - 1; r >= 0; r--)
                         {
                             Marshal.Copy(buf, src, (IntPtr)dst, pitch);
                             dst += pitch;
                             src += src_w;
                         }
                     }
                     break;
                 case NyARBufferType.OBJECT_CS_Bitmap:
                     NyARBitmapRaster ra = (NyARBitmapRaster)(i_raster);
                     BitmapData bm = ra.lockBitmap(); 
                     try
                     {
                         int src = (int)bm.Scan0;
                         for (int r = this.m_height - 1; r >= 0; r--)
                         {
                             NyARD3dUtil.RtlCopyMemory((IntPtr)dst, (IntPtr)src, pitch);
                             dst += pitch;
                             src += bm.Stride;
                         }
                     }
                     finally
                     {
                         ra.unlockBitmap();
                     }
                     break;
                 default:
                     throw new NyARException();
             }
         }
         finally
         {
             //テクスチャをアンロックする
             this.m_texture.UnlockRectangle(0);
         }
     }
     return;
 }
Exemplo n.º 24
0
 /* DsXRGB32Rasterの内容を保持しているサーフェイスにコピーします。
  */
 public void setRaster(INyARRgbRaster i_sample)
 {
     Debug.Assert(!this._is_dispose);
     int pitch;
     int s_stride = this.m_width * 4;
     using (GraphicsStream gs = this._surface.LockRectangle(LockFlags.None, out pitch))
     {
         try{                    
             switch (i_sample.getBufferType())
             {
                 case NyARBufferType.BYTE1D_B8G8R8X8_32:
                     if (pitch % s_stride == 0)
                     {
                         Marshal.Copy((byte[])i_sample.getBuffer(), 0, (IntPtr)((int)gs.InternalData), this.m_width * 4 * this.m_height);
                     }
                     else
                     {
                         int s_idx = 0;
                         int d_idx = (int)gs.InternalData;
                         for (int i = this.m_height - 1; i >= 0; i--)
                         {
                             //どう考えてもポインタです。
                             Marshal.Copy((byte[])i_sample.getBuffer(), s_idx, (IntPtr)(d_idx), s_stride);
                             s_idx += s_stride;
                             d_idx += pitch;
                         }
                     }
                     break;
                 case NyARBufferType.OBJECT_CS_Bitmap:
                     NyARBitmapRaster ra = (NyARBitmapRaster)(i_sample);
                     BitmapData bm = ra.lockBitmap();
                     try{
                         //コピー
                         int src = (int)bm.Scan0;
                         int dst = (int)gs.InternalData;
                         for (int r = this.m_height - 1; r >= 0; r--)
                         {
                             NyARD3dUtil.RtlCopyMemory((IntPtr)dst, (IntPtr)src, s_stride);
                             dst += pitch;
                             src += bm.Stride;
                         }
                     }finally{
                         ra.unlockBitmap();
                     }
                     break;
                 default:
                     throw new NyARException();
             }
         }finally{
             this._surface.UnlockRectangle();
         }
         return;
     }
 }