2011-06-01 39 views
0

我是新来blackberry.Currently我我在位图颜色编码如何实现按位色打号在黑莓

对此我实施改变图像色彩的代码工作如下: 位图灰度=新位图(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阿尔法= 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如何处理整个颜色代码。

问候 Pinkesh古普塔

回答

0

谢谢,我使用你的代码有一些修改。为了回答您的问题,

在ARGB每个字节是表示0xAARRGGBB格式一个像素的32位的值:对于透明不透明

  • 8 0和255:

    • 8位alpha(透明度)位红
    • 8位绿色
    • 8位蓝色

    所以0xFFFFFFFF的是不透明的白色。

    的代码来提取值的工作原理如下: 要获得APHA值,由24个地方只留下前8位

    int alpha = argb[i] >> 24 
    

    为了得到红右移一切,由16右移,留下前16位。然后用AND运算符清空前8位。这使得第二个8位

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

    对于绿色,由8位,空出前16位的转变,留下第三个8位

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

    终于为蓝色,只空出的前24名位

    int blue = argb[i] & 0xFF; 
    

    此时您可以更改alpha,红色,绿色和蓝色值。我正在使用

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

    获取位图的灰度版本。

    最后,做出了新的价值,每一个部分转移到正确的位置,并塞给他们(这恰好是同在这种情况下,将它们添加)

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

    然后设置argb[i] = newval更换像素。