![]() |
Wie Bitmaps in 90-Grad-Schritten drehen?
Die Bitmaps sind *immer* quadratisch (nämlich Icons, die als Bitmaps eingelesen wurden).
Wie dreht man die Dinger mit ein paar Zeilen (um jeweils 90 Grad) oder einer Funktion? mfg Rory |
Re: Wie Bitmaps in 90-Grad-Schritten drehen?
such einfach in der codelib:
![]() ![]() |
Re: Wie Bitmaps in 90-Grad-Schritten drehen?
bei bildern allgemein wäre das prinzip eine horizontale linie lesen und vertical schreiben, dann die nächste horizonale linie lesen und vertical schreiben. Also eigentlich ganz simpel.
Hier das ganze mal als source (naja, paar zeilen sinds nicht nur aber es funzt)
Delphi-Quellcode:
procedure Rotate(ABmp: TBitmap);
var LBmp: TBitmap; LCountX, LCountY : Integer; LPixDst, LPixSrc : PRGBTriple; LDif : Cardinal; begin ABmp.PixelFormat := pf24bit; LBmp := TBitmap.Create; LBmp.PixelFormat := pf24bit; LBmp.Width := ABmp.Height; LBmp.Height := ABmp.Width; if LBmp.Height > 1 then LDif := Cardinal(LBmp.ScanLine[1]) - Cardinal(LBmp.ScanLine[0]) else LDif := 0; for LCountY := 0 to ABmp.Height - 1 do begin LPixSrc := ABmp.ScanLine[LCountY]; LPixDst := Pointer(Cardinal(LBmp.ScanLine[0]) + Cardinal(LCountY) * SizeOf(TRGBTriple)); for LCountX := 0 to ABmp.Width - 1 do begin LPixDst^ := LPixSrc^; LPixSrc := Pointer(Cardinal(LPixSrc) + SizeOf(TRGBTriple)); LPixDst := Pointer(Cardinal(LPixDst) + LDif); end; end; ABmp.Assign(LBmp); LBmp.Free; end; |
Re: Wie Bitmaps in 90-Grad-Schritten drehen?
Danke für die Hinweise.
@ichbins: Auf "www.swissdelphicenteer.com" fehlt mir die "Suchen"-Funktion auf der Homepage. Wie soll ich da was finden? @Sir Thornberry: So etwa dachte ich mir das auch, hoffte jedoch, das das Delphi schon bereits kann (aber ich bislang noch nicht wusste wie es geht) :-( mfg |
Re: Wie Bitmaps in 90-Grad-Schritten drehen?
naja, es gibt eine api funktion die bilder drehen kann. (auch in beliebigem winkel, du musst nur wissen wo die zielpunkte liegen)
Hier mal ein Beispiel unter Nutzung der Api-Funktion. Ich hab mal den Teil in Kommentare gesetzt welchen du brauchst für die quadratichen Bilder (der andere ist irrelevant und dient zur Höhen/Breiten-Anderung)
Delphi-Quellcode:
procedure Rotate(ABmp: TBitmap);
var LPoints : array[0..2] of TPoint; LOldSize: TPoint; begin LOldSize := Point(ABmp.Width, ABmp.Height); if ABmp.Width > ABmp.Height then ABmp.Height := ABmp.Width else ABmp.Width := ABmp.Height; //Bei quadratichen Bildern ab hier LPoints[0] := Point(ABmp.Height, 0); LPoints[1] := Point(ABmp.Height, ABmp.Width); LPoints[2] := Point(0, 0); PlgBlt(ABmp.Canvas.Handle, LPoints, ABmp.Canvas.Handle, 0, 0, ABmp.Width, ABmp.Height, 0, 0, 0); //Bei quadratichen Bildern bis hier ABmp.Width := LOldSize.Y; ABmp.Height := LOldSize.X; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz