Создать растровое изображение из двоичных данных - PullRequest
1 голос
/ 23 февраля 2012

У меня есть следующее:

byte[] pixels = new byte[28] { 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00 };

Это восклицательный знак вверх ногами, как это:

0x00, 0x00,
0x30, 0x00,
0x30, 0x00,
0x00, 0x00,
0x00, 0x00,
0x30, 0x00,
0x30, 0x00,
0x30, 0x00,
0x30, 0x00,
0x30, 0x00,
0x30, 0x00,
0x30, 0x00,
0x30, 0x00,
0x00, 0x00

Что в двоичном виде:

00000000    00000000
00110000    00000000
00110000    00000000
00000000    00000000
00000000    00000000
00110000    00000000
00110000    00000000
00110000    00000000
00110000    00000000
00110000    00000000
00110000    00000000
00110000    00000000
00110000    00000000
00000000    00000000

Мне нужно преобразовать это в растровое изображение / создать растровое изображение. Таким образом, восклицательный знак белый, а фон черный. Мне нужно уметь также раскрасить пиксели.

Как это сделать ??

Ответы [ 3 ]

3 голосов
/ 23 февраля 2012

При условии, что все ваши изображения имеют размер 16x14

Bitmap bmp = new Bitmap(16, 14);
int line=0;

for (int i = 0; i < pixels.Length; i++)
{
    for (int j = 0; j<8; j++)
    {
        if (((pixels[i] >> j) & 1) == 1)
        {
            bmp.SetPixel( (i%2)*8 + 7-j, line, Color.Black);
        }
    }
    if(i%2==1) line++;
}
0 голосов
/ 23 февраля 2012

Насколько я понимаю, вы хотите создать растровое изображение, похожее на то, что находится внутри вашего байтового массива (ваш "восклицательный знак").

Вы можете создать растровое изображение с нуля, используя несколько циклов,просто установите пиксели в вашем Bitmap.Вот простой пример, который рисует случайные белые пиксели на черном фоне.Адаптируйте его под свои требования:

Bitmap zz = new Bitmap(100, 100);

using (Graphics g = Graphics.FromImage(zz))
{
    // Draws a black background
    g.Clear(Color.Black);
}

Random rnd = new Random();
for (int i = 0; i < zz.Height; i++)
{
    for (int j = 0; j < zz.Width; j++)
    {
        // Randomly add white pixels
        if (rnd.NextDouble() > 0.5)
        {
            zz.SetPixel(i, j, Color.White);
        }
    }
}

zz.Save(@"C:\myfile.bmp", ImageFormat.Bmp);
0 голосов
/ 23 февраля 2012

Подумайте о прочтении Википедии о формате BMP . Это понадобится вам, чтобы убедиться, что ваш массив содержит необходимые метаданные (например, ширину и высоту). После внесения этих изменений вы можете использовать что-то вроде этого

public static Bitmap ToBitmap(byte[] byteArray)
{
   using (var ms = new MemoryStream(byteArray))
   {
     var img = (Bitmap)Image.FromStream(ms);
     return img;
   }
}
...