Thema: Delphi Bitmap: falsche Farben

Einzelnen Beitrag anzeigen

Benutzerbild von Sko
Sko

Registriert seit: 11. Sep 2005
327 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Bitmap: falsche Farben

  Alt 22. Nov 2006, 10:50
Hallo, danke, ich hab auch was gebastelt, was auf dem ersten Code basiert, war doch einfacher als gedacht, ich hatte nur vergessen die Position des Streams auf 0 zu setzen vor dem Laden

Das sieht so aus:
Delphi-Quellcode:
unit BMPLaden;

interface

uses Windows, Classes, SysUtils, GR32, Graphics;

procedure BitmapLaden(Datei: TFileName; Bitmap: TBitmap); overload;
procedure BitmapLaden(Datei: TFileName; Bitmap: TBitmap32); overload;

implementation

function BitmapVerify(FileName: TFileName): TMemoryStream;
var
  fh: TBitmapFileHeader;
  ih: TBitmapInfoHeader;
  Offset: DWORD;
  Buffer: Pointer;
begin
  result := TMemoryStream.Create;
  result.LoadFromFile(FileName);
  try
    result.Position:=0;
    result.ReadBuffer(fh, SizeOf(fh));
    result.ReadBuffer(ih, SizeOf(ih));
    Offset:=fh.bfOffBits-(SizeOf(TBitmapFileHeader)+SizeOf(TBitmapInfoHeader));
    if Offset>0 then begin
      GetMem(Buffer, ih.biSizeImage);
      try
        result.Position:=fh.bfOffBits;
        result.ReadBuffer(Buffer^, ih.biSizeImage);
        fh.bfSize:=fh.bfSize-Offset;
        fh.bfOffBits:=fh.bfOffBits-Offset;
        result.Position:=0;
        result.WriteBuffer(fh, SizeOf(fh));
        result.Position:=fh.bfOffBits;
        result.WriteBuffer(Buffer^, ih.biSizeImage);
        result.Size:=fh.bfSize;
      finally
        FreeMem(Buffer, ih.biSizeImage);
      end;
    end;
  finally
    result.Position := 0; //<---hatte ich vergessen^^
  end;
end;


procedure BitmapLaden(Datei: TFileName; Bitmap: TBitmap);
var
  BitmStream: TMemoryStream;
begin
  BitmStream := BitmapVerify(Datei);
  Bitmap.LoadFromStream(BitmStream);
  FreeAndNil(BitmStream);
end;

procedure BitmapLaden(Datei: TFileName; Bitmap: TBitmap32);
var
  BitmStream: TMemoryStream;
begin
  BitmStream := BitmapVerify(Datei);
  Bitmap.LoadFromStream(BitmStream);
  FreeAndNil(BitmStream);
end;

end.
Ich hab das noch nicht mit anderen Bitmaps testen können, weil ich keine Bitmaps mit weniger als 24 bit habe bei denen das Problem auftaucht.

Vielen Dank nochmal für deine Hilfe
MfG Sko
Zitat von Phoenix:
[OT]Phoenix guckt in die Glaskugel, zuckt mit den Flügelspitzen, krächzt etwas von wegen 'Boden' und 'Scherben' und schubbst die Kugel in Richtung Tischkante.[/OT]
Rockbox
  Mit Zitat antworten Zitat