ESC POS 指令打印图片

打印图片如下:

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 机就行了 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值