TGraphic drehen |
|
| Autor | elundril |
|---|---|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 28.04.2011 |
Der Folgende Code ist auf dem Code zum Drehen von Bitmaps von Finn-Ole Paulsen aufgebaut.
Mit diesem Code können Inhalte aus Images um 90 Grad gedreht werden. Um das zu ermöglichen, muss der Inhalt von TGraphic mittels einem Hilfsbitmap ("Sourcebmp" = Quellbmp) und dessen Routine Canvas.Draw gezeichnet. Da wir jetzt das Bild auf einem Bitmap haben, können wir es mit dem Code von Finn-Ole Paulsen drehen.
Dazu müssen wir einen Typ definieren:
Der Code ist nun diese Prozedur. Man muss ihr ein TGraphic Objekt und ein Bitmap, in das gedreht werden soll, übergeben. Für die restliche Erklärung der Prozedur bitte den Code von Finn-Ole Paulsen ansehen.
// Source: Die Graphic, die gedreht werden soll. Da TBitmap von TGraphic abgeleitet ist, kann hier z.B. auch ein Bitmap übergeben werden
// Target: Das Bitmap, welches die gedrehte Graphic enthält. WICHTIG: Das Bitmap muss vor Aufruf erstellt worden sein.
procedure rotate90(const Source:TGraphic ; Target: TBitmap);
var P: PRGBQuad;
y, x, h, b: integer;
Rowout: ^TRGBarray;
sourcebmp: TBitmap;
begin
sourcebmp := TBitmap.Create;
try
sourcebmp.PixelFormat := pf32bit;
sourcebmp.Height := Source.Height;
sourcebmp.Width := Source.Width;
sourcebmp.Canvas.Draw(0, 0, Source);
Target.PixelFormat := pf32bit;
b := sourcebmp.Height;
h := sourcebmp.Width;
Target.Height := h;
Target.Width := b;
for y := 0 to (h - 1) do begin
rowout := Target.ScanLine[y];
p := sourcebmp.ScanLine[sourcebmp.height-1];
inc(p, y);
for x := 0 to (b-1) do begin
rowout[x] := p^;
inc(p, h);
end;
finally
sourcebmp.Free;
end;
end;
Ein Beispielaufruf könnte so aussehen:
var Bitmap: TBitmap;
begin
Bitmap := TBitmap.Create;
try
rotate90(Image1.Picture.Graphic, Bitmap);
Image1.Picture.Graphic.Assign(Bitmap);
Image1.Refresh;
finally
Bitmap.Free;
end;
end;