Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   FreePascal (https://www.delphipraxis.net/74-freepascal/)
-   -   Bild schnell unter Linux drehen (https://www.delphipraxis.net/138559-bild-schnell-unter-linux-drehen.html)

Cyf 12. Aug 2009 14:52


Bild schnell unter Linux drehen
 
Unter Windows gab es ja die wunderschöne Möglichkeit Bilder (es geht um TBitmap) sehr schnell mit Hilfe von Systemfunktionen zu drehen. gibt es da unte Linux etwas ähnliches? Auch ScanLine konnte ich bis jetzt nicht ausmachen, daher bleibt mir nur der langsame Ansatz. Allerdings hab ich eine RawImage-Property entdeckt, die aber irgendwie auch nicht so das macht, was sie soll. Das bild soll um 90° (rechtsherum) gedreht werden. Momentaner Ansatz:

Delphi-Quellcode:
function Dreh90(Src: TBitmap): TBitmap;
var
  x, y: Cardinal;
  //SrcData, DestData: PCardinal;
begin
  Result:= TBitmap.Create;
  Result.PixelFormat:= Src.PixelFormat;
  Result.SetSize(Src.Height, Src.Width);
  {//unschön, damit tatsächlich Bilddaten bereitgestellt werden, sonst ist .RawImage.Data nil
  Result.Canvas.Pixels[0,0]:= 0;
  SrcData:= PCardinal(Src.RawImage.Data);
  DestData:= PCardinal(Result.RawImage.Data);}
  Result.BeginUpdate;
  {for x:= 0 to Src.Height-1 do
  begin
    for y:= 0 to Src.Width-1 do
    begin
      ((DestData + x*Src.Width) + y)^:= ((SrcData + y*Src.Width) + (Src.Height-1-x))^;
    end;
  end;}
  for x:= 0 to Src.Height-1 do
  begin
    for y:= 0 to Src.Width-1 do
    begin
      Result.Canvas.Pixels[x,y]:= Src.Canvas.Pixels[y,Src.Height-1-x];
    end;
  end;
  Result.EndUpdate;
end;

theodp 12. Aug 2009 15:50

Re: Bid schnell unter Linux drehen
 
Mit Hilfe von TLazIntfImage drehen beschleunigt das Ganze:

http://wiki.lazarus.freepascal.org/D...th_Graphics/de

Cyf 12. Aug 2009 18:43

Re: Bild schnell unter Linux drehen
 
Zusätzliche Lazarus-Klassen kommen in meinem Fall leider nicht in Frage, der Code muss sich ebenfalls unter Delphi compilieren lassen (was ohnehin schon eine Menge $IFDEF und doppelten Code bedeutet). Außerdem bin ich wohl auch irgendwie zu dumm, den Quellcode der Klasse und wie sie das Drehen anstellt zu finden :stupid:

Was ist den an der (auskommentierten) Methode mit RawImage falsch?

[Edit]Ok, ich hab sie doch noch gefunden, in der intfgraphics.pas, dennoch erbt die Klasse von einem anderen Zweig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz