JPEG aus Stream lesen und anzeigen
-
Hallo zusammen,
ich hab den Inhalt eines JPEG-Files in einem Byte-Array stehen und möchte das jetzt gern zur Anzeige bringen. Ich hab das ganze auch schon in einen MemoryStream umgewandelt
MemoryStream imageStream = new MemoryStream(buffer)
Wie kann ich das ganze jetzt in ein Bild umwandeln, das ich anzeigen kann? Ich hab schon in der MSDN gesucht, konnte aber zu diesem Thema speziell nichts finden...
Vielen Dank für Eure Hilfe!
-
MemoryStream stream = new MemoryStream(byteArray); Bitmap bm = new Bitmap(stream); pictureBox.Image = bm;
-
Vielen Dank!
Allerdings bekomme ich jetzt noch eine ArgumentException an der Stelle, an der ich das Bitmap der Image-Eigenschaft der PictureBox zuweise. Wahrscheinlich stimmt da intern noch was mit den Pixeldaten nicht ...
Erkennt diese Image-Eigenschaft automatisch, dass es sich um ein JPEG-Bild handelt, oder muss ich ihm das irgendwie mitteilen?
-
Hier ein komplett Beispiel, ich hab auch Bitmap durch Image ersetzt.
// schreibt das jpg in ein byte Array Image img = Image.FromFile("Bild.jpg"); MemoryStream ms = new MemoryStream(); img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); byte[] b = ms.ToArray(); // wandelt das byte Array in ein Image und zeigt es an MemoryStream stream = new MemoryStream(b); Image image = Image.FromStream(stream); pictureBox.Image = image;
-
Ich bekomme folgende Fehlermeldung:
'System.Drawing.Image' enthält keine Definition für 'FromStream'
-
Bei mir funktioniert der Code.
Image.FromStream Method
-
Ich hab jetzt was rausgefunden. In einem anderen Projekt kann ich diese Methode aufrufen, da bekomm ich auch nach Eingabe des Punktes die Liste der Member von Image angezeigt. Aber in meinem aktuellen Projekt geht das nicht. Woran könnte das liegen? Assemblyverweise sind alle drin.... ich bin ratlos!!!
Vielen Dank für Deine bisherige Hilfe!
-
Ich wette du hast nur System.Drawing.Imaging, aber nicht System.Drawing im using.
-
Doch, ich hab System.Drawing drin aber dafür System.Drawing.Imaging nicht. Brauch ich das?
-
Dann könntest du einfach ImageFormat anstatt Imaging.ImageFromat, aber ansonsten brauchste es nicht.
Poste doch mal waas für Verweise du alles drin hast.
-
Folgende Verweise hab ich drin:
using System; using System.IO; using System.Windows.Forms; using System.Text.RegularExpressions; using System.Drawing; using System.Drawing.Imaging;
Das ist der Inhalt einer Methode:
MemoryStream imageStream = new MemoryStream(buffer); Image img = Image.FromStream(imageStream);
und die Fehlermeldung hab ich ja schon gepostet. Das gibts doch nicht!!! Was mach ich denn da falsch???
Vielen Dank für Eure Geduld!!
-
Usings sind nicht gleich Verweise. Die Namespaces im Using ersparen dir nur Tipparbeit und gestallten den Quellcode übersichtlicher. Verweise sind die eingebundenen Assemblys. In Visual Studio bzw Visual C# findest du im Projektmappen-Explorer ein Ordner mit den Verweisen.
-
Ach so, Entschuldigung, hab ich verwechselt.
Meine Verweise sind:
MSCorLib OpenNETCF System System.Data System.Drawing System.Windows.Forms System.XML
Also an sich alles OK...
-
schrankwand schrieb:
Dann könntest du einfach ImageFormat anstatt Imaging.ImageFromat, aber ansonsten brauchste es nicht.
Sowas geht nicht!
using A.B; A.B.C.d = bla; // Okay C.d = bla; // Geht nicht
@bherd:
Bei dir fehlt
using System.Drawing.Imaging;Jockelx
-
Jockelx schrieb:
Bei dir fehlt
using System.Drawing.Imaging;Weshalb?
Mein Codebeispiel funktioniert auch ohne diese Anweisung.
-
@Jockelx: Also erstens geht das sehr wohl was ich da geschrieben hab und zweitens ha er ja System.Drawing.Imaging schon im using.
@Noodles: Wenn man den Namespace Imaging immer mit angibt schon. Aber z.B. ich bevorzuge es alle verwendeten Namespaces ins using zu packen anstatt sie der Klasse immer vorran zu stellen.
-
schrankwand schrieb:
@Noodles: Wenn man den Namespace Imaging mit angibt schon.
Weshalb ich ihn mit angegeben habe.
schrankwand schrieb:
Aber z.B. ich bevorzuge es alle verwendeten Namespaces ins using zu packen anstatt sie der Klasse immer vorran zu stellen.
Ändert nichts an der Tatsache, dass es ohne using ... funktioniert.
-
@schrankwand:
Hast du einen c#-Kompiler da?
Ich nämlich nicht, kann es daher nicht ausprobieren.
Bin mir aber sicher, dass das so in meinem Buch steht;
hab aber bei MSDN auch nix gefunden, dass das nicht geht.
Also, wenn du das nicht 100% weisst, dann probier es mal bitte aus.
-
Ja, ich habe einen C#-Compiler da, wobei genau genommen werden .NET-Anwendungen erst zur Laufzeit kompiliert. Rein zufällig bin ich nämlich Programmierer in einem Unternehmen wo in C# programmiert wird. Nichts desto trotz dient die using-Anweiung dazu das ständige angeben von Namespaces zu ersparen. Die using-Anweisung hat also rein garnichts mit der #include-Direktive von C++ zu tun oder womit auch immer du das jetzt verwechselt hast.
-
schrankwand schrieb:
Ja, ich habe einen C#-Compiler da, wobei genau genommen werden .NET-Anwendungen erst zur Laufzeit kompiliert.Rein zufällig bin ich nämlich Programmierer in einem Unternehmen wo in C# programmiert wird.
Und wann wirst du entlassen?
1. Ich hab dir eine normale Frage gestellt, weil ich selber nicht mehr
sicher war.2. Kompilieren heisst nicht unbedingt in nativen Code zu übersetzen!
Eine C#-Datei wird natürlich nicht erst zur Laufzeit kompiliert.