zoukankan      html  css  js  c++  java
  • 如何在 GDI+ 中指定旋转中心 回复 "wuheng66888" 的问题


    问题来源: http://www.cnblogs.com/del/archive/2009/01/23/1017571.html#1437673

    本来 wuheng66888 需要的是输出旋转的文本, 下面的例子只是转了一个矩形;
    因为 GDI+ 的旋转理念是旋转画布, 所以都是一样的.

    本例效果图:



    代码文件:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
    
    type
      TForm1 = class(TForm)
        procedure FormPaint(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    uses GDIPOBJ, GDIPAPI;
    
    procedure TForm1.FormPaint(Sender: TObject);
    var
      g: TGPGraphics;
      p: TGPPen;
      rect: TGPRect;
      pt: TGPPointF;
      Matrix: TGPMatrix;
    begin
      g := TGPGraphics.Create(Canvas.Handle);
      p := TGPPen.Create(MakeColor(255,255,0,0),0);
    
      rect := MakeRect(30,30,100,100);
    
      {譬如准备在上面矩形的中心点旋转}
      pt := MakePoint(rect.X + rect.Width / 2, rect.Y + rect.Height /2);
    
      Matrix := TGPMatrix.Create;
      Matrix.RotateAt(45, pt); {以指定的 pt 为中心, 转 45° 角}
    
      {先画个不旋转的}
      g.DrawRectangle(p, rect);
    
      {再画个旋转的}
      p.SetColor(aclBlue);
      g.SetTransform(Matrix);  {关键代码}
      g.DrawRectangle(p, rect);
    
      g.ResetTransform;        {关键代码, 不恢复后面就都旋转了}
    
      Matrix.Free;
      p.Free;
      g.Free;
    end;
    
    end.
    

  • 相关阅读:
    机器人能都返回原点
    解码字母
    学习W3C
    字符重排
    字符串相加
    ARC107F Sum of Abs
    6830. 【2020.10.25提高组模拟】排列
    6828. 【2020.10.25提高组模拟】幂
    CF1434D Roads and Ramen
    2020 计蒜之道 线上决赛 C 攀登山峰
  • 原文地址:https://www.cnblogs.com/del/p/1380460.html
Copyright © 2011-2022 走看看