2012-01-20 6 views
33

Obecnie pracuję nad aplikacją, która wymaga wysokowydajnej konwersji niepartych tablic bajtów do formatu PNG lub JPEG. Format obrazu nie ma znaczenia, o ile jest szybki.Konwertowanie tablicy bajtów na PNG/JPG

Próbowałem bibliotek .NET i wydajność jest bardzo zła. Czy ktoś może polecić do tego dobrą bibliotekę darmową?

EDIT: byte [] jest mapa bitowa skala szarości 8bit

+0

Nie jest jasne, co masz na myśli - na czym polega ta tablica bajtów? Czy mógłbyś podać więcej szczegółów? –

+0

Twoje pytanie nie jest całkowicie jasne. Co oznacza "bajt []"? Czy jest to treść rzeczywistego obrazu? Czy jest to nieskompresowana mapa bitowa, którą chcesz zapisać jako JPG/PNG? – vcsjones

Odpowiedz

55

Powinieneś być w stanie zrobić coś takiego:

byte[] bitmap = GetYourImage(); 

using(Image image = Image.FromStream(new MemoryStream(bitmap))) 
{ 
    image.Save("output.jpg", ImageFormat.Jpeg); // Or Png 
} 

Look here aby uzyskać więcej informacji.

Mam nadzieję, że to pomoże.

+1

+1 ... prawie zwykły sposób robienia tego. W zależności od wymagań użytkownika, nie ma potrzeby zapisywania go w systemie plików. –

+0

Idealny. Kocham to! To było _exactly_ czego szukałem. –

+2

Witam, próbuję coś podobnego, aby przekonwertować nieprzetworzony obraz na jpeg butgetting * Parametr nie jest prawidłowy * wyjątek. Jakieś pomysły? 'byte [] bytes = System.IO.File.ReadAllBytes (@" C: \ Input.CR2 "); przy użyciu (Obraz obrazu = Obraz.FromStream (nowy MemoryStream (bajty))) { image.Save (@ "C: \ output.jpg", ImageFormat.Jpeg); } ' –

0

Podoba mi się Imagemagick. http://www.imagemagick.org/script/api.php

+0

Wiem, że to jest do korzystania z biblioteki programowania, ale co w tym przypadku byłoby wiersza polecenia dla narzędzia? – user2284570

+0

@ user2284570 Jeśli używasz go w linii poleceń, pracowałbyś z tablicą, a nie tablicą bajtów. Zakładając, że twoje dane wejściowe to PNG (podpis PNG, a po nim fragmenty), prawdopodobnie działałoby 'convert input.png output.jpg'. – ahoffer

1

Istnieją dwa problemy z tym pytanie:

zakładając, że masz skali szarości bitmapę, masz dwa czynniki do rozważenia:

  1. Dla JPG ... co utrata jakości jest dopuszczalne ?
  2. Dla pngs ... jaki poziom kompresji można znieść? (Chociaż w przypadku większości rzeczy, które widziałem, nie masz zbyt dużego wyboru, więc wybór ten może być nieistotny.) Dla każdego, kto myśli, że to pytanie nie ma sensu: tak, możesz zmienić stopień kompresji/liczba przebiegów próbujących skompresować; sprawdź Ifranview lub niektóre z jego wtyczek.

Odpowiedz na te pytania, a następnie możesz znaleźć swoją oryginalną odpowiedź.