android Растровое изображение в формате RGB565 - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь отобразить изображение на роботе Anki Vector. My Android app dr aws растровое изображение с холста, а затем использует метод createBitmap для преобразования его в формат RGB_565. Поскольку отображение здесь указано как RGB565: https://vector.ikkez.de/generated/anki_vector.screen.html#module -anki_vector.screen

createBitmap (width, height, Bitmap.Config.RGB_565);

Результат кажется успешным но цветовые каналы неверны.

RGB заказывался как BRG. В качестве обходного пути я соответственно поменял каналы местами. Но теперь оранжевый и желтый цвета, кажется, поменялись местами. Когда я рисую оранжевым, дисплей показывает желтый. Когда я рисую желтым, он становится оранжевым. В чем может быть проблема?

Для переключения каналов я использовал следующий код:

public Bitmap swapC(Bitmap srcBmp) {

    int width = srcBmp.getWidth();
    int height = srcBmp.getHeight();

    float srcHSV[] = new float[3];
    float dstHSV[] = new float[3];

    Bitmap dstBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);

    for (int row = 0; row < height; row++) {
        for (int col = 0; col < width; col++) {
            int pixel = srcBmp.getPixel(col, row);
            int alpha = Color.alpha(pixel);
            int redC = Color.red(pixel);
            int greenC = Color.green(pixel);
            int blueC = Color.blue(pixel);
            dstBitmap.setPixel(col, row, Color.argb(alpha,blueC,redC,greenC));
        }
    }

    return dstBitmap;
}

1 Ответ

0 голосов
/ 14 июля 2020

Я использовал обходной путь в качестве решения; разделение значений цветового канала на 8:

public Bitmap swapC(Bitmap srcBmp) {

    int width = srcBmp.getWidth();
    int height = srcBmp.getHeight();

    float srcHSV[] = new float[3];
    float dstHSV[] = new float[3];

    Bitmap dstBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

    for (int row = 0; row < height; row++) {
        for (int col = 0; col < width; col++) {
            int pixel = srcBmp.getPixel(col, row);
            int alpha = Color.alpha(pixel);
            int redC = Color.red(pixel);
            int greenC = Color.green(pixel);
            int blueC = Color.blue(pixel);
            dstBitmap.setPixel(col, row, Color.argb(alpha,blueC/8,redC/8,greenC/8));
        }
    }

    return dstBitmap;
}
...