AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Prism TObject zu System.Byte[] casten und Bitmap zuweisen ???
Thema durchsuchen
Ansicht
Themen-Optionen

TObject zu System.Byte[] casten und Bitmap zuweisen ???

Offene Frage von "winx"
Ein Thema von winx · begonnen am 22. Mär 2006 · letzter Beitrag vom 6. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
winx

Registriert seit: 14. Jun 2005
265 Beiträge
 
#1

TObject zu System.Byte[] casten und Bitmap zuweisen ???

  Alt 22. Mär 2006, 09:15
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
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: TObject zu System.Byte[] casten und Bitmap zuweisen ???

  Alt 22. Mär 2006, 09:32
Wie stecken den die Bytes im Objekt?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
winx

Registriert seit: 14. Jun 2005
265 Beiträge
 
#3

Re: TObject zu System.Byte[] casten und Bitmap zuweisen ???

  Alt 22. Mär 2006, 09:41
Wenn ich

object.tostring() aufrufe erscheint System.Byte[]

mehr weiss ich leider auch nicht, ruf ne bereits vorhandene DLL auf.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: TObject zu System.Byte[] casten und Bitmap zuweisen ???

  Alt 22. Mär 2006, 13:49
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);
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
winx

Registriert seit: 14. Jun 2005
265 Beiträge
 
#5

Re: TObject zu System.Byte[] casten und Bitmap zuweisen ???

  Alt 22. Mär 2006, 14:38
danke,
es ist eine vollständige Bitmap Datei, diese wurde früher als OleVariant übergeben und mit diesem Code angezeigt:

Delphi-Quellcode:
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;
Wie mach ich denn das ganze jetzt wenn ein TObject übergeben wird, dass ich in einem
Stream umwandeln und damit das Bitmap erzeugen will.

Kannst du mir vielleicht ein kleines Codebsp posten?

Danke,
winx
  Mit Zitat antworten Zitat
Khananka

Registriert seit: 19. Feb 2006
Ort: Mainz
6 Beiträge
 
Delphi 2005 Enterprise
 
#6

Re: TObject zu System.Byte[] casten und Bitmap zuweisen ???

  Alt 24. Mär 2006, 14:25
Hast Du schon mal ein einfaches Unboxing probiert ? Ich stelle mir da folgendes vor:
Delphi-Quellcode:
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;
Hab's aber noch nicht getestet - probier's einfach mal aus.

Hth,
Khananka
  Mit Zitat antworten Zitat
winx

Registriert seit: 14. Jun 2005
265 Beiträge
 
#7

Re: TObject zu System.Byte[] casten und Bitmap zuweisen ???

  Alt 24. Mär 2006, 14:49
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:
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;
Wisst ihr wo der Fehler liegen kann??? Auch das gespeicherte BMP ist nur weiss...

Danke,
winx
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#8

Re: TObject zu System.Byte[] casten und Bitmap zuweisen ???

  Alt 24. Mär 2006, 14:50
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:
var
  bytes : array of Byte;
begin
  bytes := someObject as array of Byte;
Wie's mit dem VCL.Net Krempel aussieht -> kA...
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Khananka

Registriert seit: 19. Feb 2006
Ort: Mainz
6 Beiträge
 
Delphi 2005 Enterprise
 
#9

Re: TObject zu System.Byte[] casten und Bitmap zuweisen ???

  Alt 24. Mär 2006, 14:56
@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
  Mit Zitat antworten Zitat
Khananka

Registriert seit: 19. Feb 2006
Ort: Mainz
6 Beiträge
 
Delphi 2005 Enterprise
 
#10

Re: TObject zu System.Byte[] casten und Bitmap zuweisen ???

  Alt 24. Mär 2006, 15:01
Zitat:
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!!!
Ich glaube, Du musst die Position im MemoryStream nach dem Schreiben wieder auf 0 zurücksetzen, sonst versucht er am Ende des Streams zu lesen ...

Khananaka
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:48 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