我正在使用EPL2打印机语言编写一个用于连接C#的库。我想尝试实现的一个功能是打印图像,规范文档说
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[]));
即使是完全不同的方向,也非常感谢任何帮助。
答案 0 :(得分:0)
如果您只需要将位图转换为字节数组,请尝试使用MemoryStream:
点击此链接:C# Image to Byte Array and Byte Array to Image Converter Class
public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
MemoryStream ms = new MemoryStream();
imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
return ms.ToArray();
}
答案 1 :(得分:0)
作为SLaks said,我需要使用LockBits
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);
}