Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Surface Stream (https://www.delphipraxis.net/178269-surface-stream.html)

EWeiss 30. Dez 2013 11:35

AW: Surface Stream
 
Zitat:

Ich hatte es bis gerade so verstanden, dass du ein Surface aus einer C#-Anwendung in eine Delphi-Anwendung schaufeln willst.
Ich wollte von vornherein einen Stream für die Rohdaten verwenden.

Zitat:

Ich möchte mein Surface (nein nicht das man kaufen kann) also das von DirectX in einen Stream(TStream) kopieren.
Ich finde nur Möglichkeiten unter SlimDX
Und das ist es wobei Zacherl mir geholfen hat ;)
Ich war etwas konfus das GraphicStream von Ms aus der DX Bibliothek in Delphi nicht zu finden war.
Hab dann nach alternativen gesucht wie DataStream von SlimDX und habe dabei ganz einfach übersehen das
die Stream Function Ansicht genau vor meiner Nase lagen.

Auf die Platte wird nichts mehr gespeichert ;)
Alles in einem MemoryStream..

gruss

EWeiss 30. Dez 2013 14:01

AW: Surface Stream
 
noch einen Nachtrag..

Zitat:

Das Problem mit deiner Funktion ist einfach, dass du das Bild als Windows-Bitmap speicherst, aber beim laden davon ausgehst, dass in der Datei die Rohdaten der Quell-Streams stehen. Tun sie aber nicht, da das Bitmap-Format zum einen einen eigenen Header (Meta-Daten vor den eigentlichen Bilddaten) in die Datei bringt, und zudem der Standard nicht alle Pixelformate vorsieht, die ein DX Surface haben könnte, weshalb da im schlimmsten Fall sogar noch konvertiert wird. Der Dateiinhalt hat nachher also potenziell kaum noch etwas mit den ursprünglichen Rohdaten im Surface-Buffer gemein.
Das Problem ist eher ein anderes..
Die Farben die nun ermittelt werden muss ich quasi als Quader auf ein Bitmap zeichnen
diese wird dann gestaucht auf eine Größe von 64x48 und anschließend als Bitmap nach AtmoWin geschickt.
Als Bitmap deswegen weil die den Header erwarten!

Code:
BinaryReader reader = new BinaryReader(stream);
 stream.Position = 0; // ensure that what start at the beginning of the stream.
 reader.ReadBytes(14); // skip bitmap file info header
 byte[] bmiInfoHeader = reader.ReadBytes(4 + 4 + 4 + 2 + 2 + 4 + 4 + 4 + 4 + 4 + 4);
 byte[] pixelData = reader.ReadBytes((int)(stream.Length - stream.Position));
 atmoLiveViewCtrl.setPixelData(bmiInfoHeader, pixelData);
Ich war vorher davon ausgegangen das Ursprungs Bild zu verkleinern aber das wäre ja quatsch gewesen deshalb war meine Annahme diese vorher auf die Platte zu schreiben schlichtweg falsch.
Nur die Farbfragmente sind wichtig.
Aber ob ich das Bild dann auch auf die Platte speichern muss wird sich erst noch zeigen.

gruss

Medium 30. Dez 2013 14:13

AW: Surface Stream
 
Fein, jetzt hab ich den Faden endgültig verloren :lol: Aber wenn's nun klappt, macht das ja nichts :)

EWeiss 30. Dez 2013 14:18

AW: Surface Stream
 
Zitat:

Zitat von Medium (Beitrag 1241467)
Fein, jetzt hab ich den Faden endgültig verloren :lol: Aber wenn's nun klappt, macht das ja nichts :)

Ach was soll's macht ja nichts.
Letztendlich bin ich über jede Hilfe Dankbar man kann nicht alles beherrschen (will aber so vieles tun).

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:31 Uhr.
Seite 3 von 3     123   

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