zyl0457274 发表于 2017-7-8 12:24:43

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


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

情况是: 需要处理的图片过大(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、有其他更好的思路及建议请多多赐教


                           拜谢!
页: [1]
查看完整版本: WinFrom 画图 求提升效率思路、实现方式