Преобразование изображения в байтовый массив

Может ли кто-нибудь сказать мне, как изображение (.jpg,.gif,.bmp) преобразуется в массив байтов?

Ответ 1

Я предполагал, что вы хотите значения пикселей. Предполагая, что bitmap является System.Windows.Media.Imaging.BitmapSource:

int stride = bitmap.PixelWidth * ((bitmap.Format.BitsPerPixel + 7) / 8);
byte[] bmpPixels = new byte[bitmap.PixelHeight * stride];
bitmap.CopyPixels(bmpPixels, stride, 0);

Обратите внимание, что "шаг" - это количество байтов, необходимое для каждой строки ddata пикселя. Еще несколько доступных объяснений здесь.

Ответ 2

Самый простой способ преобразования изображения в байты - использовать класс ImageConverter в пространстве имен System.Drawing

public static byte[] ImageToByte(Image img)
{
    ImageConverter converter = new ImageConverter();
    return (byte[])converter.ConvertTo(img, typeof(byte[]));
}

Ответ 3

Если ваше изображение уже находится в форме System.Drawing.Image, вы можете сделать что-то вроде этого:

public byte[] convertImageToByteArray(System.Drawing.Image image)
{
     using (MemoryStream ms = new MemoryStream())
     {
         image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); 
             // or whatever output format you like
         return ms.ToArray(); 
     }
}

Вы использовали бы эту функцию с изображением в вашем блоке управления изображением следующим образом:

byte[] imageBytes = convertImageToByteArray(pictureBox1.Image);

Ответ 4

чтобы получить байты из любого файла, попробуйте:

byte[] bytes =  File.ReadAllBytes(pathToFile);

Ответ 5

Основано на MusiGenesis; помогли мне много, но у меня было много типов изображений. Это сохранит любой тип изображения, который он может прочитать.

            System.Drawing.Imaging.ImageFormat ImageFormat = imageToConvert.RawFormat;
        byte[] Ret;
        try
        {
            using (MemoryStream ms = new MemoryStream())
            {
                imageToConvert.Save(ms, ImageFormat);
                Ret = ms.ToArray();
            }
        }
        catch (Exception) { throw; }
        return Ret;

Ответ 6

Вы можете использовать File.ReadAllBytes метод для получения байтов

Если вы используете FileUpload класс, вы можете использовать FileBytes Свойство, чтобы получить байты как байт-массив.