Gprinter光柵點陣圖點陣數據解析工具

来源:http://www.cnblogs.com/we-hjb/archive/2016/06/18/5596880.html
-Advertisement-
Play Games

本文簡單介紹了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工具比較,圖像並未有任何損失,如下圖所示。

  本次任務基本完成並達到預期效果。第一次接觸熱敏印表機,算是有了一個初步的認識,後面有時間可以考慮把這個事情反過來做一遍,即把任意圖片文件轉換為光柵點陣圖點陣數據,這樣就可以列印二維碼或其他複雜圖像了。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.ASCII 功能:​得到給定字元的字元編碼 語法:ASCII(CHAR) 例句: SQL> SELECT ASCII('A') FROM DUAL; ASCII('A') ---------- 65 2.CHR 功能:​得到給定數字對應的字元,與ASCII是一對反函數 語法... ...
  • 埠映射 一:什麼是埠映射 埠映射就是將外網主機的IP地址的一個埠映射到內網中一臺機器,提供相應的服務。當用戶訪問該IP的這個埠時,伺服器自動將請求映射到對應區域網內部的機器上。 二:怎樣通過埠映射將內網埠映射到外網 1. 首先登陸你的路由器,具體的地址看路由器反面說明 2.點擊左邊導航 ...
  • 程式猿這個行業素來有鄙視鏈存在,從開發語言間的鄙視到IDE之爭從來沒斷過。真不知道有什麼好爭的,就像找結婚對象一樣,適合自己的就是最好的。 ...
  • 推薦:http://www.cnblogs.com/roucheng/p/3470287.html ...
  • Linux中常用的查看系統信息的命令 Linux中常用的查看系統信息的命令 Linux中常用的查看系統信息的命令 導讀 Linux是一個神奇而又高效的操作系統,學完Linux對Linux系統有一個熟悉的瞭解後,你需要瞭解下這些實用的查看系統信息的命令。 查看系統版本命令 uname 談到系統版本就一 ...
  • 文件打包與解壓縮 : Windows上常見的壓縮文件尾碼有\ .zip(zip程式打包壓縮), \ .rar(rar程式壓縮), \ .7z(7zip程式壓縮),在Linux上常見的還有\ .gz(gzip程式壓縮,GNU zip), \ .xz(xz程式壓縮), \ .bz2(bzip2壓縮), ...
  • 一、環境變數 : Shell中的變數也有不同的數據類型,不用專門指定類型名,可以參與運算,有作用域限制。 創建一個變數 可以不用專門聲明,可以即用即創建 變數賦值 echo $tmp 讀取變數的值 Notes: 變數名不能用數字開頭,且只能是英文字母,數字,下劃線 Shell的環境變數作用於自身及它 ...
  • 對於很多嵌入式驅動開發者,要進行很多次調試,如果nfs搭建不起來,那麼對開發是很不方便的。經過三天,我終於把自己編的內核下載到開發板,並實現了nfs文件系統的掛載。今天把過程寫下來。 思路 一 編譯arm內核 #make menuconfig ARCH=arm //編譯內核的配置菜單 (1)把gen ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...