Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bitmap: falsche Farben (https://www.delphipraxis.net/81014-bitmap-falsche-farben.html)

Sko 19. Nov 2006 10:01


Bitmap: falsche Farben
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

ich hab mit meinem JPG-Kompressor mal meinen Guild Wars-Screenshotordner geöffnet. Dieses Spiel speichert Screenshots als Bitmap. Die Bitmaps werden aber in falschen Farben angezeigt. Andere Bitmaps (z.B. von Paint) werden aber richtig angezeigt.
Wenn ich diese Guild-Wars-Bitmaps mit einem anderen Grafikprogramm öffne werden sie auch richtig angezeigt, daher denke ich das der Fehler in meinem Programm liegt.
Die Bitmaps werden in normale Images und in Image32 geladen, daher kanns imho nicht an der Image-Komponente liegen.
Im Anhang mal 2 Bilder - richtig und falsch.

Ich hoffe ihr könnt mir helfen.

SirThornberry 19. Nov 2006 11:05

Re: Bitmap: falsche Farben
 
sieht aus als wären sie in einem Druckformat (nicht rgb).

Der_Unwissende 19. Nov 2006 11:07

Re: Bitmap: falsche Farben
 
Hi,
die Farben sind vertauscht (ok, dass siehst du ja). Du musst hier von deiner RGB Belegung in eine BRG Belegung umwandeln, dann sieht wieder alles richtig aus. Warum der das falsch macht weiß ich nicht.

Sko 19. Nov 2006 14:58

Re: Bitmap: falsche Farben
 
Zitat:

Zitat von Der_Unwissende
Hi,
die Farben sind vertauscht (ok, dass siehst du ja). Du musst hier von deiner RGB Belegung in eine BRG Belegung umwandeln, dann sieht wieder alles richtig aus. Warum der das falsch macht weiß ich nicht.

Ja, das hab ich gesehen, das Problem ist jetzt, wie soll ich erkennen ob ein Bild nun RGB, BRG oder sonstwas ist?

[Edit]Ich bin bis Mittwoch weg und weis nicht ob ich da Internet hab, nicht wundern wenn ich nicht gleich antworte[/Edit]

Sko 21. Nov 2006 11:30

Re: Bitmap: falsche Farben
 
*push*
hat keiner ne lösung?

OldGrumpy 21. Nov 2006 11:33

Re: Bitmap: falsche Farben
 
Kannst du das Bild von dem der Screenshot stammt mal hier anhängen? Dann würd ich mal in den Jpg-Header schauen.

Sko 21. Nov 2006 12:37

Re: Bitmap: falsche Farben
 
das Original ist ein Bitmap, ich werds zuhause mal packen und hochladen

Sko 21. Nov 2006 19:02

Re: Bitmap: falsche Farben
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, hier ist das Originalbild, ist leider trotz Packen etwas groß.

Phantom1 21. Nov 2006 23:21

Re: Bitmap: falsche Farben
 
Ich hab mir mal dein Bitmap angeschaut und die Header sind eigentlich korrekt und auch die Farbwerte sind richtig abgespeichert in RGB, aber Delphi beachtet offenbar nicht die bfOffBits im TBitmapFileHeader. Denn zwischen dem TBitmapInfoHeader und den Farbdaten liegen bei deinem Bitmap noch 2 leere Bytes. Diese 2 Byte liest Delphi als Farbdaten ein, wodurch der fehler entsteht.

Du hast jetzt mehrere möglichkeiten: Du schreibst dir eine eigene Prozedur zum einlesen des Bitmaps oder du änderst die Bitmaps indem du die 2 leeren Bytes entfernst bevor sie in Delphi eingelesen werden. Die 2te möglichkeit (das entfernen der leeren Bytes) habe ich mal übernommen, hier der Code:
Delphi-Quellcode:
procedure BitmapVerify(FileName: TFileName);
var
  fs: TFileStream;
  fh: TBitmapFileHeader;
  ih: TBitmapInfoHeader;
  Offset: DWORD;
  Buffer: Pointer;
begin
  fs:=TFileStream.Create(FileName, fmOpenReadWrite);
  try
    fs.Position:=0;
    fs.ReadBuffer(fh, SizeOf(fh));
    fs.ReadBuffer(ih, SizeOf(ih));
    Offset:=fh.bfOffBits-(SizeOf(TBitmapFileHeader)+SizeOf(TBitmapInfoHeader));
    if Offset>0 then begin
      GetMem(Buffer, ih.biSizeImage);
      try
        fs.Position:=fh.bfOffBits;
        fs.ReadBuffer(Buffer^, ih.biSizeImage);
        fh.bfSize:=fh.bfSize-Offset;
        fh.bfOffBits:=fh.bfOffBits-Offset;
        fs.Position:=0;
        fs.WriteBuffer(fh, SizeOf(fh));
        fs.Position:=fh.bfOffBits;
        fs.WriteBuffer(Buffer^, ih.biSizeImage);
        fs.Size:=fh.bfSize;
      finally
        FreeMem(Buffer, ih.biSizeImage);
      end;
    end;
  finally
    fs.Free;
  end;
end;
mfg

Sko 21. Nov 2006 23:34

Re: Bitmap: falsche Farben
 
Wow, vielen Dank, funktioniert super *freu* :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:50 Uhr.
Seite 1 von 2  1 2   

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