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