Может ли кто-нибудь подсказать, как преобразовать изображение в массив байтов и наоборот?
Я разрабатываю приложение WPF и использую средство чтения потоков.
Пример кода для преобразования изображения в массив байтов
public byte[] ImageToByteArray(System.Drawing.Image imageIn)
{
using (var ms = new MemoryStream())
{
imageIn.Save(ms,imageIn.RawFormat);
return ms.ToArray();
}
}
C # изображение в байтовый массив и байтовый массив в класс конвертера изображений
System.Drawing.Imaging.ImageFormat.Gif
, вы можете использоватьimageIn.RawFormat
ImageConverter
Найденное решение ниже , кажется , чтобы избежать этих ошибок.(new Bitmap(imageIn)).Save(ms, imageIn.RawFormat);
.Для преобразования объекта Image в
byte[]
вы можете сделать следующее:источник
.ConvertTo(new Bitmap(x), typeof(byte[]));
.Другой способ получить массив байтов из пути к изображению -
источник
Вот что я сейчас использую. Некоторые из других техник, которые я пробовал, оказались неоптимальными, потому что они меняли битовую глубину пикселей (24 бит против 32 бит) или игнорировали разрешение изображения (dpi).
Изображение в байтовый массив:
Байтовый массив в изображение:
Изменить: чтобы получить изображение из файла jpg или png, вы должны прочитать файл в массив байтов с помощью File.ReadAllBytes ():
Это позволяет избежать проблем, связанных с тем, что Bitmap хочет, чтобы его исходный поток оставался открытым, и некоторых предлагаемых обходных путей для этой проблемы, которые приводят к тому, что исходный файл остается заблокированным.
источник
ImageConverter _imageConverter = new ImageConverter(); lock(SourceImage) { return (byte[])_imageConverter.ConvertTo(SourceImage, typeof(byte[])); }
Где это периодически приводило бы к массивам двух разных размеров. Обычно это происходит примерно после 100 итераций, но когда я получаю растровое изображение, используя,new Bitmap(SourceFileName);
а затем пропускаю его через этот код, он работает нормально.попробуй это:
источник
MemoryStream
быстрее, по крайней мере, в текущей реализации. Фактически, если вы закроете его, вы не сможете использовать егоImage
впоследствии, вы получите ошибку GDI.Вы можете использовать
File.ReadAllBytes()
метод для чтения любого файла в байтовый массив. Чтобы записать байтовый массив в файл, просто используйтеFile.WriteAllBytes()
метод.Надеюсь это поможет.
Вы можете найти дополнительную информацию и образец кода здесь .
источник
Вам нужны только пиксели или все изображение (включая заголовки) в виде байтового массива?
Для пикселей: используйте
CopyPixels
метод Bitmap. Что-то вроде:источник
Код:
источник
Если вы не ссылаетесь на imageBytes для переноса байтов в потоке, метод ничего не вернет. Убедитесь, что вы ссылаетесь на imageBytes = m.ToArray ();
[NB] Если вы все еще не видите изображение в браузере, я написал подробный шаг по устранению неполадок.
решена! -iis-не-сервировка-CSS,-и-образами-JavaScript
источник
Это Код для преобразования изображения любого типа (например PNG, JPG, JPEG) в байтовый массив.
источник
Чтобы преобразовать изображение в байтовый массив, код приведен ниже.
Чтобы преобразовать массив байтов в изображение, код приведен ниже. Код является дескриптором
A Generic error occurred in GDI+
в Image Save.источник
Этот код извлекает первые 100 строк из таблицы в SQLSERVER 2012 и сохраняет изображение для каждой строки как файл на локальном диске.
источник