1

我正在编写一个库来将 C# 与 EPL2 打印机语言接口。规范文档说,我想尝试实现的一项功能是打印图像

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[]));

非常感谢任何帮助,即使它的方向完全不同。

4

2 回答 2

0

如果您只需要将位图转换为字节数组,请尝试使用 MemoryStream:

查看此链接:C# Image to Byte Array 和 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();
}
于 2010-04-07T15:42:10.090 回答
0

正如SLaks 所说,我需要使用 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);
}
于 2012-11-09T15:19:28.987 回答