Einzelnen Beitrag anzeigen

TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Bild aus pByte speichern

  Alt 27. Jul 2017, 12:06
Was sagt denn die Doku genau zu pImgMem? Ist das schon ein fertiges Bitmap, also mit den erforderlichen Headern, oder der reine Bildbuffer?
Wieviele Bits sind denn pro Bildpunkt vorhanden? 8-, 16-, 24-, 32-Bit? Kennst du die Größe des Buffers in Bytes? In der Regel bei Bitmap wäre das Höhe mal Breite mal 4.
Ist es wirklich unkomprimiertes Material oder muss man das erst einer JPEG-Dekodierung unterziehen?

Hier mal ein kleines Beispiel. Das Array MyBytes, die per Zufall gefüllt wird, entspricht dann deinen Bildbuffer, wo pImgMem drauf zeigt:

Delphi-Quellcode:
var
  MyStream: TStream;
  MyBitmap: TBitmap;
  MyBytes: TBytes;
  BitmapSize: Integer;
  I: Integer;
  BitmapInfo: TBitmapInfo;
  BitmapFileHeader: TBitmapFileHeader;
  pImgMem: PByte;
  BitmapHeight, BitmapWidth: Integer;
begin
  BitmapWidth := 1 * 1920;
  BitmapHeight := 1 * 1080;
  BitmapSize := BitmapWidth * BitmapHeight * 4;
  SetLength(MyBytes, BitmapSize);

  for I := Low(MyBytes) to High(MyBytes) do
  begin
    MyBytes[I] := RandomRange(Low(Byte), High(Byte));
  end;

  FillChar(BitmapInfo, SizeOf(BitmapInfo), 0);
  BitmapInfo.bmiHeader.biSize := SizeOf(BitmapInfo.bmiHeader);
  BitmapInfo.bmiHeader.biHeight := -BitmapHeight;
  BitmapInfo.bmiHeader.biWidth := BitmapWidth;
  BitmapInfo.bmiHeader.biPlanes := 1;
  BitmapInfo.bmiHeader.biBitCount := 32;

  FillChar(BitmapFileHeader, SizeOf(BitmapFileHeader), 0);
  BitmapFileHeader.bfType := $4D42;

  MyStream := TMemoryStream.Create;
  MyStream.Write(BitmapFileHeader, SizeOf(BitmapFileHeader));
  MyStream.Write(BitmapInfo, SizeOf(BitmapInfo));

  pImgMem := @MyBytes[0];
  MyStream.Write(pImgMem^, BitmapSize);
  MyStream.Position := 0;

  MyBitmap := TBitmap.Create;
  MyBitmap.LoadFromStream(MyStream);

  ForceDirectories('C:\Test');
  MyBitmap.SaveToFile('C:\Test\Test1.bmp');

  MyStream.Free;
  MyBitmap.Free;
end;
  Mit Zitat antworten Zitat