在VC++的MFC中DOC类里如何实现bmp图像旋转任意角度(不用DIB的方法)。

 我来答
百度网友fde8673
2011-05-20 · TA获得超过423个赞
知道小有建树答主
回答量:401
采纳率:0%
帮助的人:550万
展开全部
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的方法会快很多,不过代码量确实也更大。
guangzhoukin
2011-05-20 · TA获得超过1399个赞
知道小有建树答主
回答量:621
采纳率:0%
帮助的人:646万
展开全部
楼上回答的没错。只是GetPixel/SetPixel这种GDI操作是极其缓慢的。以前看过一些用MMX指令快速旋转的例子,是很有趣,但觉得很无聊,等于重新发明轮子。做这类操作,最好还是学学GDI+,或者Direct3D(3D完全包含了2D操作的)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式