ESC/POS 指令打印图片,该如何解决
ESC/POS 指令打印图片
要用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?
------解决方案--------------------
你在网上找找ecs/pos的指令集 ,在百度文库里面有。一般打印图片比较少,打印条码 或 打印 字的比较多些。
------解决方案--------------------
看打印机的手册及demo程序
esc一般是 chr(27)
nL,nH要看说明,是 字符串还是二进制
------解决方案--------------------
那估计是二进制字节了:
------解决方案--------------------
给你一段下载位图的代码参考一下吧
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;
------解决方案--------------------
都说错了,这个是按位打印的,共9位(九针),最后一位控制打还是不打,其实就是8个点,做硬件的就是变态。话说楼主为什么要用指令打印?驱动容易多了。
要用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?
------解决方案--------------------
你在网上找找ecs/pos的指令集 ,在百度文库里面有。一般打印图片比较少,打印条码 或 打印 字的比较多些。
------解决方案--------------------
看打印机的手册及demo程序
esc一般是 chr(27)
nL,nH要看说明,是 字符串还是二进制
------解决方案--------------------
那估计是二进制字节了:
var
s:string;
s:=chr(27)+chr(42)+chr(m)+chr(nL)+chr(nH)+...;
------解决方案--------------------
给你一段下载位图的代码参考一下吧
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;
------解决方案--------------------
都说错了,这个是按位打印的,共9位(九针),最后一位控制打还是不打,其实就是8个点,做硬件的就是变态。话说楼主为什么要用指令打印?驱动容易多了。