条条大道通罗马,这是我学程序的最大感受。任何问题都有多种解决方法。上次说的旋转图片算法,如果实际测试,就会发现,图片旋转一定角度会变花,出现白点。这是因为屏幕坐标是整数,而旋转公式的结果却是浮点数,在转换中,出现误差。怎样解决呢?
用数学公式来纠正误差?不需要。
原来的绘制是这样的:
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);
}
}
用BitBlt解决图片旋转白点问题

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

被折叠的 条评论
为什么被折叠?



