日期:2014-05-16  浏览次数:20909 次

向ncqingchuan1976 等高手提问:斑马打印机打印中文,将中文转换为编码的技术细节
http://bbs.csdn.net/topics/310040805

这里看到个将中文输出到图片,然后对图片进行编码的代码。



Dim i As Integer, j As Integer                              '开始取点
Dim Sum As Integer
        For j = 0 To Height - 1                                     '由于内存中的图片是倒置,所以要反取数据
            For i = 0 To Width \ 4 - 1
                Sum = 0
                For m As Integer = 0 To 3                           '由于4个点可用1个十六进制数表示因此一次取4个点进行转换
                    If Image.GetPixel(i * 4 + m, j).B = 0 Then      '由于只打印黑白点所以根据RGB分量判断是否需要打印该点
                        Sum += 1 << (3 - m)                         '通过移位操作将该点的信息与一个数据的BIT相对应
                    End If
                Next
                TempString.Append(Hex(Sum))                         '将4个点取得的数据转换成16进制数据并存入临时变量
            Next
        Next


这部分不是很明白啊,“由于内存中的图片是倒置,所以要反取数据”似乎没看到反着取(从下到上),从代码上看,纵向逐像素For j = 0 To Height - 1,横向4个像素一组For i = 0 To Width \ 4 - 1,

但下面这行就不明白是什么意思了:

Sum += 1 << (3 - m)    '通过移位操作将该点的信息与一个数据的BIT相对应

哪位给讲解下?谢谢
------解决方案--------------------
如果设备有中文字库,那就不要用你的程序去绘制中文点阵。在要求高速的工业打码操作上,速度差十倍。
------解决方案--------------------

如果是在WinNT(XP,WIN7)操作平台下与班码打印机进行打印。那可以直接用FastReport这类的东西直接打印。。。
如果是在移动试打印这还真没招。最好用字库,目前我也在为这东西目前没找到中文字库要怎么弄。。,公司用的是PDA WinCE平台要是像楼主说的那转成那种图片后再进行压缩。那慢的。。。直接在Win下还是用FastReport发送数据吧,不用从ZPL语言转。
------解决方案--------------------
还有一种方式,调用CODESOFT的API打印条码,看对你有没有帮助
这种方式确定可以,以前试过,就是要在客户端装CODESOFT。
------解决方案--------------------
再有就是装好打印机驱动,把它当成普通打印使。