Ich weis natürlich nicht, in welcher Anordnung VB die Bytes des Bildes schreibt und ob in 24 bit, 32 bit oder sonstiger Farbtiefe, aber dies hier wäre ein Ansatz (geht eventuell auch einfacher):
Delphi-Quellcode:
procedure Graphic2Bmp(AGraphic : TGraphic; var ABmp: TBitmap);
begin
ABmp.PixelFormat := pf24bit;
ABmp.Height := AGraphic.Height;
ABmp.Width := AGraphic.Width;
AGraphic.Transparent := true;
ABmp.Canvas.Draw(0, 0, AGraphic);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
APic: TPicture;
ABmp: TBitmap;
BPic: array of byte;
PicStream: TMemoryStream;
begin
APic := TPicture.Create;
ABmp := TBitmap.Create;
PicStream := TMemoryStream.Create;
try
APic.LoadFromFile('F:\image.gif');
If APic.Graphic is TBitmap then
ABmp.Assign(APic.Bitmap)
else
Graphic2Bmp(APic.Graphic, ABmp);
// Byte-Array initialisieren
SetLength(BPic, ABmp.Width * ABmp.Height * (24 div 8));
// Z.B. ABmp.ScanLine, ABmp.Canvas.Pixels oder ABmp.SaveToStream()
// für Bytes verwenden
ABmp.SaveToStream(PicStream);
PicStream.Read(BPic[0], length(BPic));
finally
ABmp.Free;
APic.Free;
PicStream.Free;
end;
end;
Delphi hat für Bilder unter anderem folgenede Klassen:
- TImage ist für die Darstellung auf dem Bildschirm zuständig
- TPicture ist eine "Oberklasse", mit der man z.B. ein Bild aus einer beliebigen Datei über LoadFromFile() laden kann.
- TGraphic ist die Klasse, von der alle Bildsubklassen abstammen.
- TBitmap ist eine Klasse, wie der Name schon sagt, um ausschliesslich Bitmaps zu verarbeiten.
Es gibt für jedes Bildformat noch weitere Klassen (z.B. TJPEGImage, TGIFImage, TPNGImage), deren Units (z.B. JPEGImage, GIFImage, PNGImage) müssen meist noch extra in die uses eingetragen werden, damit solche Bilder per LoadFromFile() geladen werden können. JPEGImage ist bei neueren Delphi-Versionen dabei, GIFImage und PNGImage musst du dir im Internet raussuchen.