用BitBlt旋转图片2

在使用BitBlt进行图片旋转时,由于浮点数转换成整数坐标产生的误差会导致图片出现白点。通过将每次绘制的像素宽度增加为2,可以有效消除这种现象。本文展示了如何修改代码,实现无白点的图片旋转效果。
摘要由CSDN通过智能技术生成

条条大道通罗马,这是我学程序的最大感受。任何问题都有多种解决方法。上次说的旋转图片算法,如果实际测试,就会发现,图片旋转一定角度会变花,出现白点。这是因为屏幕坐标是整数,而旋转公式的结果却是浮点数,在转换中,出现误差。怎样解决呢?

用数学公式来纠正误差?不需要。

原来的绘制是这样的:

BitBlt(hdc,destx+200,desty+200,1,1,hdcmem,i,j,SRCCOPY);

修改如下,每次绘制两个像素。即:

BitBlt(hdc,destx+200,desty+200,2,1,hdcmem,i,j,SRCCOPY);

仅仅如此,图片的白点消除了。

代码:

   SelectObject(hdcmem, hBm);//选入DC
   for(i=0;i<64;i++)
   {
            for(j=0;j<64;j++)
            {
                     //计算旋转后的坐标
                     destx=i*cos(angle*3.1415/180)-j*sin(angle*3.1415/180);
                     desty=i*sin(angle*3.1415/180)+j*cos(angle*3.1415/180);
                     //绘制两个像素到屏幕上(图片移动到200,200的位置)
                     BitBlt(hdc,destx+200,desty+200,2,1,hdcmem,i,j,SRCCOPY);
            }   
   }

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值