已知像素数据,利用GDI+快速重建图像对象

rib06 2007-07-02 10:30:17
已经获得了一幅图像(512×512,像素格式ARGB)的像素数据数组pixels[],里面的每一个元素都是图像上对应位置的像素值,如果利用GDI+重新构造出Image对象,那么可以直接通过二重循环SetPixel实现,但这种方法实在是太慢太慢了,各位高手有没有更快的方法?请指点一二,万分感谢!
...全文
203 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
rib06 2007-07-06
  • 打赏
  • 举报
回复
已经基于内存流实现,但只用像素数据不行,需要补54字节的头,构造这个头费了不少劲,最后用很猥琐的办法凑合了,速度很快。

感谢大家!
rib06 2007-07-04
  • 打赏
  • 举报
回复
多谢楼上诸位

@tuyile006(小y)
用内存流构建Image的方法我也曾经试过,但总是会报运行时错误,我会再试一下,多谢多谢

@zbevimage(冰峰孤骑)
GDAL的确很牛,也可以通过SWIG在.net下面使用,多谢提醒,后面会考虑

@hazrael(没事儿偷着乐)
SetPixel的效率可以说已经低到了不可用的程度,可是我的这段肯定是要用c#编,我觉得应该有快速实现的办法


多谢大家,其实这个功能在Java下面可以借助ImageProducer实现,非常简单而且快的要命,.net下面就一直没找到对应的方法
guxingdao 2007-07-03
  • 打赏
  • 举报
回复
风过无痕
hazrael 2007-07-03
  • 打赏
  • 举报
回复
嗯,当初做过一个项目,就是对内存中的像素值进行变化。开始的时候用的就是GDI的API——GetPixel和SetPixel,结果性能差的厉害。刚开始的时候还不知道是哪里性能差,后来用工具分析,发现问题集中在这两个API上(尤其是SetPixel)。当时用的是C++开发,所以直接操作内存,修改前后的速度比较,简直可以说,从牛车直接升级到法拉利了。真不知道微软这个API里到底是怎么实现的。
zbevimage 2007-07-03
  • 打赏
  • 举报
回复
做图像其实可以研究一下GDAL类库。功能非常强大。只是可惜对。NET支持不是很好。
小y的CSDN博客 2007-07-03
  • 打赏
  • 举报
回复
System.IO.MemoryStream ms = new System.IO.MemoryStream();
ms.Write(pixels,0,pixels.Length);
Bitmap image =(Bitmap) Bitmap.FromStream(ms);
owennol 2007-07-03
  • 打赏
  • 举报
回复
用不安全代码,用指针附值

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧