Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
Delphi 2010 Professional
|
Re: Text oder. Grafik neigen
23. Dez 2006, 23: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: Coordinate Spaces and Transformations
Gruß Hawkeye
|
|
Zitat
|