Преобразовать изображение в монохромный байтовый массив
-
25-09-2019 - |
Вопрос
Я пишу библиотеку в интерфейс 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();
}