Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   aus TImage (gestretcht) ohne Verluste zuschneiden / kopieren (https://www.delphipraxis.net/157051-aus-timage-gestretcht-ohne-verluste-zuschneiden-kopieren.html)

beatles 27. Dez 2010 09:05

aus TImage (gestretcht) ohne Verluste zuschneiden / kopieren
 
Hallo,

In einem TImage lade ich ein Bild um es zuzuschneiden.
So lange wie das Bild nicht die Größe des TImage überschreitet und ich Stretch nicht auf true setzen muss, funktionieren die prozeduren CopyRect oder bltbit einwandfrei, da sie die Bildimformationen aus dem Image.Canvas holen.

Ist das Bild wesentlich größer, gibt es schon Probleme. Dises verlieren schlichtweg an Qualität wenn sie vorher gestretcht wurde. Ich bräuchte also die Information aus den Image.Picture.Canvas, da diese nicht gestetcht wird. Nur ist diese eben nicht sichtbar. Das "Auswahlfenster" befindet sich aber auf das sichtbare und eben gestretchte Element. Ich müsste also die Koordinaten des Auswahl-Rechteck's irgendwie vom Image.canvas auf Image.picture.Canvas übertragen. Nur wie?

Mein bisheriger Code:

Delphi-Quellcode:
procedure TForm7.sButton2Click(Sender: TObject);
var
  Tmp_Bmp_dest_32:TBitmap32;
  cast:TRect;
begin
  Tmp_Bmp_dest_32:=TBitmap32.Create;
  Tmp_Bmp_dest_32.Height:=auswahl.Height;
  Tmp_Bmp_dest_32.Width:=auswahl.Width;
  cast.Left:=auswahl.Left+2;
  cast.Top:=auswahl.Top+2;
  cast.Right:=auswahl.Left + auswahl.Width-2;
  cast.Bottom:= auswahl.Top + auswahl.Height-2;
  Tmp_Bmp_dest_32.Canvas.CopyMode:=cmSrcCopy;
  Tmp_Bmp_dest_32.Canvas.CopyRect(Tmp_Bmp_dest_32.ClipRect,im32.Canvas,cast);
 

  //Hier wäre das Bild ohne Verlust kopiert aber der Inhalt wurde von einer
  //anderen Position kopiert, WENN Image getretcht ist.
  //Tmp_Bmp_dest_32.Canvas.CopyRect(Tmp_Bmp_dest_32.ClipRect,im32.picture.Canvas,cast);

  im32.Bitmap.Assign(Tmp_Bmp_dest_32);
  auswahl.Visible:= False;
  Tmp_Bmp_dest_32.Free;
  sButton2.Enabled:=False;
end;
Gibt es eine andere Möglichkeit?


Danke schon mal im Voraus.

Bummi 27. Dez 2010 11:03

AW: aus TImage (gestretcht) ohne Verluste zuschneiden / kopieren
 
Mach Dir eine Umrechenfunktion der Du Image als Parameter mitgibst und die ein Rect als Ergebnis zurückgibt.
Hier prüfen ob Icon assigned ist
oder Graphic assigend
oder Bitmap assigend
vom jeweiligen Element die Höhe und Breite ziehen und Result aus dem Paramter Image.Width/Height zu den gefunden Werten umrechnen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:51 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