开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 2326|回复: 0

[求助] WinFrom 画图 求提升效率思路、实现方式

[复制链接]

0

精华

0

贡献

0

赞扬

帖子
4
软币
85
在线时间
2 小时
注册时间
2017-7-8
发表于 2017-7-8 12:24:43 | 显示全部楼层 |阅读模式

需要制作一个图片处理功能,类似于使用鼠标调整图片灰度亮度(比调整灰度亮度稍复杂),如鼠标左键上下移动调整灰度,左键左右移动调整亮度

情况是: 需要处理的图片过大(width:2000+,height:3000+),像素点2000+  *  3000+,像素值大约有4000个,处理效率低,进行鼠标调整时出现卡顿延迟

目前使用方法是:
1、创建了ReadImage()  , ReLoadImage(灰度,亮度)两个方法
2、初始化时调用ReadImage()方法加载文件,循环数据,转化为像素(同时进行缓存)并生成画布(使用了4.0的线程并行技术),显示到控件
3、鼠标移动事件调用ReLoadImage()方法传入偏移量,循环像素数据,计算偏移量并生成画布(使用了4.0的线程并行技术),显示到控件

存在问题:
1、初始化时,需要加载文件,数据像素化等操作,for循环2000*3000次,用时约3-5秒,勉强可接受
2、鼠标移动事件时,需要对缓存像素数据进行偏移量运算并显示,for循环2000*3000次,用时约0.5-1秒,达不到实时效果,不可接受


目前有一个解决思路,但代码实现方面有点蒙
1、 因图片特殊,不论大小,像素值始终保持在4000左右,是否可以先做一个4000的数组缓存,用于保存所有像素信息,在初始化加载文件时,将像素点的像素值直接指向数组缓存,
    在鼠标事件中,调用ReLoadImage()方法传入偏移量时,首先计算数组缓存约循环4000次,在循环像素点,不做运算直接绘图。此方法虽然增加了约4000次循环,但在像素值计算上
   有明显的减少(约为 2000*3000 - 4000 次),应该能够提升效率。


有求如下:
1、求高人指正此方法的正确性和可行性,如有问题请给予指正,如可行,请给予些程序思路,本人有点卡壳了
2、有其他更好的思路及建议请多多赐教


                           拜谢!
回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-4-24 22:26

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表