如何从j2me中的png读取RGB数据

时间:2010-10-07 14:58:14

标签: java java-me

嘿,我使用j2me来读取图像

我想在像Darkenes这样的图像上做一些处理,点亮

我已经将图像作为输入流

        InputStream iStrm = getClass().getResourceAsStream("/earth.PNG");
         ByteArrayOutputStream bStrm = new ByteArrayOutputStream();

       int ch;

  while ((ch = iStrm.read()) != -1){
    bStrm.write(ch);


    byte imageData[] = bStrm.toByteArray();
   Image im = Image.createImage(imageData, 0, imageData.length);

如何获取RGB值或如何将一些值添加到像素数组中 imageData []因此它可以更亮或更暗,

是否有包含在我读过的输入流中的标题数据,当我添加一些值时会导致错误?

1 个答案:

答案 0 :(得分:0)

我认为你应该能够做到以下几点:

int width = im.getWidth();
int height = im.getHeight();
int[] rgbData = new int[width*height]; // since we are working with rgba

im.getRGB(rgbData, 0, width, 0, 0, width, height);

// now, the data is stored in each integer as 0xAARRGGBB, 
// so high-order bits are alpha channel for each integer

现在,如果您想将它们分成三个数组,每个通道一个,您可以执行以下操作:

int red[][] = new int[width][height];
int green[][] = new int[width][height];
int blue[][] = new int[width][height];

for (int i = 0; i < width; i++)
{
  for (int j = 0; j < height; j++)
  {
    red[i][j] = rgb[i*width + j] & 0xFF0000;
    green[i][j] = rgb[i*width + j] & 0xFF00;
    blue[i][j] = rgb[i+width + j] & 0xFF;
  }
}