Thema: Delphi Text oder. Grafik neigen

Einzelnen Beitrag anzeigen

Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Text oder. Grafik neigen

  Alt 23. Dez 2006, 22:11
Hallo BrainCracked,

hier eine kleine Ergänzung:

Delphi-Quellcode:
// zeichnet eine gescherte Grafik auf einem Canvas
// sx, sy ist der Betrag der Scherung in x- und y-Richtung
// aOffsetX, aOffsetY gibt den Offset für das Zeichnen an

procedure DrawShearedGraphic (aCanvas: TCanvas; aGraphic: TGraphic;
                              sx, sy: Double; aOffsetX, aOffsetY: Integer);
var
  svMode: Integer;
  Mat, svMat: tagXFORM;
begin
  // aktuellen Zustand retten
  svMode := SetGraphicsMode(aCanvas.Handle, GM_ADVANCED);
  if (svMode = GM_ADVANCED) then
    GetWorldTransform(aCanvas.Handle, svMat);
  // Scherung
  FillChar (Mat, SizeOf(Mat), 0);
  Mat.em11 := 1;
  Mat.em12 := sy;
  Mat.em21 := sx;
  Mat.em22 := 1;
  Mat.eDx := aOffsetX;
  Mat.eDy := aOffsetY;
  SetWorldTransform(aCanvas.Handle, Mat);
  // Grafik zeichnen
  aCanvas.Draw(0, 0, aGraphic);
  // alten Zustand wiederherstellen
  if (svMode = GM_ADVANCED) then
    SetWorldTransform(aCanvas.Handle, svMat)
  else
    SetGraphicsMode(aCanvas.Handle, svMode);
end;
Der Aufruf der beiden Routinen könnte so aussehen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  bmp : TBitmap;
begin
  bmp := TBitmap.Create;
  try
    bmp.LoadFromFile ('C:\WINDOWS\winnt.bmp');
    DrawRotatedGraphic (Canvas, bmp, 15, 100, 100);
    DrawShearedGraphic (Canvas, bmp, -0.3, 0.0, 500, 100);
  finally
    bmp.Free;
  end;
end;
Die Grundlagen findest du bei Microsoft: MSDN-Library durchsuchenCoordinate Spaces and Transformations

Gruß Hawkeye
  Mit Zitat antworten Zitat