Java Android-如何在蓝牙打印机(X330)上打印图像(光栅)?

Java Android-如何在蓝牙打印机(X330)上打印图像(光栅)?,java,android,printing,bluetooth,thermal-printer,Java,Android,Printing,Bluetooth,Thermal Printer,我有热敏打印机X330,我需要打印和图像位图从android相机,但我不能…我总是在打印机中得到符号 文件中说: 打印光栅位图像 六角1D 76 30米xL xH yL yH d1…dk 0≤ M≤ 3, 48 ≤ M≤ 51 0≤ xL≤ 255 0≤ xH≤ 255 0≤ 伊尔≤ 255 0≤ D≤255 k=xL+xH×256×yL+yH×256 k≠ 0 xL,xH,选择位图像水平方向上的数据位数xL+xH×256 yL,yH,选择位图像垂直方向上的数据位数yL+yH×256 如果GS

我有热敏打印机X330,我需要打印和图像位图从android相机,但我不能…我总是在打印机中得到符号

文件中说:

打印光栅位图像

六角1D 76 30米xL xH yL yH d1…dk 0≤ M≤ 3, 48 ≤ M≤ 51 0≤ xL≤ 255 0≤ xH≤ 255 0≤ 伊尔≤ 255 0≤ D≤255 k=xL+xH×256×yL+yH×256 k≠ 0 xL,xH,选择位图像水平方向上的数据位数xL+xH×256 yL,yH,选择位图像垂直方向上的数据位数yL+yH×256 如果GS L和GS W设置的打印区域宽度小于最小宽度, 打印区域仅在相关行上扩展到最小宽度。 最小宽度是指正常m=0、48和双倍高度m=2时的1个点, 50,两个点,双倍宽度m=1,49和四倍宽度m=3,51模式。 打印区域外的数据逐点读取和丢弃 为光栅位打印后续字符的位置 图像由HT水平选项卡、ESC$设置绝对打印位置指定, ESC \设置相对打印位置,GS L设置左边距。如果职位在 要打印的后续字符不是8的倍数,即打印速度 可能下降 ESC a选择对正设置也对光栅位图像有效 在宏定义过程中收到此命令时,打印机将结束宏 定义,并开始执行此命令。这个定义 命令应该被清除 d表示位图像数据。将时间位设置为1打印一个点并将其设置为0 不打印点。 我知道位图需要转换,但我无法获得正确的格式

有人可以帮我


提前感谢

不久前,我一直在努力解决这个问题,并最终让它工作起来。我的热敏打印机和你用的不一样,但原理应该是一样的。所以我的打印机是通过USB工作的,下面是我发送给打印机打印图像的内容

byte[] rasterImage = {0x1D, 0x76, 0x30, 0x30, 0x20, 0x00, 0x00, 0x01};

File file = new File("/mnt/sdcard/1.bmp");
int size = (int) file.length();
bitmapdata = new byte[size];
try
{
    BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file));
    buf.read(bitmapdata, 0, bitmapdata.length);
    buf.close();
} catch (FileNotFoundException e)
{

} catch (IOException e)
{

}

connection.bulkTransfer(endpoint, rasterImage, rasterImage.length, TIMEOUT);
connection.bulkTransfer(endpoint, bitmapdata, bitmapdata.length, TIMEOUT);
光栅图像基本上是十六进制数据的设置,需要告诉打印机我想要打印一个光栅位图像。然后我从设备的内部存储器中读取照片或图像,并将其转换为字节[]。然后我将光栅图像十六进制数据和位图数据发送到打印机

需要注意的是,首先,您需要将要打印的图像转换为1位深度的单色图像,您可以使用paint将图像从paint保存为单色位图,您需要这样做,因为打印机只能打印一个点或没有点,无法打印分层图像等。其次,你需要确保图像分辨率是8的倍数,这是因为我的打印机上的xL、xH、yL和yH计算,一个只能以字节为单位,所以除了8的倍数,我没有办法得到任何东西。所以我的图像是256x256

让我知道你是否成功,如果你需要更多的帮助让我知道

我没有包含任何USB代码,只是使用蓝牙连接以类似的方式发送数据