AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi einfache frage (bestimmt) : Picture zuschneiden
Thema durchsuchen
Ansicht
Themen-Optionen

einfache frage (bestimmt) : Picture zuschneiden

Ein Thema von simlei · begonnen am 2. Apr 2006 · letzter Beitrag vom 29. Aug 2008
Antwort Antwort
simlei

Registriert seit: 23. Nov 2005
119 Beiträge
 
Delphi 7 Professional
 
#1

einfache frage (bestimmt) : Picture zuschneiden

  Alt 2. Apr 2006, 01:39
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!
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: einfache frage (bestimmt) : Picture zuschneiden

  Alt 2. Apr 2006, 12:14
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: einfache frage (bestimmt) : Picture zuschneiden

  Alt 2. Apr 2006, 13:38
Beim Berechnen von Breite und Höhe bitte jeweils noch einen Pixel dazuzählen - ist besser so.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von 0NyX
0NyX

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

Re: einfache frage (bestimmt) : Picture zuschneiden

  Alt 29. Aug 2008, 19: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
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: einfache frage (bestimmt) : Picture zuschneiden

  Alt 29. Aug 2008, 20:07
Du musst die Bitmaps noch erstellen:

Delphi-Quellcode:
SourceBitmap:= TBitmap.Create;
  TargetBitmap:= TBitmap.Create;
Edit:
und freigeben nicht vergessen, deshalb besser
in einem try finally block, etwa so:

Delphi-Quellcode:
  SourceBitmap:= TBitmap.Create;
  TargetBitmap:= TBitmap.Create;
  try
    // Hier was tun...
  finally
    SourceBitmap.Free;
    TargetBitmap.Free;
  end;
Gruß
Jürgen
Jürgen Höfs
  Mit Zitat antworten Zitat
Benutzerbild von 0NyX
0NyX

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

Re: einfache frage (bestimmt) : Picture zuschneiden

  Alt 29. Aug 2008, 20:22
Guten Abend Jürgen,

vielen Dank für deine Hilfe

Jedoch tritt jetzt ein neuer Fehler auf:
Zitat:
Im Projekt ist eine Exzeption der Klasse EOutOfRessources aufgetreten.
Meldung: Falscher Parameter


Gruß David
"Der Computer rechnet mit allem, nur nicht mit seinem Nutzer!"
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: einfache frage (bestimmt) : Picture zuschneiden

  Alt 29. Aug 2008, 20:23
Und in welcher Zeile?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von 0NyX
0NyX

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

Re: einfache frage (bestimmt) : Picture zuschneiden

  Alt 29. Aug 2008, 20:39
Zitat von mkinzler:
Und in welcher Zeile?
In dieser Zeile:
TargetBitmap.Height := Cut.Bottom - Cut.Top;
"Der Computer rechnet mit allem, nur nicht mit seinem Nutzer!"
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: einfache frage (bestimmt) : Picture zuschneiden

  Alt 29. Aug 2008, 20:41
Ist ja auch negativ!
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von 0NyX
0NyX

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

Re: einfache frage (bestimmt) : Picture zuschneiden

  Alt 29. Aug 2008, 20:48
ahja stimmt :-[

Schuldige

Vielen Dank für eure Hilfe!

Klappt nun alles!
"Der Computer rechnet mit allem, nur nicht mit seinem Nutzer!"
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 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