Я хочу напечатать Bitmap на мобильном принтере Bluetooth (Bixolon SPP-R200) - SDK не предлагает прямые методы для печати изображения в памяти . Итак, я подумал о преобразовании растрового изображения следующим образом:
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
в монохромное растровое изображение. Я рисую черный текст на данном растровом изображении, используя холст, который хорошо работает. Однако, когда я конвертирую приведенный выше Bitmap в ByteArray, кажется, что принтер не может обрабатывать эти байты.Я подозреваю, что мне нужен массив с одним битом на пиксель (пиксель будет либо белым = 1, либо черным = 0).
Поскольку кажется, что нет удобного, нестандартного способа сделать это, у меня была одна идея:
bitmap.getPixels(pixels, offset, stride, x, y, width, height)
получить пиксели. Я предполагаю, что мне пришлось бы использовать его следующим образом:
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int [] pixels = new int [width * height];
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
Однако - я не уверен в некоторых вещах:
Имеет ли вообще смысл этот подход? Есть способ попроще? Недостаточно просто сделать растровое изображение черно-белым, основная проблема - уменьшить информацию о цвете для каждого пикселя до одного бит.
ОБНОВЛЕНИЕ
Как предложил Рубен, я сначала конвертирую растровое изображение в монохромное растровое изображение. а затем я буду перебирать каждый пиксель:
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int[] pixels = new int[width * height];
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
// Iterate over height
for (int y = 0; y < height; y++) {
int offset = y * height;
// Iterate over width
for (int x = 0; x < width; x++) {
int pixel = bitmap.getPixel(x, y);
}
}
Теперь Рубен предложил «прочитать самый младший байт каждого 32-битного пикселя» - это связано с моим вопросом о том, как оценивать цвет пикселя. Мой последний вопрос по этому поводу: получаю ли я самый младший байт просто так:
// Using the pixel from bitmap.getPixel(x,y)
int lowestByte = pixel & 0xff;