![]() |
GDI+: Regions im gespeicherten File nicht vorhanden
Hallo Gemeinde!
Ich nutze (eigentlich mit Begeisterung) die GDI+ von ![]() 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:
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.
Graphics.Clip := Region; // Clipping-Region setzen
Graphics.DrawImage(Bitmap, 0, 0, Bitmap.Width, Bitmap.Height); 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 |
AW: GDI+: Regions im gespeicherten File nicht vorhanden
Hallo,
zeig mal etwas mehr Code, ich habe da eine Vermutung, aber ohne mehr Infos ist das eher ein Raten. Gruß xaromz |
AW: GDI+: Regions im gespeicherten File nicht vorhanden
Hallo!
Super, dass Du es Dir näher anschauen möchtest. Ich hoffe Du steigst durch:
Delphi-Quellcode:
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.
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 Vielen Dank Gruß Jazzman |
AW: GDI+: Regions im gespeicherten File nicht vorhanden
Hallo,
mein Verdacht bestätigt sich: Du wendest die Clippingregion zum Zeichnen auf Deinem Form an, aber nicht auf Dein Bitmap. Gruß xaromz |
AW: GDI+: Regions im gespeicherten File nicht vorhanden
:shock: Magst Du das ein wenig erläutern?
Oder: Wie wende ich denn den Clipping-Bereich auf mein Bitmap an? Danke! Jazzman |
AW: GDI+: Regions im gespeicherten File nicht vorhanden
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 |
AW: GDI+: Regions im gespeicherten File nicht vorhanden
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): Zitat:
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 |
AW: GDI+: Regions im gespeicherten File nicht vorhanden
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:
Gruß
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 xaromz |
AW: GDI+: Regions im gespeicherten File nicht vorhanden
Super, vielen Dank! :-D
Das sieht nach einer guten Lösung aus -- werde es ausprobieren. Lieben Danke & Gruß Jazzman |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:46 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