打印图片如下:
std::vector<QByteArray> GuiLauncher::ConvertImageToByteArray(
const QImage &img) {
std::vector<QByteArray> cmd_serial;
// just print image !!
int w = img.width();
int rw = w / 8;
int rh = img.height();
int h = ((rh + 23) / 24) * 24;
int32_t img_seg_height = h;
cmd_serial.push_back(PosCmd({27, 64}));
// recv data !!
QByteArray cmd;
int32_t img_seg_count = h / img_seg_height;
for (int si = 0; si < img_seg_count; si++) {
cmd.clear();
cmd.append(29);
cmd.append(118);
cmd.append(48);
cmd.append((char)0);
cmd.append((char)(rw % 256));
cmd.append((char)(rw / 256));
cmd.append((char)(img_seg_height % 256));
cmd.append((char)(img_seg_height / 256));
for (int ph = 0; ph < img_seg_height; ph++) {
for (int rwi = 0; rwi < rw; rwi++) {
char t = 0x00;
for (int j = 0; j < 8; ++j) {
int image_x = rwi * 8 + j;
int image_y = ph + si * img_seg_height;
int v;
if (image_y >= rh) {
v = 0;
} else {
v = qBlue(img.pixel(image_x, image_y)) < 0xc0 ? 1 : 0;
}
t |= (v << (7 - j));
}
cmd.append(t);
}
}
cmd_serial.push_back(cmd);
}
cmd_serial.push_back(PosCmd({29, 86, 66, 0}));
return cmd_serial;
}
其中, cmd_serial 为 pos 命令序列, 按照顺序发送到 pos 机就行了