Einzelnen Beitrag anzeigen

Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: [FMX] Array of Byte (ARGB) schnell in ein TBitmap umwandeln?

  Alt 24. Okt 2017, 00:33
Es wird sich wohl nicht vermeiden lassen, die Daten zu kopieren. Ich denke, das schnellste wäre, einfach das Bitmap mit der entsprechenden Größe und dem entsprechenden Pixelformat zu erzeugen, und dann mittels Scanline die Daten aus dem Array Zeile für Zeile rüberzukopieren.

Dein Ansatz mit dem MemoryStream kann so nicht funktionieren, weil der Bitmap-Header fehlt. Aber auch wenn du den Bitmap-Header hinzufügen würdest, wäre es eher kontraproduktiv, da so erst die Daten vom Array in den MemoryStream kopiert werden müssten und anschließend noch mal vom MemoryStream in das Bitmap. Also eine Kopie umsonst.

Delphi-Quellcode:
procedure PixelArrayToBitmap(const PixelArray: array of Byte; const Width: Integer; const Height: Integer; Bitmap: TBitmap)
var
  y: integer;
begin
  Bitmap.PixelFormat := pf32bit;
  Bitmap.SetSize(Width, Height);

  for y := 0 to Height - 1 do
    Move(PixelArray[Width*y], Bitmap.Scanline[y]^, 4*Width);
end;
Versuch es mal damit. Das sind aber gerade die ersten Zeilen Delphi, die ich seit Ewigkeiten schreibe, deshalb ohne Gewähr.
  Mit Zitat antworten Zitat