已经获得了一幅图像(512×512,像素格式ARGB)的像素数据数组pixels[],里面的每一个元素都是图像上对应位置的像素值,如果利用GDI+重新构造出Image对象,那么可以直接通过二重循环SetPixel实现,但这种方法实在是太慢太慢了,各位高手有没有更快的方法?请指点一二,万分感谢!

解决方案 »

  1.   

    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    ms.Write(pixels,0,pixels.Length);
    Bitmap image =(Bitmap) Bitmap.FromStream(ms);
      

  2.   

    做图像其实可以研究一下GDAL类库。功能非常强大。只是可惜对。NET支持不是很好。
      

  3.   

    嗯,当初做过一个项目,就是对内存中的像素值进行变化。开始的时候用的就是GDI的API——GetPixel和SetPixel,结果性能差的厉害。刚开始的时候还不知道是哪里性能差,后来用工具分析,发现问题集中在这两个API上(尤其是SetPixel)。当时用的是C++开发,所以直接操作内存,修改前后的速度比较,简直可以说,从牛车直接升级到法拉利了。真不知道微软这个API里到底是怎么实现的。
      

  4.   

    多谢楼上诸位@tuyile006(小y)
    用内存流构建Image的方法我也曾经试过,但总是会报运行时错误,我会再试一下,多谢多谢@zbevimage(冰峰孤骑)
    GDAL的确很牛,也可以通过SWIG在.net下面使用,多谢提醒,后面会考虑@hazrael(没事儿偷着乐)
    SetPixel的效率可以说已经低到了不可用的程度,可是我的这段肯定是要用c#编,我觉得应该有快速实现的办法
    多谢大家,其实这个功能在Java下面可以借助ImageProducer实现,非常简单而且快的要命,.net下面就一直没找到对应的方法