在VC++的MFC中DOC类里如何实现bmp图像旋转任意角度(不用DIB的方法)。
展开全部
GDI里似乎没有现成的旋转函数,所以就要手动编写旋转代码了。
假设有两个CDC,A和B,对应两个BMP图片,现在要把A中的图像旋转后放到B中。
基本的做法就是遍历B中的每一个像素(x, y),计算对应的A中的坐标(x', y'),使用GetPixel得到对应点(x', y')的颜色color,然后再把这个颜色画到B中的点(x, y)处即可。
接下来就是坐标变换问题了。如果是绕原点旋转,那么公式如下:
x' = x * cos(theta) - y * sin(theta);
y' = x * sin(theta) + y * cos(theta);
如果要绕某个其它点旋转,那么只要另外加一个平移变换即可。
PS:
这里用的是SetPixel/GetPixel。DIB的方法会快很多,不过代码量确实也更大。
假设有两个CDC,A和B,对应两个BMP图片,现在要把A中的图像旋转后放到B中。
基本的做法就是遍历B中的每一个像素(x, y),计算对应的A中的坐标(x', y'),使用GetPixel得到对应点(x', y')的颜色color,然后再把这个颜色画到B中的点(x, y)处即可。
接下来就是坐标变换问题了。如果是绕原点旋转,那么公式如下:
x' = x * cos(theta) - y * sin(theta);
y' = x * sin(theta) + y * cos(theta);
如果要绕某个其它点旋转,那么只要另外加一个平移变换即可。
PS:
这里用的是SetPixel/GetPixel。DIB的方法会快很多,不过代码量确实也更大。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询