以前没弄过DELPHI,最近学了1个多星期时间,无聊时候把以前把C#写的部分图像处理代码转换成DELPHI,竟然发现D处理图片的速度比C#快了20倍··················D处理图片0.3s,C#处理同一图片6s多 ,差距真大····················
我写的算法调用GDI+函数,无汇编便于理解,觉的有帮助就顶一个,顶的多就发布下一篇图像处理,转帖的话请写明转帖和原作者: 睿割氏窝老攻 ,QQ 235483710 EMAIL: [email protected] 代码太多,怕看不清楚,下面是我的BLOG地址 :http://blog.csdn.net/huruihappy/archive/2008/09/06/2892902.aspx
解决方案 »
- 兔子们 节日快乐
- 我想请问各位,cxgrid得到当前行和当前列的函数是啥?好比dxgrid的FocusedColumn
- 怎么发布delphi软件,让其能脱离环境运行!
- intraweb中如何调用外部程序?
- 毕业设计做完了,感谢这个论坛
- 请用各位有没有 Dev Express,Express Editors5 系列的中文版教学资料。
- 如何动态创建窗体?
- 这个问题怎么解决?
- 500分请教!!高手请进!关于WINDOWS消息及WIN API函数的问题?在线等待!急!!!!!!!
- fastreport如何安装???
- 谈谈Delphi的前途
- 如何做到2个excel读入内存,并union all成一个表.
1、“虽然Bitmap格式不需要做复杂解释”,但是各种图片的像素格式是不一样的,对同样的操作,难道每个格式都去写一段代码?不如此,就得自己解析和转换图像格式,自己写的解析、转换代码又比TBitmap效率高多少呢?
2、操作TBitmap的ScanLine的意义还在于,不仅是可以处理Bitmap格式图像,在第三方代码支持下,还可以以同样的代码去处理其它格式的图像,如jpeg、png以及gif等,否则,和上面的结果一样:要么每个格式都去写一段代码,要么自己去解析和转换。
所以,操作TBitmap其实是看中了它的像素格式转换能力。再说了,毕竟基础扎实、语言驾驭能力很强的高手也只是极少数,而往往这类高手的实际运用能力并不是很强,毕竟人的精力是有限的。
“但是各种图片的像素格式是不一样的,对同样的操作,难道每个格式都去写一段代码”,ScanLine得到的内存结构和文件中的的数据结构完全一致。你确信去阅读了ReadDIB的代码吗?这就是Copy操作而已。如果你基于这个理由,那么用Bitmap同样解决不了,用 ScanLine得到的位图数据同样要根据色深差异做差异化处理,这个我上面说明过。TBitmap只是VCL中用于UI绘图的基础类。VCL是专业的图像库吗?性能什么都可以不管,请问DIB的尺寸上限问题如何解决?你尝试用TBitmap创建一个稍微大点的位图,如何?能成功吗?绑定DIB的位图的必然有其使用的局限性。做图像处理自己写位图类也是理由足够充分的。至于你说的那些格式,基于libjpeg/libpng/libgif做解析都很简单,没有任何难度。回到话题的开始,“直接用流读bmp文件到数组,和用ScanLine读到数组哪个更快”,毫无疑问,直接读快,这是个不需要推理证明的真理。
将不同格式的位图,用TBitmap转换为相同的格式,对大多数图像来说,色深差异做差异化处理已经做得很好了。
“基于libjpeg/libpng/libgif做解析都很简单,没有任何难度”,这也只是高手们说的话!
回答问题,大家都有说话的权利,不同的观点,可以争论,说错了什么,当然可以指出,但是,如果以高手自居,动不动就教训别人,只有自己天下第一,就不大好了。我前面只是说了,“我一般都是直接操作ScanLine”,“用流读到数组操作应该也不慢,但是比较麻烦”的话,就被高手指责为“喜欢靠想象力得出结论”,“缺乏基础,一样驾驭不了Delphi”,请问,我在哪里做了什么“结论”?!
我并不想就此事同谁来做个争辩,因为我不是“高手”,我们不是一个档次的水平,“诸如基于libjpeg/libpng/libgif做解析”之类的问题,对我来说是相当困难的,所以,争辩起来没多大意义。只是垦请高手们注意说话的语气!“缺乏”什么,能不能“驾驭”什么,是自己的事,用不着别人教训!
虽然我说了不想就此事辩论,但还是忍不住问一下,8、16、24以及32位位图的内存布局是一样的?转换为相同格式叫不叫Copy?一般位图不须解析,特殊的呢?非位图格式呢?再简单也还是解析吧!还是那句话,观点不同,可以争论,但是用不着教训别人,炫耀自己!大家都知道VCL代码是开源的,并非只有高手会读,低手们也会读的,只是理解层次不同而已。
TBitmap有解决差异性?ScanLine得到的内存和文件中的数据完全一致。好吧,你要说你基于GDI来处理DIB,那确实不存在差异,不过问题的出发点呢?
修改了Pixelformat还是同一位图吗?这似乎和楼上说的取数据到数组目的就不一样了。另外说个多余的话题,TBitmap中真彩图转索引图都基于生成的固定调色板,作为图像处理来说几乎没有实用价值,没有哪个图像处理软件会这么做。
顺便再请教下,图像的算法问题。自己的独创算法 基本实现了Photoshop里面的置换滤镜算法,可以用于处理图像纹理贴图,比如给衣服褶皱加纹理扭曲等效果,但是当“置换因子”过大时,整个纹理图虽然能依据褶皱进行扭曲,但是图像显示出的纹理是散状的点,无法像PS那样连贯的扭曲,大家帮忙优化下。··
http://www.opencv.org.cn/index.php
北京国展大型人才招聘会(9.27)
http://www.315job.com/YaoQingHan/20080927.html
你可以参见图像操作大牛人Maozefa的博客(http://blog.csdn.net/maozefa)内容,使用GDI+能很好的解决你所说的问题