2009-01-19 9 views

Antwort

44

Welche Art von byte[] meinst du? Die rohen Datei-Stream-Daten? In diesem Fall, wie wäre es so etwas wie (System.Drawing.dll in einer Client-Anwendung):

using(Image img = Image.FromFile("foo.bmp")) 
    { 
     img.Save("foo.jpg", ImageFormat.Jpeg); 
    } 

Oder FromStream mit einem new MemoryStream(arr) verwenden, wenn Sie wirklich brauchen eine byte[]:

byte[] raw = ...todo // File.ReadAllBytes("foo.bmp"); 
    using(Image img = Image.FromStream(new MemoryStream(raw))) 
    { 
     img.Save("foo.jpg", ImageFormat.Jpeg); 
    } 
+0

Die zweite war genau das, wonach ich suchte. Ich schreibe jedoch in einen anderen MemoryStream anstatt zu feilen. Danke! – Marc

3

Wenn es nur ein Puffer von Rohpixeldaten und keine vollständige Bilddatei (einschließlich Kopfzeilen usw., wie z. B. JPEG), dann können Sie Image.FromStream nicht verwenden.

Ich denke, was Sie möglicherweise suchen, ist System.Drawing.Bitmap.LockBits, ein System.Drawing.Imaging.ImageData; Dies ermöglicht den Zugriff auf das Lesen und Schreiben der Bildpixel mit einem Zeiger auf den Speicher.

-4
public static Bitmap BytesToBitmap(byte[] byteArray) 
{ 
    using (MemoryStream ms = new MemoryStream(byteArray)) 
    { 
    Bitmap img = (Bitmap)Image.FromStream(ms); 
    return img; 
    } 
} 
+0

Dies ist eine Bitmap. Er will ein JPEG. – AnthonyBlake

+0

Richtig, der Code ist nicht vollständig. Aber es gibt eine Bitmap zurück, die du später in einer Datei in einem beliebigen Format speichern kannst .... Ich denke, das ist meine Begrüßung in den Reputationskriegen ... Meine Schuld ist es trotzdem. –

+0

@ juanjo.arana, aber Sie haben keine Antwort auf seine Frage gegeben, sagte ihm nur, wie man eine Bitmap bekommen. – gbjbaanb