![]() |
TObject zu System.Byte[] casten und Bitmap zuweisen ???
Hallo,
ich habe folgendes Problem: Ich hab eine Funktion, die ein TObject übergeben bekommt. In diesem TObject steckt ein Array aus lauter Bytes. Die Bytes sind Daten eines Bitmaps, welches ich in einer PictureBox anzeigen will... Wie funktioniert sowas... Wie kann ich ein TObject zu einem Stream oder erstmal zu einem ByteArray casten und dieses einem Bitmap zuweisen ??? Habt ihr Ideen? Danke, winx |
Re: TObject zu System.Byte[] casten und Bitmap zuweisen ???
Wie stecken den die Bytes im Objekt?
|
Re: TObject zu System.Byte[] casten und Bitmap zuweisen ???
Wenn ich
object.tostring() aufrufe erscheint System.Byte[] mehr weiss ich leider auch nicht, ruf ne bereits vorhandene DLL auf. |
Re: TObject zu System.Byte[] casten und Bitmap zuweisen ???
In welcher Form liegt der Bytestrom vor? Wenn er eine vollständige BMP-Datei, also inklusive Header, beinhaltet, kannst du das Array in einen Stream einlesen und diesen dem Bitmap-Konstruktor übergeben. Wenn nur die Pixeldaten enthalten sind, könntest P/Invoke nutzen oder eben zu Fuß die Sache erledigen ;) .
Code:
[DllImport("Gdi32")]
private static extern IntPtr CreateBitmap(int width, int height, uint planes, uint bitsPerPel, byte[] pixelData); |
Re: TObject zu System.Byte[] casten und Bitmap zuweisen ???
danke,
es ist eine vollständige Bitmap Datei, diese wurde früher als OleVariant übergeben und mit diesem Code angezeigt:
Delphi-Quellcode:
Wie mach ich denn das ganze jetzt wenn ein TObject übergeben wird, dass ich in einem
procedure Tmainform.ConvertOleVarianttoBitmap(Data : OleVariant);
var ms : TMemoryStream; p : Pointer; MyBitmap : TBitmap; begin ms:=TMemoryStream.Create; p:=VarArrayLock(Data); try ms.Write(p^,VarArrayHighBound(Data,1)+1); finally VarArrayUnlock(Data); end; ms.seek(0,soFromBeginning); myBitmap:=TBitmap.Create; myBitmap.LoadFromStream(ms); image.Picture.Assign(myBitmap); ms.Free; myBitmap.Free; end; Stream umwandeln und damit das Bitmap erzeugen will. Kannst du mir vielleicht ein kleines Codebsp posten? Danke, winx |
Re: TObject zu System.Byte[] casten und Bitmap zuweisen ???
Hast Du schon mal ein einfaches Unboxing probiert ? Ich stelle mir da folgendes vor:
Delphi-Quellcode:
Hab's aber noch nicht getestet :oops: - probier's einfach mal aus.
uses System.IO;
type bytearray = Array of Byte; procedure test(o: TObject); var a: ByteArray; s: MemoryStream; begin A := ByteArray(o); s := MemoryStream.Create(A); end; Hth, Khananka |
Re: TObject zu System.Byte[] casten und Bitmap zuweisen ???
Das funktioniert so,doch leider ist das Bild das
mir in der PictureBox angezeigt wird, immer leer :-( obwohl ich beim debuggen festgestellt habe, das der Bytestream nicht leer ist!!! Der Code sieht wie folgt aus:
Delphi-Quellcode:
Wisst ihr wo der Fehler liegen kann??? Auch das gespeicherte BMP ist nur weiss...
function TRemoteController.ConvertObjecttoBitmap(data : TObject):Bitmap;
var ms : MemoryStream; preview : Bitmap; byteArray : TBytes; i: Integer; begin byteArray := TBytes(Data); ms:= MemoryStream.Create(byteArray); preview := Bitmap.Create(ms); ms.Close(); preview.Save('C:\\testPreview.bmp'); result := preview; end; Danke, winx |
Re: TObject zu System.Byte[] casten und Bitmap zuweisen ???
FYI, D.Net braucht keine unnützen Hilfstypen für arrays mehr.
Ist zwar Jahrhunderte her, alsi ich D.Net das letzte Mal angefasst habe, aber es sollte auch einfach so gehen:
Delphi-Quellcode:
Wie's mit dem VCL.Net Krempel aussieht -> kA...
var
bytes : array of Byte; begin bytes := someObject as array of Byte; |
Re: TObject zu System.Byte[] casten und Bitmap zuweisen ???
@elvis:
Netter Versuch, aber der Compiler frisst den Cast erst gar nicht. Ausserdem ist die IDE auch bei .NET-Projekten ganz groß darin, solche Hilfstypen zu erstellen. Khananka |
Re: TObject zu System.Byte[] casten und Bitmap zuweisen ???
Zitat:
Khananaka |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21: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