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

StackOverflow https://stackoverflow.com/questions/2593768

Вопрос

Я пишу библиотеку в интерфейс C # с языком принтера EPL2. Одна функция, которую я хотел бы попытаться реализовать, - это печатные изображения, Спецификация Doc говорит

P1 = ширина графической ширины графики в байтах. Восемь (8) точек = один (1) байт данных.

P2 = длина графической длины графики в точках (или линии печати)

Данные = сырые двоичные данные без графического форматирования файлов. Данные должны быть в байтах. Умножьте ширину в байтах (P1) по количеству линий печати (P2) для общего количества графических данных. Принтер автоматически рассчитывает точный размер блока данных на основе этой формулы.

Я планирую на своем исходном изображении, являющийся 1 битом на пиксель BMP файл, уже масштабированный до размера. Я просто не знаю, как получить это из этого формата в байт [] для меня, чтобы отправить на принтер. Я старался ImageConverter.ConvertTo(Object, Type) Это удается, но на массиве, который он выводит не правильный размер, и документация очень не хватает, как вывод отформатирован.

Мой текущий тестовый код.

Bitmap i = (Bitmap)Bitmap.FromFile("test.bmp");
ImageConverter ic = new ImageConverter();
byte[] b = (byte[])ic.ConvertTo(i, typeof(byte[]));

Любая помощь значительно ценится, даже если она в совершенно другом направлении.

Это было полезно?

Решение 2

Так как Слакс сказал Мне нужно было использовать локатики

Rectangle rect = new Rectangle(0, 0, Bitmap.Width, Bitmap.Height);
System.Drawing.Imaging.BitmapData bmpData = null;
byte[] bitVaues = null;
int stride = 0;
try
{
    bmpData = Bitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, Bitmap.PixelFormat);
    IntPtr ptr = bmpData.Scan0;
    stride = bmpData.Stride;
    int bytes = bmpData.Stride * Bitmap.Height;
    bitVaues = new byte[bytes];
    System.Runtime.InteropServices.Marshal.Copy(ptr, bitVaues, 0, bytes);
}
finally
{
    if (bmpData != null)
        Bitmap.UnlockBits(bmpData);
}

Другие советы

Если вам просто нужно преобразовать ваше растровое изображение в байтовый массив, попробуйте использовать MemoryStream:

Проверьте эту ссылку: C # Изображение в байтовый массив и массив байтов к классу конвертер изображений

public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
 MemoryStream ms = new MemoryStream();
 imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
 return  ms.ToArray();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top