Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Prism image in bytearray umwandeln ? (https://www.delphipraxis.net/48158-image-bytearray-umwandeln.html)

wabux 21. Jun 2005 14:40


image in bytearray umwandeln ?
 
Hallo,

ich möchte ein image in ein array of byte umwandeln nach dieser Vorlage in VB

Private Overloads Function ImageToBytes( ByVal Img As System.Drawing.Image ) As Byte()
' Konvertiert ein Image-Objekt in ein Byte-Array
Dim IC As New ImageConverter
' Mithilfe des ImageConverter-Objekts ein Image
' in ein Byte-Array überführen
ImageToBytes = CType(IC.ConvertTo( Img, GetType(Byte()) ), Byte())
End Function
-------------------------------------------------------

Delphi-Quellcode:
was mache ich hier falsch?

var bmp : image;
    btmp : bitmap;
    pic : array of byte;
    ic  : imageConverter;
begin
   btmp := bitmap.Create('F:\image.gif');

   ic  := imageConverter.Create;
   result := byte(ic.Convertto(bmp, pic.GetType ) );
end



Danke f. die Hilfe

[edit=Luckie]Das nächste mal bitte selber die Delphi-Tags setzen. Danke. Mfg, Luckie[/edit]

DP-Maintenance 21. Jun 2005 14:48

DP-Maintenance
 
Dieses Thema wurde von "Luckie" von "Tutorials und Kurse" nach "Multimedia" verschoben.
Das ist wohl eher kein Tutorial. ;)

scp 21. Jun 2005 15:19

Re: image in bytearray umwandeln ?
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz