Einzelnen Beitrag anzeigen

beatles

Registriert seit: 17. Jan 2004
24 Beiträge
 
#1

aus TImage (gestretcht) ohne Verluste zuschneiden / kopieren

  Alt 27. Dez 2010, 10:05
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.
  Mit Zitat antworten Zitat