2015-08-06 3 views
2

У меня есть термопринтер X330, и мне нужно распечатать и изображение (растровое изображение), взятое с камеры Android, но я не могу ... Я всегда получаю символы в принтере.Android - Как распечатать изображение (Растр) на принтере Bluetooth (X330)?

В документации сказал:

печати растра битное изображение

  • Hex-1D 76 30 м хЬ хН YL уН d1, ... дк
  • 0 ≤ M ≤ 3, 48 ≤ M ≤ 51
  • 0 ≤ хЬ ≤ 255
  • 0 ≤ хН ≤ 255
  • 0 ≤ ≤ 255 YL
  • 0 ≤ D ≤255
  • к = (ХL + хН × 256) × (YL + уН × 256) (K ≠ 0)
  • хЬ, хН, выберите число битов данных (ХL + хН × 256) в горизонтальном направлении для битового изображения
  • yL, yH, выберите количество бит данных (yL + yH × 256) в вертикальном направлении для битового изображения
  • Если ширина области печати, заданная GS L и GS W меньше минимальной ширины, область печати расширяется до минимальной ширины только на соответствующей линии. Минимальная ширина означает 1 точку в нормальном (m = 0, 48) и двойной высоте (m = 2, 50), 2 точки в двойной ширине (m = 1, 49) и четверной (m = 3, 51).
  • данных за пределами области печати считываются и отбрасываются на дот-по-дот основе
  • Положения, при котором последующие символы должны быть напечатаны для растровых битового изображения задаются HT (горизонтальная табуляция), ESC $ (Установить абсолютное положение печати), ESC \ (Установить относительное положение печати) и GS L (Установить левое поле). Если позиция в которой последующие символы должны быть напечатаны не кратно 8, скорость печати может снизиться
  • ЭСС A (Выбрать обоснование) установка также эффективна на битных изображений растровых
  • Когда эта команда получила во время определения макроса принтер заканчивает определение макроса и начинает выполнять эту команду. Определение этой команды должно быть очищено
  • d указывает данные битового изображения. Установите время бит в 1, чтобы напечатать точку и установить ее на 0 не печатает точку.

Я знаю, что битмап нужно преобразовать, но я не могу получить правильный формат.

Кто-то может мне помочь !!!

Заранее спасибо

ответ

1

Я боролся с этим некоторое время назад, и в конце концов получил это работает. Мой термальный принтер не тот, который вы используете, но принцип должен оставаться тем же. Поэтому мой принтер работает через 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); 

rasterImage в основном настройка шестигранных данных, необходимых, чтобы сказать принтер, чем я хочу, чтобы напечатать растр битное изображение.Затем я читаю фотографию или изображение из внутреннего хранилища устройства и преобразую его в байты []. Затем я отправляю шестнадцатеричные данные rasterImage и bitmapdata на принтер.

Следует отметить, во-первых, вам необходимо преобразовать изображение, которое вы хотите распечатать, в одноцветное монохромное изображение, вы можете использовать краску для этого (просто сохраните изображение из краски в виде монохромного растрового изображения), вы нужно сделать это, потому что принтер может печатать только точку или нет, он не может печатать многослойные изображения и т. д. Во-вторых, вам нужно убедиться, что разрешение изображения кратно 8, причина этого связана с xL, xH, yL и yH на моем принтере, тот работает только в байтах, и поэтому у меня нет способа получить что-либо, кроме кратного 8. Таким образом, мое изображение было 256x256.

Сообщите мне, если у вас есть успех, и если вам нужна дополнительная помощь, дайте мне знать.

Я не включал какой-либо код USB, но просто использую ваше соединение Bluetooth для отправки данных аналогичным образом.