![]() |
GraphicEx Tiff m.256 Farben laden falsche Farbe
Hallo,
Ich versuche mit dem aktuellen Stand von GraphicEx eine 256 Farb-Tiff Datei zu laden. Testdatei: ![]()
Delphi-Quellcode:
Das Problem ist das die Hintergrundfarbe nicht korrekt aus der Palette gelesen wird.
procedure TForm1.Button1Click(Sender: TObject);
var I : integer; Picture : TPicture; begin if OpenPictureDialog1.Execute then with OpenPictureDialog1.Files do for I := 0 to Count - 1 do begin Picture := TPicture.Create; try Picture.LoadFromFile(Strings[I]); if not (Picture.Graphic is TBitmap) then BEGIN Picture.Graphic.Transparent := True; stampimage.Width := Picture.Width; stampimage.Height := Picture.Height; stampimageW := stampimage.Width; stampimageH := stampimage.Height; stampimage.Canvas.Draw(0, 0, Picture.Graphic); END Else BEGIN Picture.Bitmap.Transparent := True; showmessage(IntToStr(Picture.Bitmap.canvas.pixels[0,0])); Picture.Bitmap.TransparentColor := Picture.Bitmap.canvas.pixels[0,0]; // showmessage(IntToStr(clAqua)); // Picture.Bitmap.TransparentColor := clAqua; Picture.Bitmap.TransparentMode := tmFixed; // Picture.Bitmap.TransparentMode := tmAuto; stampimage.Width := Picture.Width; stampimage.Height := Picture.Height; stampimageW := stampimage.Width; stampimageH := stampimage.Height; stampimage.Assign(Picture.Bitmap); END; except // no exceptions please, just ignore invalid images Application.ProcessMessages; end; end; end; Statt clAqua=16776960 hat der Hintergrund 16711168 also statt RGB 0,255,255 ist es 0,254,254. Mit BMP,PNG in 256 Farben usw. ist das kein Problem. Edit: Weitere Tests zeigen das die RGB-Werte immer um 1 kleiner sind. Nur 0 bleibt 0. |
Re: GraphicEx Tiff m.256 Farben laden falsche Farbe
Was kann man tun, wenn man ein Problem mit einer solchen OpenSource-Lib hat?
1. Selber in den Sourcen suchen. Die GraphicEx ist nicht gerade einfach zu durchblicken. Bislang habe ich es nicht verstanden wo die Tiff-Palette gelesen und ausgewertet wird. (Und der RGB-Werte falsch umgerechnet wird) 2. Forum-Post hier und in: ![]() Thema vielleicht zu speziell? 3. Mail an den Author: ![]() Bislang ohne Antwort. 4. Versuch ein Ticket im Bug-Tracker einzugeben: ![]() Versuch einen neuen Account zu erstellen schlägt mit Fehlermeldung fehl. Ich möchte aber deutlich machen das die GraphicEx ein sehr gute Biblithek ist und es sehr freundlich ist diese der Delphi-Community als Open-Source zur Verfügung zu stellen. Was bleibt einem mit einem Problem dann: Selber weiter den Fehler suchen? Andere Kontakt-Möglichkeiten nutzen? Wechseln auf eine andere Import-Biliothek (Kommerziell)? Andere Ideen? Grüsse, Hans-Peter |
Re: GraphicEx Tiff m.256 Farben laden falsche Farbe
Ohne das genauer zu Prüfen ist mir in der Unit GraphicColor die Verwendung der Funktion "MulDiv16" aufgefallen.
Scheinbar wird diese an vielen Stellen verwendet um einen 16Bit-Wert gerundet als 8Bit-Wert abzubilden. z.B. MulDiv16(Value, 255, 65535). Die TIFF-Palette nutzt 16-Bit für jeweils Rot, Grün und Blau. Vermulich wurden beim Speichern der Datei die jeweiligen Werte von RGB jeweils mit 256 multipliziert. clAqua = 16776960 = $FF $FF $00 wurde als $FF00 $FF00 $0000 gespeichert. ($FF00 * 255) div 65535 = $FE Eventuell genügt es die Funktion TColorManager.ComponentScaleConvert anzupassen: Result := Value shr 8; |
Re: GraphicEx Tiff m.256 Farben laden falsche Farbe
Herzlichen Dank für den Tip!
:thumb: Das funktioniert mit den Testdaten und gibt jetzt den richtigen Wert zurück. Meine einzigen Bedenken sind jetzt noch ob die Änderung irgenwelchen Seiten-Effekte auf die anderen unterstützten Datenformate hat, da die Funktion ComponentScaleConvert ja an einigen Stellen verwendet wird. Muss mal weiter testen. :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 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