ESC/POS 指令打印图片

wxf4155927 2014-08-27 10:16:07
要用ESC/POS 排令打印位图

指令说明:

ESC * m nL nH d1... dk
[名称] 选择位图模式
[格式] ASCII ESC * m nL nH d1...dk
Hex 1B 2A m nL nH d1...dk
Decimal 27 42 m nL nH d1...dk
[范围] m = 0, 1, 32, 33
0 ≤ nL ≤ 255
0 ≤ nH ≤ 3
0 ≤ d ≤255
[描述] 选择由 m 指定的一种位图模式,位图点数由nL和nH确定:

后面的nL,nH,及D1.DK怎么处理呀?

哪位有这方面的经验或DEMO?
...全文
3155 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuyang1981 2014-11-14
  • 打赏
  • 举报
回复
这个打印图像我做过,大致和15楼说的差不多,以下基于VB的写法 就是先获取图像数据,当然是把一张图全转成0,1,也就是白点,黑点来表示,然后把每8位转成一个十进制数 (打印时有一个要注意的就是把M置为十进制33,然后以高度24为一块进行处理,即) for i=top to height step 24 getpicdata hdc,j,24,width Print #HDC_Printer, Chr$(&H1B); "*"; Chr$(33); Chr$(xL); Chr$(xH); For i = 0 To UBound(buf) Print #HDC_Printer, Chr$(buf(i)); Next Print #HDC_Printer, Chr$(&HA); next
引用 15 楼 wewaa 的回复:
都说错了,这个是按位打印的,共9位(九针),最后一位控制打还是不打,其实就是8个点,做硬件的就是变态。话说楼主为什么要用指令打印?驱动容易多了。
wxf4155927 2014-08-30
  • 打赏
  • 举报
回复
搞定,结贴。。 虽然没用上,但还是谢谢各位! 思路跟13楼的差不多 先处理图片,变成黑白,然后按位检测颜色 黑色打印,白色不打印,组成点阵数组发送给打印机
wxf4155927 2014-08-29
  • 打赏
  • 举报
回复
命令是这个没错
haitao 2014-08-29
  • 打赏
  • 举报
回复
那估计是二进制字节了:
var
  s:string;

s:=chr(27)+chr(42)+chr(m)+chr(nL)+chr(nH)+...;
wxf4155927 2014-08-29
  • 打赏
  • 举报
回复
只有那些说明 有哪位朋友做过类似的吗?
haitao 2014-08-29
  • 打赏
  • 举报
回复
引用 4 楼 wxf4155927 的回复:
看来delphi 彻底没人关注了
看打印机的手册及demo程序 esc一般是 chr(27) nL,nH要看说明,是 字符串还是二进制
wxf4155927 2014-08-29
  • 打赏
  • 举报
回复
打印条码 或 打印字符这些我都测试过,就是图片打印出来是乱码
laowang2 2014-08-29
  • 打赏
  • 举报
回复
都说错了,这个是按位打印的,共9位(九针),最后一位控制打还是不打,其实就是8个点,做硬件的就是变态。话说楼主为什么要用指令打印?驱动容易多了。
mypiip 2014-08-29
  • 打赏
  • 举报
回复
关注一下。感觉应该是把位图处理成16进制数组?!
kevin_wzh 2014-08-29
  • 打赏
  • 举报
回复
给你一段下载位图的代码参考一下吧 pig.Assign(Image1.Picture.Bitmap); Image1.Picture.Bitmap.PixelFormat:=pf8bit; iwigth := Image1.Picture.Bitmap.Width; iheight := Image1.Picture.Bitmap.Height; temp1:= Hex2Char('1B')+Hex2Char('53')+ Hex2Char('1C')+Hex2Char('71')+Hex2Char('01')+Hex2Char(inttohex((iwigth div 8),2)) +Hex2Char('00')+Hex2Char(inttohex((iheight div 8),2))+Hex2Char('00'); for j := 0 to iwigth-1 do //512 begin for i := 0 to (iheight div 8)-1 do // 10 begin //cc.R * 0.299) + (cc.G * 0.587) + (cc.B * 0.114) //(c.R * 0.3 + c.G * 0.59 + c.B * 0.11); ds:=0; for l := 0 to 7 do begin PixPtr:= Image1.Picture.Bitmap.ScanLine[i*8+l]; icolor:=PixPtr[j]; k:= icolor;//GetRValue(icolor)*0.3+GetGValue(icolor)*0.59+GetGValue(icolor)*0.11 ; if k<=128 then dd:= 1 else dd:=0; dd:= dd shl (7-l); ds:=ds+dd; end; //temp2:= temp2+' '+ inttostr(icolor); m:= strtoint(FormatCurr('0',(ds))); temp1:= temp1+ char(m); end; end; pig.Width; pig.Height;
haitao 2014-08-29
  • 打赏
  • 举报
回复
引用 11 楼 wxf4155927 的回复:
命令是这个没错
把它发送到 串口或打印口,就行了 m、nL、nH都是整数变量
孤独de猫 2014-08-28
  • 打赏
  • 举报
回复
你在网上找找ecs/pos的指令集 ,在百度文库里面有。一般打印图片比较少,打印条码 或 打印 字的比较多些。
wxf4155927 2014-08-28
  • 打赏
  • 举报
回复
看来delphi 彻底没人关注了
wxf4155927 2014-08-27
  • 打赏
  • 举报
回复
wxf4155927 2014-08-27
  • 打赏
  • 举报
回复
有人做过类似的不?

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧