![]() |
einfache frage (bestimmt) : Picture zuschneiden
Hallo!
Die Frage ist, wie ich ein als Image gespeichertes Bild zuschneide, sodass eben nur noch ein Rechteck aus diesem Bild übrigbleibt; was ich dann auch als Datei abspeichern kann. Danke schonmal! |
Re: einfache frage (bestimmt) : Picture zuschneiden
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:
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.
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; Gruß Der Unwissende |
Re: einfache frage (bestimmt) : Picture zuschneiden
Beim Berechnen von Breite und Höhe bitte jeweils noch einen Pixel dazuzählen - ist besser so.
Grüße vom marabu |
Re: einfache frage (bestimmt) : Picture zuschneiden
Zitat:
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 |
Re: einfache frage (bestimmt) : Picture zuschneiden
Du musst die Bitmaps noch erstellen:
Delphi-Quellcode:
Edit:
SourceBitmap:= TBitmap.Create;
TargetBitmap:= TBitmap.Create; und freigeben nicht vergessen, deshalb besser in einem try finally block, etwa so:
Delphi-Quellcode:
Gruß
SourceBitmap:= TBitmap.Create;
TargetBitmap:= TBitmap.Create; try // Hier was tun... finally SourceBitmap.Free; TargetBitmap.Free; end; Jürgen |
Re: einfache frage (bestimmt) : Picture zuschneiden
Guten Abend Jürgen,
vielen Dank für deine Hilfe :) Jedoch tritt jetzt ein neuer Fehler auf: Zitat:
Gruß David |
Re: einfache frage (bestimmt) : Picture zuschneiden
Und in welcher Zeile?
|
Re: einfache frage (bestimmt) : Picture zuschneiden
Zitat:
Delphi-Quellcode:
TargetBitmap.Height := Cut.Bottom - Cut.Top;
|
Re: einfache frage (bestimmt) : Picture zuschneiden
Ist ja auch negativ!
|
Re: einfache frage (bestimmt) : Picture zuschneiden
ahja stimmt :-[
Schuldige :( Vielen Dank für eure Hilfe! Klappt nun alles! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz