Пользовательский символ в UINT8 - как конвертировать в C #? - PullRequest
1 голос
/ 23 февраля 2012

У меня есть следующий символ, который является!написано на C ++:

const UINT8 ras[1][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} }; //'!'

Теперь мне нужно создать это в C # как символ и напечатать его на консоли или изображении, как это возможно?

Я знаю, что это должнораспечатать!Но как мне добраться от моего массива до!?

1 Ответ

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

Это похоже на растровое изображение 16x14 пикселей.Если мы берем два байта два, мы получаем:

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

Теперь двоичный шаблон для значения 0x30 равен 00110000, поэтому он выглядит как восклицательный знак с точкой 2x2-пикселяи 2x8-пиксельная вертикальная часть, например, (оставляя только самый левый байт, так как самый правый в каждой строке равен 0 или не заполнен):

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

Очевидно, это также вверхвниз.Используя приведенную выше информацию, вы сможете создать, например, простой старый <a href="http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.aspx" rel="nofollow">Bitmap</a> и инициализировать его, чтобы получить что-то, что вы в конечном итоге отобразите в C #.Конечно, это звучит несколько округло для этого очень упрощенного изображения, но все же.

Чтобы инициализировать растровое изображение, вы должны сделать что-то вроде:

byte[] input = new byte[] { 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 };

glyph = new Bitmap(16, 14, System.Drawing.Imaging.Format1bppIndexed);
for(int y = 0; y < glyph.Height; y++)
{
  int input_y = (glyph.Height - 1) - y; // Flip it right side up.
  for(int x = 0; x < glyph.Width; x++)
  {
    bool on = input[2 * input_y + x / 8] & (0x80 >> (x % 8));
    glyph.SetPixel(x, y, on ? System.Drawing.Color.Black : System.Drawing.Color.White);
  }
}

Обратите внимание, что этот кодочень грубо, я действительно не разработчик C #.Считайте это псевдокодом.

...