Байтовые данные QR-кодаAndroid

Форум для тех, кто программирует под Android
Ответить
Гость
 Байтовые данные QR-кода

Сообщение Гость »

У меня есть образец QR-кода производителя для мобильного принтера (ниже). Что мне нужно знать, так это как создать новый QR-код в том же формате? Как мне создать QR-код в этом формате (на самом деле я бы предпочел массив байтов).

Что меня смущает, так это шестнадцатеричные данные: они не квадратные и не представляют «включения» и «выключения», как я ожидал бы от QR-кода. Я пробовал использовать Zxing:

public byte[] CreateQRCode()
{
Charset charset = Charset.forName("UTF-8");
CharsetEncoder encoder = charset.newEncoder();
byte[] b = null;
try {
// Convert a string to UTF-8 bytes in a ByteBuffer
ByteBuffer bbuf = encoder.encode(CharBuffer.wrap("utf 8 characters - i used hebrew, but you should write some of your own language characters"));
b = bbuf.array();
} catch (CharacterCodingException e) {
System.out.println(e.getMessage());
}

String data;
try {
data = new String(b, "UTF-8");
// get a byte matrix for the data
BitMatrix matrix = null;
int h = 100;
int w = 100;
com.google.zxing.Writer writer = new MultiFormatWriter();
try {
Hashtable hints = new Hashtable(2);
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
matrix = writer.encode(data,
com.google.zxing.BarcodeFormat.QR_CODE, w, h, hints);
} catch (com.google.zxing.WriterException e) {
System.out.println(e.getMessage());
}
//matrix.get(x, y) returns a boolean
//matrix.getRow(arg0, arg1) takes a BitRow as a parameter - not sure how to use that method
} catch (UnsupportedEncodingException e) {
System.out.println(e.getMessage());
}
}


Что сбивает с толку в коде zxing, так это то, что он принимает ширину и высоту в качестве параметра... они написали эту библиотеку только для того, чтобы она создавала изображения?

Шестнадцатеричный QR-код:

1B 4B 2E 00 00 00 3F 3F 30 30 33 33 33 33 33 33 30 30 3F 3F 00 00 00 00 0C 0C 0F 0F 30 30 03 03 00 00 3F 3F 30 30 33 33 33 33 33 33 30 30 3F 3F 00 00 0D 1B 4B 2E 00 00 00 FF FF 03 03 F3 F3 F3 F3 F3 F3 03 03 FF FF 00 00 CF КФ ФК ФК 3Ф 3Ф 0C 0C CF CF 00 00 FF FF 03 03 F3 F3 F3 F3 F3 F3 03 03 FF FF 00 00 0D 1B 4B 2E 00 00 00 0F 0F 3C 3C 3C 3C 0C 0C 00 00 0F 0F 33 33 00 00 CC СС ФК ФК CF CF 3C 3C 00 00 0F 0F 3C 3C 3F 3F 03 03 33 33 00 00 0C 0C 0F 0F 00 00 0D 1B 4B 2E 00 00 00 C3 C3 F3 F3 33 33 33 33 C3 C3 03 03 33 3 3 Ф0 Ф0 0С 0С ФК ФК 03 03 CC CC FF FF F0 F0 F3 F3 F0 F0 30 30 FC FC 0C 0C 3C 3C 3F 3F 00 00 0D 1B 4B 2E 00 00 00 FF FF 00 00 3F 3F 3F 3F 3F 3F 00 00 FF 00 00 03 03 Ф0 F0 3C 3C FF FF F3 F3 0F 0F 3C 3C 03 03 C3 C3 CF CF 00 00 C3 C3 33 33 00 00 0D 1B 4B 2E 00 00 00 F0 F0 F0 30 30 30 30 30 30 30 30 30 30 F0 F0 00 00 С0 С0 C0 C0 C0 C0 F0 F0 30 30 F0 F0 F0 F0 F0 F0 30 30 F0 F0 00 00 00 00 30 30 00 00 0D

Изображение:

Изображение


РЕДАКТИРОВАТЬ

Это документация:

3.24 ESC K Nl Nh d1 d2….dK

[Имя] выбор режима растровой печати 1

[Формат] ASCII ESC K nL nH d1….dK

Hex 1B 4B nL nH d1…. dK

Десятичный 27 75 nL nH d1….dK

[Диапазон]

0 ≤ nL ≤ 255

0 ≤ nH ≤ 1

0 ≤ d ≤ 255

[Описание] максимальная высота этой команды — 8 точек, а максимальная ширина — в зоне печати;

nL nH — это младший и старший бит бессимвольного растрового изображения, они представляют точки в растровом изображении.

[Примечание]

• Эта команда контролируется командой усиления символа;

Когда принтеры адаптируют команду обратной печати, это растровое изображение будет напечатано снизу вверх.


[Program example ]
Unsigned char Str[30];
Unsigned char i=0;
Str[i++] = 0x1B;
Str[i++] = 0x4B;
Str[i++] = 15; print 15-dot wide bitmap;
Str[i++] = 0x7C; Str[i++] = 0x44; Str[i++] = 0x44; Str[i++] = 0xFF;
Str[i++] = 0x44; Str[i++] = 0x44; Str[i++] = 0x7C; Str[i++] = 0x00;
Str[i++] = 0x41; Str[i++] = 0x62; Str[i++] = 0x54; Str[i++] = 0XC8;
Str[i++] = 0x54; Str[i++] = 0x62; Str[i++] = 0x41; Str[i++] = 0x0D;
SendDataToPrinter(Str,i); send bitmap command;


Подробнее здесь: https://stackoverflow.com/questions/180 ... -byte-data
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»