AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia GDI+: Regions im gespeicherten File nicht vorhanden
Thema durchsuchen
Ansicht
Themen-Optionen

GDI+: Regions im gespeicherten File nicht vorhanden

Ein Thema von Jazzman_Marburg · begonnen am 24. Jun 2011 · letzter Beitrag vom 25. Jun 2011
Antwort Antwort
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#1

GDI+: Regions im gespeicherten File nicht vorhanden

  Alt 24. Jun 2011, 13:00
Hallo Gemeinde!
Ich nutze (eigentlich mit Begeisterung) die GDI+ von Erik. Nun ereilt mich aber ein Problem mit Bitmap.Save('Output.png', TGPImageFormat.Png): Die zuvor eingerichteten Regions werden beim sichern nicht berücksichtigt!
Ich habe also Regions (vom Typ IGPRegion) eingerichtet, und mit Region.Exclude(myPaths) diesen Bereich der Bitmap (IGPBitmap) für Veränderungen (Farbe, Helligkeit etc.) gesperrt. Wenn ich nun mit Bitmap.ApplyEffect(myEffect) die Bitmap verändere, sehe ich auf dem Monitor nach
Delphi-Quellcode:
    Graphics.Clip := Region; // Clipping-Region setzen
    Graphics.DrawImage(Bitmap, 0, 0, Bitmap.Width, Bitmap.Height);
dass die Regions von den Änderungen ausgenommen sind. Prima. Wenn ich nun genau dieses Bitmap speichere, ist im File sehr wohl alles geändert. D.h. die Regions wurden nicht berücksichtigt.

Jemand eine Idee, weshalb auf dem Monitor alles gut ist, aber beim speichern die Regions futsch gehen?

Bin für jeden Hinweis dankbar!

Gruß
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#2

AW: GDI+: Regions im gespeicherten File nicht vorhanden

  Alt 24. Jun 2011, 13:09
Hallo,

zeig mal etwas mehr Code, ich habe da eine Vermutung, aber ohne mehr Infos ist das eher ein Raten.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#3

AW: GDI+: Regions im gespeicherten File nicht vorhanden

  Alt 24. Jun 2011, 13:30
Hallo!
Super, dass Du es Dir näher anschauen möchtest.
Ich hoffe Du steigst durch:
Delphi-Quellcode:
VAR
  Bitmap : IGPBitmap;
  Graphics : IGPGraphics;
  myPaths : IGPGraphicsPath;
  Region : IGPRegion;
...

  Bitmap := TGPBitmap.Create(Filename);
  Graphics := TGPGraphics.Create(Main_Form.MainImage.Canvas.Handle);
  myPaths := XML2Path(aXMLDoc); // bastelt aus XML-Document paths
  Region := TGPRegion.Create;
  Region.Exclude(myPaths); // Clipping-Region aus den Paths

  Bitmap.ApplyEffect(HSL_GDIp); // irgendein Farb-Effekt applizieren

  Graphics.Clip := Region; // Clipping-Region setzen
  Graphics.DrawImage(Bitmap, 0, 0, Bitmap.Width, Bitmap.Height);
  Main_Form.MainImage.Refresh; // hier ist noch alles ok: Regions nicht eingefärbt
...

  Bitmap.Save(SaveImage.Dialog.FileName, TGPImageFormat.PNG); // im png-File ist alles eingefärbt
Also nach "Graphics.DrawImage(Bitmap, ...);" sieht alles super aus: Die ausgestanzten Regions sind nicht eingefärbt. Aber im File danach ist es so, als ob ich mit Regions nie was gemacht hätte -- der ApplyEffect ist auf alles appliziert worden.

Vielen Dank
Gruß
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#4

AW: GDI+: Regions im gespeicherten File nicht vorhanden

  Alt 24. Jun 2011, 14:22
Hallo,

mein Verdacht bestätigt sich:
Du wendest die Clippingregion zum Zeichnen auf Deinem Form an, aber nicht auf Dein Bitmap.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#5

AW: GDI+: Regions im gespeicherten File nicht vorhanden

  Alt 24. Jun 2011, 14:54
Magst Du das ein wenig erläutern?

Oder: Wie wende ich denn den Clipping-Bereich auf mein Bitmap an?

Danke!

Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#6

AW: GDI+: Regions im gespeicherten File nicht vorhanden

  Alt 24. Jun 2011, 16:54
Hallo,

momentan wendest Du Deinen Farbeffekt auf das gesamte Bitmap an und zeichnest dann das Bitmap auf Graphic (Deinen Wrapper für ein TImage oder ähnliches). Erst bei diesem Zeichenvorgang verwendest Du Clipping, deshalb siehst Du auch nur den geclippten Ausschnitt von Deinem Bitmap, obwohl sich der Farbeffekt auf das gesamte Bitmap bezieht.

Nun zur Lösung:
Falls die Effekte Regions beachten, musst Du die Clippingregion auf Dein Bitmap anwenden, bevor Du den Effekt anwendest.
Falls das nicht funktioniert bleibt Dir nur die Möglichkeit, mit einem Hilfsbitmap zu arbeiten: Die klonst Dein Bitmap, wendest dann den Effekt beim geklonten Bitmap an, weist dann Deinem Bitmap die Clippingregion zu und malst das Hilfsbitmap auf Dein Original.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#7

AW: GDI+: Regions im gespeicherten File nicht vorhanden

  Alt 24. Jun 2011, 17:23
Hallo!
Vielen Dank für Deine Antwort!
Aber -- und ich vermute ich stehe auf dem Schlauch -- beide Lösungswege laufen auf ein- und den selben Punkt hinaus (Hervorhebung von mir):

Nun zur Lösung:
Falls die Effekte Regions beachten, musst Du die Clippingregion auf Dein Bitmap anwenden, bevor Du den Effekt anwendest.
Falls das nicht funktioniert bleibt Dir nur die Möglichkeit, mit einem Hilfsbitmap zu arbeiten: Die klonst Dein Bitmap, wendest dann den Effekt beim geklonten Bitmap an, weist dann Deinem Bitmap die Clippingregion zu und malst das Hilfsbitmap auf Dein Original.
xaromz
"Weise Deinem Bitmap den Clipping-Bereich zu" -- und ich frage eben: "Wie weise ich dem Bitmap einen Clipping-Bereich zu?

Kannst Du mein Problem verstehen? Egal wie ich es drehe oder wende, es läuft darauf hinaus dem Bitmap einen Clipping-Bereich zuzuweisen -- und ich verstehe nicht wie.

Deine Analyse scheint mir ganz korrekt zu: Die Farbeffekte weise ich dem kompletten Bitmap zu, das Clipping hingegen nur beim Zeichnen. Aber ich verstehe nicht, wie ich das Clipping vorher dem gesamten Bitmap zuweisen soll. Das Bitmap-Objekt hat kein "Clip" oder "Region" im Gegensatz zum Graphic-Objekt.

(Das ist keine Störrigkeit, ich verstehe nur nicht, wie ich es tun sollte).

Lieben Dank
Gruß
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#8

AW: GDI+: Regions im gespeicherten File nicht vorhanden

  Alt 24. Jun 2011, 18:13
Hallo,

sowas habe ich mir schon gedacht, deshalb habe ich die zweite Lösung mit aufgenommen. Um ein Bitmap bearbeiten zu können, musst Du Dir ein Graphic-Objekt holen. Diesem kannst Du dann das Clippingobjekt zuweisen. Hier mal aus dem Kopf:
Delphi-Quellcode:
VAR
   Bitmap : IGPBitmap;
   HelpBitmap: IGPBitmap;
   Graphics : IGPGraphics;
   myPaths : IGPGraphicsPath;
   Region : IGPRegion;
 ...

   Bitmap := TGPBitmap.Create(Filename);
   HelpBitmap = Bitmap.Clone(); // Hilfsbitmap erzeugen (ich hoffe, es gibt die Methode Clone)
   HelpBitmap.ApplyEffect(HSL_GDIp); // irgendein Farb-Effekt applizieren
   Graphics = TGPGraphics.Create(Bitmap); // Graphic erzeugen
   
   myPaths := XML2Path(aXMLDoc); // bastelt aus XML-Document paths
   Region := TGPRegion.Create;
   Region.Exclude(myPaths); // Clipping-Region aus den Paths
   Graphics.Clip := Region; // Clipping-Region setzen

   Graphics.DrawImage(HelpBitmap, 0, 0, Bitmap.Width, Bitmap.Height); //Hilfsbitmap malen
Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#9

AW: GDI+: Regions im gespeicherten File nicht vorhanden

  Alt 25. Jun 2011, 11:59
Super, vielen Dank!

Das sieht nach einer guten Lösung aus -- werde es ausprobieren.

Lieben Danke & Gruß
Jazzman
--- Delphi XE Starter, Windows 8 ---
  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 13:30 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