用BitBlt旋转图片2

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

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

原来的绘制是这样的:

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);
            }   
   }

展开阅读全文

没有更多推荐了,返回首页