Почему растровое изображение, которое мы генерируем из одного черного пикселя, составляет 1 КБ? - PullRequest
0 голосов
/ 17 февраля 2020

Использование C# и Visual Stud ios

Я пытаюсь найти документацию о кодировании 8-битных изображений в градациях серого, но никакие исследования не привели к получению какой-либо информации. Когда мы конвертируем файл bmp (созданный с принудительной глубиной 8 бит) с одним черным пикселем в байтовый массив и отображаем его. Он печатает данные 1 КБ. Это не имеет смысла, и нет онлайн-документации по форматированию 8bpp с заголовками и отступами и т. Д. c.

Почему это 1 КБ для одного пикселя? Как это закодировано? Мы совершаем фундаментальную ошибку?

// Function to convert image types to byte arrays
        public static byte[] ImageToByte(System.Drawing.Image img)
        {
            System.Drawing.ImageConverter converter = new System.Drawing.ImageConverter();
            return (byte[])converter.ConvertTo(img, typeof(byte[]));
        }

 // Print bytes to console
            int iterationCount = 1;
            foreach (byte element in convertedBitmap)
            {
                Console.WriteLine(element + ": Byte " + iterationCount);
                iterationCount++;
            }

// Import image from file
            System.Drawing.Image squarePic = System.Drawing.Image.FromFile("C:/.../8bitBlack.bmp");

// Convert image to bitmap
            Bitmap myBitmap = new Bitmap(squarePic);
            Bitmap clone = myBitmap.Clone(new System.Drawing.Rectangle(0, 0, myBitmap.Width, myBitmap.Height), System.Drawing.Imaging.PixelFormat.Format8bppIndexed);

// Set color pallette of bitmap
            ColorPalette palette = clone.Palette;
            for (int i = 0; i < 256; i++)
                palette.Entries[i] = System.Drawing.Color.FromArgb(i, i, i);
            clone.Palette = palette;

// Convert image to byte array
            byte[] convertedBitmap = ImageToByte(clone);
...