как реализовать побитовый цвет кодина в ежевике - PullRequest
0 голосов
/ 01 июня 2011

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

Код, который я реализую для изменения цвета изображения, выглядит следующим образом: Растровое изображение greyScale = новое растровое изображение (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 red = argb [i] >> 16 & 0xFF; int green = argb [i] >> 8 & 0xFF; int blue = 255-argb [i] & 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 работает над всем кодом для цветов.

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

1 Ответ

0 голосов
/ 03 января 2012

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

Каждый байт в 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 для замены пикселя.

...