Czy ktoś może zasugerować, jak mogę przekonwertować obraz na tablicę bajtów i odwrotnie?
Tworzę aplikację WPF i używam czytnika strumieni.
Przykładowy kod zmieniający obraz w tablicę bajtów
public byte[] ImageToByteArray(System.Drawing.Image imageIn)
{
using (var ms = new MemoryStream())
{
imageIn.Save(ms,imageIn.RawFormat);
return ms.ToArray();
}
}
C # obraz na tablicę bajtów i tablicę bajtów na klasę konwertera obrazów
System.Drawing.Imaging.ImageFormat.Gif
możesz użyćimageIn.RawFormat
ImageConverter
rozwiązanie wydaje się unikać tych błędów.(new Bitmap(imageIn)).Save(ms, imageIn.RawFormat);
.Aby przekonwertować obiekt obrazu na
byte[]
, możesz wykonać następujące czynności:źródło
.ConvertTo(new Bitmap(x), typeof(byte[]));
.Innym sposobem na pobranie tablicy Byte ze ścieżki obrazu jest
źródło
Oto, czego obecnie używam. Niektóre z innych technik, które wypróbowałem, były nieoptymalne, ponieważ zmieniły głębię bitową pikseli (24-bitowa vs 32-bitowa) lub zignorowały rozdzielczość obrazu (dpi).
Obraz do tablicy bajtów:
Tablica bajtów do obrazu:
Edycja: Aby pobrać obraz z pliku jpg lub png, należy wczytać plik do tablicy bajtów za pomocą funkcji File.ReadAllBytes ():
Pozwala to uniknąć problemów związanych z tym, że Bitmap chce, aby jej strumień źródłowy był otwarty, i niektóre sugerowane obejścia tego problemu, które powodują, że plik źródłowy jest zablokowany.
źródło
ImageConverter _imageConverter = new ImageConverter(); lock(SourceImage) { return (byte[])_imageConverter.ConvertTo(SourceImage, typeof(byte[])); }
Gdzie sporadycznie powodowałoby to tablice o 2 różnych rozmiarach. Zwykle zdarza się to po około 100 iteracjach, ale kiedy uzyskam bitmapę za pomocą,new Bitmap(SourceFileName);
a następnie przepuszczę ją przez ten kod, działa dobrze.Spróbuj tego:
źródło
MemoryStream
szybsze, przynajmniej w bieżącej implementacji. W rzeczywistości, jeśli go zamkniesz, nie będziesz mógł użyćImage
później, otrzymasz błąd GDI.Możesz użyć
File.ReadAllBytes()
metody, aby wczytać dowolny plik do tablicy bajtów. Aby zapisać tablicę bajtów do pliku, użyjFile.WriteAllBytes()
metody method.Mam nadzieję że to pomoże.
Więcej informacji i przykładowy kod znajdziesz tutaj .
źródło
Czy chcesz, aby piksele lub cały obraz (łącznie z nagłówkami) był tablicą bajtów?
W przypadku pikseli: użyj
CopyPixels
metody na Bitmap. Coś jak:źródło
Kod:
źródło
Jeśli nie odniesiesz się do imageBytes do przenoszenia bajtów w strumieniu, metoda nie zwróci niczego. Upewnij się, że odwołujesz się do imageBytes = m.ToArray ();
[NB] Jeśli nadal nie widzisz obrazu w przeglądarce, napisałem szczegółowy krok rozwiązywania problemów
rozwiązane! -iis-not-Serving-css, -images-and-javascript
źródło
To jest kod do konwersji obrazu dowolnego typu (na przykład PNG, JPG, JPEG) do tablicy bajtów
źródło
Aby przekonwertować obraz na tablicę bajtów, kod jest podany poniżej.
Aby przekonwertować tablicę Byte na Image. Kod jest podany poniżej. Kod jest obsługiwany
A Generic error occurred in GDI+
w Image Save.źródło
Ten kod pobiera pierwsze 100 wierszy z tabeli w SQLSERVER 2012 i zapisuje obraz w każdym wierszu jako plik na dysku lokalnym
źródło