如题,如何旋转一幅BMP图片?

解决方案 »

  1.   

    先生成一个image对象,然后进行复制要操作的图片,逐象素行复制,然后自己写个算法,将最上面的先填充到最下面,这样复制完后就得到了旋转的图片,最重要的是那个算法,旋转的角度可以自己定义的。我说的是颠倒:)
      

  2.   

    procedure Display( Canvas : TCanvas; bmp : TBitmap; rect : TRect );//功能:以逆时针方向逐渐显示一幅位图.//Canvas : 窗口的Canvas;//bmp : 待显示的位图;//rect : 显示区域vari, a, b, x0, y0, x, y : Integer;d : Extended;r : TRect;Membmp : TBitmap;begina := ( rect.right - rect.left ) div 2; //椭圆横轴b := ( rect.bottom - rect.top ) div 2; //椭圆纵轴x0 := rect.Left + a; //椭圆中心y0 := rect.Top + b; //r.Left := 0;r.Top := 0;r.Right := 2 * a;r.Bottom := 2 * b;Membmp := TBitmap.Create; //建立等大的内存位图Membmp.Width := 2 * a;Membmp.Height := 2 * b;Membmp.Canvas.Brush.Color := clBlack; //涂黑Membmp.Canvas.FillRect( r );Membmp.Canvas.Brush.Color := clWhite;for i := 1 to 36 dobegind := i / 18 * 3.1415926;sleep(10);x := x0 + Round( a * Cos( d ) );y := y0 - Round( b * Sin( d ) );//用白色画扇形if ( i = 36 ) thenMembmp.Canvas.Ellipse( x0 - a, y0 - b, x0 + a, y0 + b )elseMembmp.Canvas.Pie( x0 - a, y0 - b, x0 + a, y0 + b, x0 + a, y0, x, y );Membmp.Canvas.CopyMode := cmSrcAnd;//显示位图的扇形区域Membmp.Canvas.CopyRect( r, bmp.Canvas, r );Canvas.CopyRect( rect, Membmp.Canvas, r );end;Membmp.Free;end; 
     
      

  3.   

    http://expert.csdn.net/Expert/TopicView1.asp?id=1472478
      

  4.   

    简单的就是自己写一个极坐标变换,
    参考以下帖子吧
    http://expert.csdn.net/Expert/topic/1445/1445294.xml?temp=.181637
    http://expert.csdn.net/Expert/topic/1744/1744301.xml?temp=.9970667
    http://expert.csdn.net/Expert/topic/1648/1648613.xml?temp=.3198206