2009-01-19 9 views

Odpowiedz

44

Jakiego rodzaju jest byte[]? Surowe dane strumieniowe plików? W takim przypadku, jak o czymś takim (używając System.Drawing.dll w aplikacji klienckiej):

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

Albo użyć FromStream z new MemoryStream(arr) jeśli naprawdę masz byte[]:

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

Drugi był dokładnie tym, czego szukałem. Piszę jednak do innego strumienia MemoryStream niż do pliku. Dzięki! – Marc

3

Jeśli jest to tylko buforowanie nieprzetworzonych danych pikseli, a nie kompletny plik obrazu (w tym nagłówki itp., takie jak JPEG), wtedy nie można używać Image.FromStream.

Myślę, że to, czego szukasz, to System.Drawing.Bitmap.LockBits, zwracając plik System.Drawing.Imaging.ImageData; zapewnia to dostęp do odczytywania i zapisywania pikseli obrazu za pomocą wskaźnika do pamięci.

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

to jest bitmapa. on chce jpeg. – AnthonyBlake

+0

Prawidłowo, kod nie jest kompletny. Ale zwraca bitmapę, którą możesz później zapisać do pliku w dowolnym formacie .... Myślę, że to moje powitanie w Wojenach Reputacji ... Moja wina i tak. –

+0

@ juanjo.arana, ale nie podałeś odpowiedzi na jego pytanie, tylko powiedział mu, jak uzyskać bitmapę. – gbjbaanb