c#学习(2):大图片的特效处理与获取屏幕上任一点的rgb值

本文介绍了在C#中处理大图片(约3M,2152*1426)时如何实现高效特效,如百叶窗效果。通过调整图片尺寸以适应控件大小并使用BitBlt函数,减少了内存消耗和计算时间。在进行特效处理前,先将图片转换为统一格式,然后将像素复制到新位图中,再应用于pictureBox。同时,展示了如何获取图片上任意点的RGB值。
摘要由CSDN通过智能技术生成

这里的大图片是指3M左右的图片,笔者所做的图片特效大约分为两种,一种是通过picturebox控件的变换而实现的,这类特效较为简单,其效率与图片本身并无关系;第二类是通过数值计算,利用计时器控制图片像素的显示,分块显示图片,例如百叶窗特效,旋转特效,马赛克特效等,这类特效的效率与图片本身的大小有很大关系。下边通过百叶窗的实现详细讲述一下如何高效的实现此类特效。

           首先,打开一幅3M左右的图片(2152*1426),如果对其不做任何处理,首先或其各个像素的rgb值,二次循环,大约要计算2152*1426次,仅仅打开图片就要花掉3-4s的时间,进行百叶窗的计算时,大约耗费掉了系统130多M的内存。那么,如何对打开的图片进行简单的处理呢?其实,并不需要用到如无损压缩、格式变换等技术,只需要在进行百叶窗特效前对图片做一点小手脚,因为我的控件图像显示模式StretchImage模式(picturebox1.sizemode=pictureboxsizemode.StretchImage),就是说,无论这个图片在windows图片查看器里面积有多大,在picturebox中的面积适中要服从picturebox的大小,如果将所有图片大小都压缩成为一个统一的格式,人眼是无法分辨的。具体地说就是根据picturebox的宽高提取每一点的像素值(注意:虽然放在控件中的图片面积改变了,但是所占用的内存是不变的,而且计算机中的image.width和image.height是不变的,依然是2152*1426,而控件可能只是350*240),然后将所有像素复制到另一幅位图中,将这幅位图重新放到picturebox中。具体实现如下&#x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值