Android: преобразование растрового изображения в монохромное растровое изображение (1 бит на пиксель)

Я хочу напечатать растровое изображение на мобильном Bluetooth-принтере (Bixolon SPP-R200) - в SDK нет методов directkt для печати изображения в памяти. Поэтому я подумал о преобразовании растрового изображения следующим образом:

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);

Однако - я не уверен в нескольких вещах:

В getPixels - имеет ли смысл просто передавать ширину в качестве аргумента "Stride"?Я предполагаю, что мне придется оценивать информацию о цвете каждого пикселя и переключать ее на черный или белый (и я бы записал это значение в новый массив целевых байтов, который я в конечном итоге передал бы в принтер)?Как наилучшим образом оценить информацию о цвете каждого пикселя, чтобы определить, должен ли он быть черным или белым? (Рендеринг растрового изображения - черная боль на белом фоне)

Этот подход имеет смысл вообще? Есть ли более простой способ? Недостаточно просто сделать растровое изображение черно-белым, основная проблема заключается в уменьшении информации о цвете для каждого пикселя в один бит.

ОБНОВИТЬ

По предложению Рувима я сначала преобразую растровое изображение в монохромное растровое изображение. и тогда я буду перебирать каждый пиксель:

    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;

Ответы на вопрос(4)

Ваш ответ на вопрос