AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia [FMX] Array of Byte (ARGB) schnell in ein TBitmap umwandeln?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von JayZ · begonnen am 23. Okt 2017 · letzter Beitrag vom 24. Okt 2017
 
JayZ

Registriert seit: 14. Mai 2016
34 Beiträge
 
#1

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

  Alt 23. Okt 2017, 23:13
hi liebe community

ich würde gerne wissen ob es möglich ist ein array of byte in ein bitmap umzuwandeln.

das array ist ein dimensional und so aufgebaut dass pro pixel vier mal ein byte elemente gesetzt werden müssen.

man stelle sich vor, dass das bitmap welches ich schlussendlich haben will eine grösse von 3x2 hat, also 3 breit und 2 hoch und mein array sieht folgendermassen aus:
Delphi-Quellcode:
var
  LPixelArray : array of byte;
begin
  LPixelArray = [
   { A , R , G , B }
    255, 0 , 0 , 0, // Element für pixel 1,1
    255, 0 , 0 , 0, // Element für pixel 2,1
    255, 0 , 0 , 0, // Element für pixel 3,1
    255, 0 , 0 , 0, // Element für pixel 1,2
    255, 0 , 0 , 0, // Element für pixel 2,2
    255, 0 , 0 , 0 // Element für pixel 3,2
  ]
end;
Zzr vereinfachung sind hier alle alpha werte 255 und die r g und b werte auf 0 dargestellt. Nun würde ich gerne dieses array so schnell wie es geht in ein TBitmap umwandeln, wenn möglich ohne den weg über Delphi-Referenz durchsuchenTBitmap.Map zu gehen.

ich habe bereits versucht ein TMemoryStream zu erstellen den ich dann mit Delphi-Referenz durchsuchenTMemoryStream.WriteData mit dem array gefüllt habe und anschliessend versucht das stream mit TBitmap.LoadFromStream zu laden was leider gescheitert ist. Der exakte code ist hier: (versuch mit einer grösse von 3 x 1)

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  LBitmap : TBitmap;
  LPixelArray : array of byte;
  LStream : TMemoryStream;
begin
  LPixelArray := [
    255,0,0,0,
    255,255,0,0,
    255,0,0,255
  ];

  LStream := TMemoryStream.Create;
  try
    LStream.WriteData(LPixelArray[0], Length(LPixelArray));
    LBitmap := TBitmap.Create(3, 1);
    try
      LBitmap.LoadFromStream(LStream);
      Image1.Bitmap.Assign(LBitmap);
    finally
      LBitmap.Free;
    end;
  finally
    LStream.Free;
  end;
end;
Und bevor ich was sau doofes mache...................
wäre das überhaupt eine möglichkeit die performanter ist als die pixel später über TBitmap.Map zu verändern?

vielen dank für ihre zeit

liebe grüsse
  Mit Zitat antworten Zitat
 


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 17:35 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