none
处理图像时这句代码报错,无法从“System::IntPtr”转换为“byte *” RRS feed

  • 问题

  •  我现在处理jpg文件想把RGB转换为灰度图,bmd是bitmapdata,明显bmd->Scan0是System::IntPtr,我是先处理(x,y)下的RGB像素,语句如下:

           byte* row = (byte*)bmd->Scan0 + (y * bmd->Stride) + (x * 3);
            return (byte)((0.2126 * row[2]) + (0.7152 * row[1]) + (0.0722 * row[0]));

    无法转换,有没有什么更好的方法处理RGB转换为灰度图啊?

     

    还有,在C++/CLI中怎么没有byte类型,只能使用Byte?怎么使用byte啊,我现在都用的unsigned char。。。

     

    大虾们帮帮忙,谢谢啦!

    2010年4月7日 3:34

答案

  • 自己回答吧:
                     IntPtr ptr = bmd->Scan0;

                     int bytes = bmd->Stride * bmd->Height;
                     array<Byte>^rgbValues = gcnew array<Byte>(bytes);

                     System::Runtime::InteropServices::Marshal::Copy( ptr, rgbValues, 0, bytes );

    看了看MSDN搞定了~

    • 已标记为答案 toscain 2010年4月7日 8:54
    2010年4月7日 8:54