Einzelnen Beitrag anzeigen

Benutzerbild von 0NyX
0NyX

Registriert seit: 13. Aug 2007
67 Beiträge
 
#4

Re: einfache frage (bestimmt) : Picture zuschneiden

  Alt 29. Aug 2008, 18:48
Zitat von Der_Unwissende:
Hi,
hierfür gibt es zwei sehr interessante Funktionen, BitBlt und StretchBlt. Letzteres funktioniert fast analog zu BitBlt, aber du könntest dein Bild halt auch strecken/stauchen. Für einen Zuschnitt brauchst du das ja eher nicht. Beide finden sich in der Unit Windows. Ein Rechteck kopierst du wie folgt:

Delphi-Quellcode:
var SourceBitmap : TBitmap;
    TargetBitmap : TBitmap;
    Cut : TRect;
...

begin
  // kopiert das Rechteck Cut aus der SourceBitmap in die TargetBitmap
  // Dabei wird die Größe von TargetBitmap der größe des Ausschnitts angepasst.

  TargetBitmap.Width := Cut.Right - Cut.Left;
  TargetBitmap.Height := Cut.Bottom - Cut.Top;

  BitBlt(TargetBitmap.Canvas.Handle, 0, 0, Cut.Right, Cut.Bottom, SourceBitmap.Canvas.Handle, Cut.Left, Cut.Top, SRCCOPY);
  SourceBitmap.Canvas.Refresh;
end;
Mit SaveToFile kannst du dann natürlich auch das TargetBitmap in ein File speichern. Auf die Bitmap eines Image kannst du mit Image.Picture.Bitmap zugreifen.

Gruß Der Unwissende
Guten Abend,

ich wollte soeben die Funktion verwenden, jedoch bekomme ich dabei immer eine Zugrifssverletzung und ich weiß nicht warum
Ich würde mich freuen wenn jemand von euch mal bitte drüber schauen würde, vielen Dank im voraus!

Code:
Delphi-Quellcode:
procedure TfmMain.zuschneiden;
var SourceBitmap : TBitmap;
    TargetBitmap : TBitmap;
    Cut : TRect;
begin
  // kopiert das Rechteck Cut aus der SourceBitmap in die TargetBitmap
  // Dabei wird die Größe von TargetBitmap der größe des Ausschnitts angepasst.
  SourceBitmap.Create;
  TargetBitmap.Create;
  SourceBitmap.LoadFromFile('C:\Users\Davide\Documents\bild1.bmp');
  Cut.Left := 50;
  Cut.Top := 500;
  Cut.Right := 500;
  Cut.Bottom := 100;

  TargetBitmap.Width := Cut.Right - Cut.Left;
  TargetBitmap.Height := Cut.Bottom - Cut.Top;

  BitBlt(TargetBitmap.Canvas.Handle, 0, 0, Cut.Right, Cut.Bottom, SourceBitmap.Canvas.Handle, Cut.Left, Cut.Top, SRCCOPY);
  SourceBitmap.Canvas.Refresh;
  TargetBitmap.SaveToFile('C:\Users\Davide\Documents\bild2.bmp');
end;

MfG 0NyX
"Der Computer rechnet mit allem, nur nicht mit seinem Nutzer!"
  Mit Zitat antworten Zitat