Gprinter光栅位图点阵数据解析工具

最近参与的项目有一个需求,解析佳博热敏打印机的光栅位图点阵数据并保存为图片文件。数据是通过Bus Hound抓取的,如下图所示。

  其中1b 40为初始化打印机的指令,对应的ASCII码为ESC @,1b 4a 18为打印并走纸的指令,对应的ASCII码为ESC J,1d 76 30为打印光栅位图的指令,对应的ASCII码为GS v 0,其后紧跟光栅位图模式(0x00)、水平方向位图字节数(0x0036)和垂直方向位图点数(0x0018),后面则为本帧的位图数据(0x36*0x18=1296字节)。数据文件后续以1b 4a 18的打印走纸帧和1d 76 30的位图数据帧循环往复,直至打印内容结束。

  数据解析是关键一环,同时还需要考虑光栅位图点阵数据的无损压缩并评估压缩效率。为了直观显示解析后的图像和相关信息,并保存成bmp和png格式的图片,基于MFC写了一个小工具,界面如下图所示。

  窗口左侧白色区域显示解析后的图像,右侧显示原始数据的信息及生成的Zip包、Bitmap及PNG图片的信息。为了方便调试,数据文件支持通过Bus Hound抓取的txt,原始的光栅位图点阵数据,及其它们的zip压缩包,只需将文件拖拽到窗口内部即可完成解析。生成Bitmap时,支持选择扫描的方向,并可选择生成原始数据的二进制文件(Plain Binary)、经过zip压缩的原始数据的二进制文件以及剔除原始数据中ESC指令的纯数据文件(Pure Data)。

  解析点阵数据后的图像及相关信息如下图所示。

  在将光栅位图点阵数据保存为Bitmap时,需要特别注意,如果水平方向位图字节数不是4的整倍数,则需要扩展到4的整倍数才可以。如本例中原始宽度为54字节,需扩展到56字节,扩展后的像素宽度为448(56*8)。另外,原始光栅位图点阵数据是从上到下(Top-Down)排列的,如果生成Bitmap时选择同向扫描,则BITMAPINFOHEADER结构体中biHeight需为负数,而一般的Bitmap文件为从下到上扫描(Bottom-Up),与原始数据排列方向刚好相反,此时biHeight为正。可以看到经过zip压缩后的数据约为原有大小的1/5。PNG图片大小也约为BMP的1/5,但通过Beyond Compare工具比较,图像并未有任何损失,如下图所示。

  本次任务基本完成并达到预期效果。第一次接触热敏打印机,算是有了一个初步的认识,后面有时间可以考虑把这个事情反过来做一遍,即把任意图片文件转换为光栅位图点阵数据,这样就可以打印二维码或其他复杂图像了。

时间: 2024-10-18 07:12:44

Gprinter光栅位图点阵数据解析工具的相关文章

Request模块—数据解析工具

一.爬虫基本步骤 指定URL信息 发起请求 获取响应数据 对响应数据进行数据解析 持久化存储 二.数据解析 1. 正则表达式 (1) 基本语法 1. 单字符: . : 除换行以外所有字符 [] :[aoe] [a-w] 匹配集合中任意一个字符 \d :数字 [0-9] \D : 非数字 \w :数字.字母.下划线.中文 \W : 非\w \s :所有的空白字符包,括空格.制表符.换页符等等.等价于 [ \f\n\r\t\v]. \S : 非空白 2. 数量修饰: * : 任意多次 >=0 + :

iOS网络数据解析

iOS开发过程中,网络数据的传输过程一般是:客户端发送请求给服务器,服务器接收到客户端发送的网络请求后返回相应的数据.此时客户端需要把服务器返回的数据转化为前段和移动端开发中使用的数据格式(如OC/java).后台服务器一般使用php.java..net进行开发,而前段和移动端使用的一般是OC/JAVA/HTML/CSS/JS,做好前后端的数据交互极为重要,如今数据交互常用的就是JSON和XML.下面就iOS开发过程中的JSON解析和XML解析进行简单的说明. 一.JSON解析 JSON是一种轻

TableML-GUI篇(Excel编译/解析工具)

项目情况 本文接上篇TableML Excel编译/解析工具,本文主要介绍GUI工具的使用,及配置项,如果你想了解此工具更加详细的说明,请阅读上篇文章. 项目地址:https://github.com/zhaoqingqing/TableML 项目介绍和更新日志 项目介绍 TableML, Table Markup Language, 基于电子表格的标记语言, 类似JSON, XML, INI,TableML可以作为软件项目的配置标记语言, 与之不同的是,您可以使用Excel等电子表格编辑软件来

ImportTsv-HBase数据导入工具

一.概述 HBase官方提供了基于Mapreduce的批量数据导入工具:Bulk load和ImportTsv.关于Bulk load大家可以看下我另一篇博文. 通常HBase用户会使用HBase API导数,但是如果一次性导入大批量数据,可能占用大量Regionserver资源,影响存储在该Regionserver上其他表的查询,本文将会从源码上解析ImportTsv数据导入工具,探究如何高效导入数据到HBase. 二.ImportTsv介绍 ImportTsv是Hbase提供的一个命令行工具

JAVA - Sql解析工具fdb-sql-parser简单使用

由于想要解决Mybatis分页插件中count查询效率问题,因为order by很影响效率,所以需要一种方式处理sql,将order by 语句去掉. 试了好几个sql解析工具,最后选择了fdb-sql-parser. Maven依赖: <dependency> <groupId>com.foundationdb</groupId> <artifactId>fdb-sql-parser</artifactId> <version>1.

数据抽取工具——DMCTextFilter V4.2(纯文本抽出通用程序库)

DMCTextFilter V4.2是由北京红樱枫软件有限公司研制和开发的纯文本抽出通用程序库产品.本产品可以从各种各样的文档格式的数据中或从插入的OLE对象中,完全除掉特殊控制信息,快速抽出纯文本数据信息.便于用户实现对多种文档数据资源信息进行统一管理,编辑,检索和浏览.本产品采用了先进的多语言.多平台.多线程的设计理念,支持多国语言(英语,中文简体,中文繁体,日本语,韩国语),多种操作系统(Windows,Solaris,Linux,IBM AIX,Macintosh,HP-UNIX),多种

dom4j和jaxp解析工具的

dom4j解析中的几个对象 node --branch --document --element --commment --attribute --text branch --document --element jaxp解析中的几个对象 node --document --element --commment --attr --text dom4j解析 中所有对象都是node对象的子节点,也就是说它把说有对象都单独分离出来看成一个对象,而branch是一个对常用节点的封装和关联,如Elemen

Android JSON数据解析(GSON方式)

要创建和解析JSON数据,也可以使用GSON来完成.GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库.使用GSON,可以很容易的将一串JSON数据转换为一个Java对象,或是将一个Java对象转换为相应的JSON数据. 1.GSON的两个重要方法 在GSON的API中,提供了两个重要的方法:toJson()和fromJson()方法.其中,toJson()方法用来实现将Java对象转换为相应的JSON数据,fromJson()方法则用来实现将JSON数据转换

[转] 各种Json解析工具比较 - json-lib/Jackson/Gson/FastJson

JSON技术的调研报告 一 .各个JSON技术的简介和优劣1.json-libjson-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包,包括commons-beanutils.jar,commons-collections-3.2.jar,commons-lang-2.6.jar,commons-logging-1.1.1.jar,ezmorph-1.0.6.jar,对于复杂类型的转换,json-lib对于json转换成bean还有缺陷,比如