AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bitmap: falsche Farben

Bitmap: falsche Farben

Ein Thema von Sko · begonnen am 19. Nov 2006 · letzter Beitrag vom 3. Dez 2006
 
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
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:33 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