24. december 2007 - 14:47Der er
11 kommentarer og 1 løsning
string to image
Sidder med et lille problem :D jeg har et jpg fil i en string. og jeg kan ikke lige finde ud af at lave det om til classen image!
er ikke helt 100 på hvilken format koden i stringen er i, men jeg ved at i php kan man bare echo stringen og sende "jpeg" til headder, så virker det :D
Hvorfor har du i øvrigt lagt den ind i en string? Strigs er ike specielt velegnet til den slags i .NET (strings er til UFT-16 encoded tekst) - en byte[] ville være meget mere relevant.
public image image() { this.streamWriter.WriteLine("/capture"); this.streamWriter.Flush();
this.streamReader.ReadLine(); char[] cbuffer = new char[1024]; int count = this.streamReader.Read(cbuffer, 0, 1024); string final = new string(cbuffer, 0, count);
//return Image.FromStream(final); return final; }
Problemet er at det komme fra en stream, streamen stopper ikke når blillede er slut, men forsætter og venter på nye commando'er. Jeg er rimelig nye i C# så har ikke helt så meget forstand på det :D
Nu er StreamReader og StreamWriter klasserne ikke specielt velegnet til at læse binære data med. De er beregnet til at læse tekst, og i .net er tekst som regel på unicode form - en char fylder to bytes.
Men muligvis er du heldig og dette vil virke:
public Image image() { this.streamWriter.WriteLine("/capture"); this.streamWriter.Flush();
this.streamReader.ReadLine(); // skal denne her mon være der?? return Image.FromStream(this.streamReader.BaseStream); }
Jeg synes at det lyder lidt som en umulig opgave at ville lave det på den måde.. Hvordan skal programmet vide hvornår det har modtaget hele billedet? Desuden er StreamReader som sagt ikke lige designet til overførelse af rå byte data.
Transport over netværk?... i så fald ville jeg nok have en seperat command stream (alm. streamReader) og så have en BinaryStream til overførsel af data på en anden port...
Men ellers... hvor sender du billedet?... eller hvor kommer det fra?... For ville om ikke andet så konvertere fra billedets byte til unicode (netop for at spare 1 byte pr. byte), og så konvertere fra string tilbage til byte array med unicode...
Men med det man ved om det du har gang i på nuværende tidspunkt er det godt nok ikke nemt at hjælpe...
Du kan ikke bruge den version du har som en string. Den behandles af C# som om det var et Unicoded stykke tekst. Det du skal bruge er enten et array af bytes eller bytes i en stream - muligvis en MemoryStream ville være det bedste.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.