как реализовать побитовый цветовой код в Blackberry

Я новичок в Blackberry. В настоящее время я работаю над кодированием цвета растрового изображения

Код, который я использую для изменения цвета изображения, выглядит следующим образом: Bitmap greyScale = new Bitmap (original.getWidth (), original.getHeight ());

    int[] argb = new int[original.getWidth() * original.getHeight()];

    original.getARGB(argb, 0, original.getWidth(), 0, 0, original.getWidth(), original.getHeight());
    for (int i = argb.length - 1; i >= 0; --i)

{int alpha = argb [i] >> 24; int красный = argb [я] >> 16 & 0xFF; int зеленый = argb [я] >> 8 & 0xFF; интервал синий = 255-аргумент [я] & 0xFF;

         int  grey = (int) (0.3 * red + 0.59 * green + 0.11 * blue);

        int red2 = red * contrast/10+brightness;
        if (red2>0xFF) red2 = 0xFF;
        if (red2<0) red2 = 0;
        int green2 = green * contrast/10+brightness;
        if (green2>0xFF) green2 = 0xFF;
        if (green2<0) green2 = 0;
        int blue2 = blue * contrast/10+brightness;
        if (blue2>0xFF) blue2 = 0xFF;
        if (blue2<0) blue2 = 0;

        int composite = (alpha << 24) | (red2 << 16) | (green2 << 8) | blue2|red|green;
        argb[i] = composite;
    }

    greyScale.setARGB(argb, 0, original.getWidth(), 0, 0, original.getWidth(), original.getHeight());

    return greyScale;
}

Я умею применять этот метод, а также могу получать различные цвета. Но может ли кто-нибудь мне помочь в том, как Argb работает над всем кодом для цветов.

с уважением Пинкеш Гупта


person Pinkesh Gupta    schedule 01.06.2011    source источник


Ответы (1)


Спасибо, я использую ваш код с некоторыми изменениями. Чтобы ответить на ваш вопрос,

Каждый байт в argb - это 32-битное значение, представляющее один пиксель в формате 0xAARRGGBB:

  • 8 бит альфа (прозрачность): 0 для прозрачного и 255 для непрозрачного
  • 8 бит красный
  • 8 бит зеленый
  • 8 бит синий

Таким образом, 0xFFFFFFFF будет непрозрачным белым.

Код для извлечения значений работает следующим образом: чтобы получить значение apha, сдвиньте все вправо на 24 разряда, оставив только первые 8 бит.

int alpha = argb[i] >> 24

Чтобы получить красный цвет, сдвиньте вправо на 16, оставив старшие 16 бит. Затем удалите верхние 8 бит с помощью оператора AND. Это оставляет вторые 8 бит

int red = argb[i] >> 16 & 0xFF

Для зеленого цвета сдвинуть на 8 бит и очистить первые 16 бит, оставив третьи 8 бит.

int green = argb[i] >> 8 & 0xFF

И, наконец, для синего цвета просто удалите верхние 24 бита.

int blue = argb[i] & 0xFF;

На этом этапе вы можете изменить значения альфа, красного, зеленого и синего цветов. я использую

int grey = ( red + green + blue ) / 3;
red = grey;
green = grey;
red = grey;

Чтобы получить версию растрового изображения в оттенках серого.

Наконец, чтобы создать новое значение, переместите каждую часть в нужное место и наложите их друг на друга (что в данном случае совпадает с их добавлением)

int newval = (alpha << 24) | (red << 16) | (green << 8) | blue;

Затем установите argb[i] = newval для замены пикселя.

person Alftheo    schedule 03.01.2012