实现Bitmap.RotateFlip把位图快速翻转或旋转功能

Bitmap类里的方法RotateFlip能把位图进行翻转或旋转,对其实现方式很好奇。下面就是实现的功能:

 

1. 计算目标图像每像素的位置所用的接口

 

2.计算目标图像每像素的位置所用的抽象类(其实接口可以省略)

 

3.旋转180° 所用到的计算

 

4.旋转180°再垂直翻转

 

5.旋转180°

 

6.旋转90°

 

7.旋转90°再水平翻转

 

8.旋转90°再垂直翻转

 

9.不进行旋转和翻转

 

10. 垂直翻转

 

11. 静态旋转翻转类

 

12.测试方法

 

用上述这些类把旋转翻转的组合方式都是先完成,现只支持8位以上位图。经过测试,速度不用说了。

 

以上所用到的类及其方法开始只在一个大方法里,经过一步一步重构,最后改头换面,变成如今这样了。

 

 

实现历程:开始想到的是用GetPixel取RGB颜色在用SetPixel放到对应的位置去,发现这种方法实在是很慢。自己感觉一定是自己想错了,微软绝对不是这么做的,要不系统带的工具旋转翻转图片怎么那么快呢。应该,绝对有其他方法。根据位图的文件存储格式,想象一下,要是把对应的字节位置一换,就实现了。但是我不能每次都读文件写文件啊,IO操作也很耗时的。这怎么办,要是得到位图在内存中的数据结构就好了,咦,偏巧Bitmap就有这个方法获得对应的数据,他就是LockBits方法。有了这个方法之后,关键就需要算法了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值