2021SC@SDUSC Zxing开源代码(十六)PDF417二维码(二)
2021SC@SDUSC
目錄
- 一、BarcodeMatrix
- 二、BarcodeRow
- 三、Compaction
- 四、Dimensions
- 五、PDF417ErrorCorrection
- 六、PDF417HighLevelEncoder
前言:本篇博客繼續介紹PDF417二維碼的編碼步驟過程。
一、BarcodeMatrix
BarcodeMatrix類以易于訪問的格式保存條形碼的所有信息。
包括以下四個成員變量,分別表示二維碼相應的矩陣、當前行、二維碼的高和寬。
其構造函數為:
height和width分別為矩陣的高度(行)和寬度(列)。
二、BarcodeRow
BarcodeRow類用來創建條形碼的行。
其成員變量有:
private final byte[] row;private int currentLocation;主要方法有:
其中,x表示在條中的位置;black為一個布爾值,如果條為黑色,則為真;如果條為白色,則為假;width表示條寬為多少個點。
set(int x, boolean black) 方法用來設置欄中的特定位置;addBar(boolean black, int width) 用來添加條。
private void set(int x, boolean black) {row[x] = (byte) (black ? 1 : 0);}void addBar(boolean black, int width) {for (int ii = 0; ii < width; ii++) {set(currentLocation++, black);}}getScaledRow(int scale)方法用于縮放行,scale 表示縮放圖像的大小,必須大于或等于1;此函數返回縮放的行。
byte[] getScaledRow(int scale) {byte[] output = new byte[row.length * scale];for (int i = 0; i < output.length; i++) {output[i] = row[i / scale];}return output;}三、Compaction
Compaction類是一個枚舉類,用來表示可能的PDF417條碼壓縮類型。
一共有四種類型: AUTO、TEXT、BYTE、NUMERIC
四、Dimensions
Dimensions是數據對象,用于指定PDF417條形碼的最小行數和最大列數。
四個成員變量分別表示最小列數、最大列數、最小行數、最大行數。
public final class Dimensions {private final int minCols;private final int maxCols;private final int minRows;private final int maxRows;public Dimensions(int minCols, int maxCols, int minRows, int maxRows) {this.minCols = minCols;this.maxCols = maxCols;this.minRows = minRows;this.maxRows = maxRows;}public int getMinCols() {return minCols;}public int getMaxCols() {return maxCols;}public int getMinRows() {return minRows;}public int getMaxRows() {return maxRows;} }五、PDF417ErrorCorrection
PDF417ErrorCorrection類為PDF417的糾錯碼,遵循ISO/IEC 15438:2001(E)第4.10章所述算法。
getErrorCorrectionCodewordCount(int errorCorrectionLevel) 用來確定指定糾錯級別的糾錯碼字數。
errorCorrectionLevel 為錯誤更正級別(0-8);
函數返回為糾錯而生成的碼字數。
getRecommendedMinimumErrorCorrectionLevel(int n)函數返回ISO/IEC 15438:2001(E)附錄E中所述的建議最小錯誤糾正水平。
n 為數據碼字的數量。
generateErrorCorrection(CharSequence dataCodewords, int errorCorrectionLevel)函數根據ISO/IEC 15438:2001(E)中的4.10生成糾錯碼字。
dataCodewords 為數據碼字數據碼字;errorCorrectionLevel 為錯誤更正級別(0-8)。
六、PDF417HighLevelEncoder
PDF417HighLevelEncoder類為PDF417的高級編碼器。
含有多個成員變量。
| TEXT_COMPACTION | 0 | 文本壓縮代碼 |
| BYTE_COMPACTION | 1 | 字節壓縮代碼 |
| NUMERIC_COMPACTION | 2 | 數字壓縮代碼 |
| SUBMODE_ALPHA | 0 | 文本壓縮子模式Alpha |
| SUBMODE_LOWER | 1 | 文本壓縮子模式下 |
| SUBMODE_MIXED | 2 | 文本壓縮子模式混合 |
| SUBMODE_PUNCTUATION | 3 | 文本壓縮子模式標點符號 |
| LATCH_TO_TEXT | 900 | 模式鎖存到文本壓縮模式 |
| LATCH_TO_BYTE_PADDED | 901 | 模式鎖存到字節壓縮模式(字符數不是6的倍數) |
| LATCH_TO_NUMERIC | 902 | 模式鎖存到數字壓縮模式 |
| SHIFT_TO_BYTE | 913 | 模式轉換為字節壓縮模式 |
| LATCH_TO_BYTE | 924 | 模式鎖存到字節壓縮模式(字符數為6的倍數) |
| ECI_USER_DEFINED | 925 | 用戶定義擴展信道解釋(ECI)的標識符 |
| ECI_GENERAL_PURPOSE | 926 | 通用ECO格式的標識符 |
| ECI_CHARSET | 927 | 代碼頁字符集的ECI標識符 |
| TEXT_MIXED_RAW | — | 文本壓縮混合子模式的原始代碼表 |
| TEXT_PUNCTUATION_RAW | — | 文本壓縮的原始代碼表:標點子模式 |
成員函數為:
| encodeHighLevel(String msg, Compaction compaction, Charset encoding) | 使用ISO/IEC 15438:2001(E)附錄P中描述的算法對PDF417消息執行高級編碼。如果已選擇字節壓縮,則僅使用字節壓縮。返回編碼消息(字符值范圍從0到928) |
| encodeText(CharSequence msg, int startpos,int count,StringBuilder sb, int initialSubmode) | 使用文本壓縮對部分信息進行編碼。返回此方法結束時的文本子模式 |
| encodeBinary(byte[] bytes, int startpos,int count,int startmode,StringBuilder sb) | 使用字節壓縮對部分信息進行編碼。Unicode字符將使用cp437代碼頁轉換為二進制。返回接收編碼的碼字。 |
| determineConsecutiveDigitCount(CharSequence msg, int startpos) | 確定可使用數字壓縮編碼的連續字符數。返回請求的字符數。 |
| determineConsecutiveTextCount(CharSequence msg, int startpos) | 確定可使用文本壓縮編碼的連續字符數。返回請求的字符數。 |
| determineConsecutiveBinaryCount(String msg, int startpos, Charset encoding) | 確定可使用二進制壓縮編碼的連續字符數。返回請求的字符數。 |
總結
以上是生活随笔為你收集整理的2021SC@SDUSC Zxing开源代码(十六)PDF417二维码(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python调用matlab环境配置、非
- 下一篇: 初识MySQL数据库