2012-07-09 198 views
2
Dim bitmapFilePath As String = imagepath here... 
    Dim bitmapFileData As Byte() = System.IO.File.ReadAllBytes(bitmapFilePath) 
    Dim fileSize As Integer = bitmapFileData.Length 

    Dim bitmapDataOffset As Integer = 0 
    Dim width As Integer = 50 '255 
    Dim height As Integer = 50 '255 
    Dim bitsPerPixel As Integer = 1 
    Dim bitmapDataLength As Integer = 400 
    Dim widthInBytes As Double = Math.Ceiling(width/8.0) 

    Dim bitmap(bitmapDataLength) As Byte 
    Buffer.BlockCopy(bitmapFileData, bitmapDataOffset, bitmap, 0, bitmapDataLength) 


    For i As Integer = 0 To bitmapDataLength Step 1 
     bitmap(i) = bitmap(i) Xor &HFF 

    Next 

    Dim ZPLImageDataString As String = BitConverter.ToString(bitmap) 
    ZPLImageDataString = Replace(ZPLImageDataString, "-", String.Empty) 

    Dim zplCommand(3) As String 

    zplCommand(0) = "^XA" 
    zplCommand(1) = "^FO20,20" 
    zplCommand(2) = 
    "^GFA, " + 
    bitmapDataLength.ToString() + "," + 
    bitmapDataLength.ToString() + "," + 
    widthInBytes.ToString() + "," + 
    ZPLImageDataString 

    zplCommand(3) = "^XZ" 

它打印出一个无意义的方块,看起来像某人在Photoshop中应用了噪声过滤器。我在Zebra网站上找到了这个解决方案,但是那个图像是255/255,我需要这个用于50/50的图像,但我不知道我应该改变偏移量或位图数据长度...使用ZPL标签打印机的位图处理

+0

什么是您的源文件?该代码看起来像期待没有标题的纯二进制图像数据。 – SSS 2012-07-10 02:21:37

+0

这是一个.BMP图像,没什么特别的...... http://imgur.com/SsxCL(我认为imgur已经将它变成了png,尽管 – Calvin 2012-07-10 12:56:56

回答

1

你的位图是1位颜色深度吗?您不能发送像这样的彩色图像,它们需要转换为每像素1比特的黑白。您还需要确保您的bitmapDataLength变量是正确的。这应该是要发送到打印机的图像的字节数。请参阅ZPL Manual中的^GF命令。如果要将图像保存到打印机上,您也可以在示例后面的示例中查看手册

如果您只需要转换一对图像并将其保存,则可以使用图形转换向导ZebraNet Bridge。它将处理颜色转换,并为您ZPL^GF数学运算,并且您还可以将图像存储在打印机上。

+1

谢谢,我想我只是想和ZebraNet Bridge一起去打电话给 – Calvin 2012-07-10 14:54:01

1

我有同样的问题,并像这样解决。从技术上说,不知道怎么样,但尝试...

Dim bitmapDataLength As Integer = 338 Dim bitmapDataOffset As Integer = 62

第一行代表以字节为单位的图像大小(文件大小) - 62 第二行表示图像的头部大小( 62)

希望这会有所帮助

+0

我实际上得到了上面的解决方案,但我记下头部大小为62.我认为这就是我做错了。 – Calvin 2012-07-11 13:05:44