AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi GraphicEx Tiff m.256 Farben laden falsche Farbe
Thema durchsuchen
Ansicht
Themen-Optionen

GraphicEx Tiff m.256 Farben laden falsche Farbe

Ein Thema von HPW · begonnen am 11. Feb 2009 · letzter Beitrag vom 18. Feb 2009
Antwort Antwort
HPW

Registriert seit: 28. Feb 2003
160 Beiträge
 
Delphi 7 Professional
 
#1

GraphicEx Tiff m.256 Farben laden falsche Farbe

  Alt 11. Feb 2009, 19:49
Hallo,

Ich versuche mit dem aktuellen Stand von GraphicEx eine 256 Farb-Tiff Datei zu laden.

Testdatei: http://www.hpwsoft.de/Wolf1.zip

Delphi-Quellcode:
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;
Das Problem ist das die Hintergrundfarbe nicht korrekt aus der Palette gelesen wird.
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.
Hans-Peter
  Mit Zitat antworten Zitat
HPW

Registriert seit: 28. Feb 2003
160 Beiträge
 
Delphi 7 Professional
 
#2

Re: GraphicEx Tiff m.256 Farben laden falsche Farbe

  Alt 15. Feb 2009, 09:46
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:

http://support.soft-gems.net/forums/...pic.php?t=2213

Thema vielleicht zu speziell?

3. Mail an den Author:

http://www.soft-gems.net/index.php?o...ntact&Itemid=3

Bislang ohne Antwort.

4. Versuch ein Ticket im Bug-Tracker einzugeben:

http://www.soft-gems.net/support/mantis/login_page.php

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
Hans-Peter
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#3

Re: GraphicEx Tiff m.256 Farben laden falsche Farbe

  Alt 18. Feb 2009, 10:37
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;
  Mit Zitat antworten Zitat
HPW

Registriert seit: 28. Feb 2003
160 Beiträge
 
Delphi 7 Professional
 
#4

Re: GraphicEx Tiff m.256 Farben laden falsche Farbe

  Alt 18. Feb 2009, 16:32
Herzlichen Dank für den Tip!

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.

Hans-Peter
  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 01:26 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