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工具比较,图像并未有任何损失,如下图所示。

本次任务基本完成并达到预期效果。第一次接触热敏打印机,算是有了一个初步的认识,后面有时间可以考虑把这个事情反过来做一遍,即把任意图片文件转换为光栅位图点阵数据,这样就可以打印二维码或其他复杂图像了。
Gprinter热敏打印机光栅位图点阵数据解析工具的更多相关文章
- Request模块—数据解析工具
一.爬虫基本步骤 指定URL信息 发起请求 获取响应数据 对响应数据进行数据解析 持久化存储 二.数据解析 1. 正则表达式 (1) 基本语法 1. 单字符: . : 除换行以外所有字符 [] :[a ...
- TCP 服务端接收数据解析工具类
package com.ivchat.common.util; import java.io.BufferedReader;import java.io.IOException;import java ...
- cJONS序列化工具解读二(数据解析)
cJSON数据解析 关于数据解析部分,其实这个解析就是个自动机,通过递归或者解析栈进行实现数据的解析 /* Utility to jump whitespace and cr/lf *///用于跳过a ...
- 一篇文章看懂TPCx-BB(大数据基准测试工具)源码
TPCx-BB是大数据基准测试工具,它通过模拟零售商的30个应用场景,执行30个查询来衡量基于Hadoop的大数据系统的包括硬件和软件的性能.其中一些场景还用到了机器学习算法(聚类.线性回归等).为了 ...
- [开源]C#二维码生成解析工具,可添加自定义Logo
二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字 ...
- Json解析工具Jackson(简单应用)
原文http://blog.csdn.net/nomousewch/article/details/8955796 概述 Jackson库(http://jackson.codehaus.org),是 ...
- 数据解析(XML和JSON数据结构)
一 解析 二 XML数据结构 三 JSON 数据结构 一 解析 1 定义: 从事先规定好的格式中提取数据 解析的前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照 ...
- iOS-数据持久化基础-JSON与XML数据解析
解析的基本概念 所谓“解析”:从事先规定好的格式串中提取数据 解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据 iOS开发常见的解析:XML解析.JSON解析 一.X ...
- JSON数据解析 基础知识及链接收集
JSON数据解析学习 JSON介绍 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式. JSON 是存储和交换文本信息的语法.类似 XML.但是JSON 比 ...
随机推荐
- Pizza Pie Charts – 基于 Snap SVG 框架的响应式饼图
Pizza Pie Charts 是一个基于 Adobe 的 Snap SVG 框架的响应式饼图插件.它着重于集成 HTML 标记和 CSS,而不是 JavaScript 对象,当然Pizza Pie ...
- html4基础知识梳理
基础的html知识,只放Xmind的截图. 第一部分: 第二部分: 某些标签的使用示例及注意事项,在印象笔记里.
- 设置css通用字体
font-family: "Helvetica Neue","Arial","PingFang SC","Hiragino San ...
- canvas画布在主流浏览器中的尺寸限制
通过测试发现,canvas在不同浏览器下面有不同的最大尺寸限制. 大家都知道,canvas有自身的width,height属性来控制尺寸,用css的width,height,控制显示的大小.可以理解为 ...
- 分位数(quantile)
---------------------------------------------------------------------------------------------------- ...
- Gartner:用自适应安全架构来应对高级定向攻击
发表于2015-06-24 摘要:当前的防护功能难以应对高级的定向攻击,由于企业系统所受到的是持续攻击,并持续缺乏防御力,面向“应急响应”的特别方式已不再是正确的思维模式,Garnter提出了用自 ...
- VMware Data Recovery备份恢复vmware虚拟机
VMware Data Recovery 是VMware虚拟机备份工具,可创建虚拟机备份,同时不会中断虚拟机的使用或虚拟机提供的数据和服务.Data Recovery 管理现有备份,并在这些备份过时后 ...
- 对URL编码
url支持26个英文字母.数字和少数几个特殊字符,因此,对于url中包含非标准url的字符时,就需要对其进行编码.iOS中提供了函数stringByAddingPercentEscapesUsingE ...
- Android 多媒体播放API简介
本文调用android的媒体播放器实现一些音乐播放操作 项目布局: <LinearLayout xmlns:android="http://schemas.android.com/ap ...
- swift学习之UI控件(一)
// // ViewController.swift // test // // Created by chuangqu on 15/7/23. // Copyright (c) 2015年 ...