Welkom bij de Tweaking4All gemeenschapsforums!
Voor je gaat deelnemen, bekijk de Forum Regels!
Specifieke onderwerpen: Start het onderwerp met de naam van het programma of systeem.
Bijvoorbeeld “MacOS X – Jouw vraag“, of bijvoorbeeld “MS Word – Jouw Tip of Truc“.
Merk op: Omschakelen naar een andere taal zal niet werken als je een post aan het lezen bent aangezien er waarschijnlijk geen vertaling beschikbaar is.
[Opgelost] Delphi/Lazarus - Rotateer TBitmap 90 graden
Delphi, Lazarus, Free Pascal
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2934
Topic starter
29 augustus 2013 22:51
De volgende code draait een Bitmap 90 graden (tegen de klok in - naar links):
procedure TForm3.Rotate90(Bitmap:TBitmap);
type TRGBArray = array[0..0] of TRGBTriple;
pRGBArray = ^TRGBArray;
var oldRows,
oldColumns: integer;
rowIn,rowOut:
pRGBArray;
tmpBitmap: TBitmap;
begin
// Create tmp bitmap
tmpBitmap:=TBitmap.Create;
// Adjust tmp bitmap size and pixelformat (rotate 90 = W-> and H->W)
with tmpBitmap do
begin
tmpBitmap.Width:=Bitmap.Height;
tmpBitmap.Height:=Bitmap.Width;
tmpBitmap.PixelFormat:=Bitmap.PixelFormat;
end;
for oldColumns := 0 to Bitmap.Width - 1 do // oldColumns=newRows, oldRows=newColumns
begin
rowOut:=tmpBitmap.ScanLine[oldColumns];
// Fastest way is reading bit, so we work on one line in the new bitmap ata time
for oldRows:= 0 to Bitmap.Height - 1 do
begin
rowIn:=Bitmap.ScanLine[oldRows];
rowOut[oldRows]:=rowIn[Bitmap.Width - oldColumns -1];
end;
end;
// Copy bitmap to source and free tmp bitmap
bitmap.assign(tmpBitmap);
tmpBitmap.free;
end;