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
TBitmap.Map zu gehen.
ich habe bereits versucht ein TMemoryStream zu erstellen den ich dann mit
TMemoryStream.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