使用getPixel()方法提取的巨大负值

时间:2016-12-26 13:50:53

标签: android image colors pixel getpixel

我正在开发一个我正在开发的图像处理应用程序的问题(这里是新手)。我试图使用getPixel()方法提取特定像素的值。

我遇到了问题。我从这种方法得到的数字是一个巨大的负数,类似于-1298383。这是正常的吗?我该如何解决?

感谢。

3 个答案:

答案 0 :(得分:2)

我不是专家,但对我来说,看起来你得到的是十六进制值。也许你想要更像可理解的东西,比如每个RGB层的值。

要将解包像素转换为RGB值,您应该执行以下操作:

private short[][] red;
private short[][] green;
private short[][] blue;

 /** 
 * Map each intensity of an RGB colour into its respective colour channel
 */
private void unpackPixel(int pixel, int row, int col) {
    red[row][col] = (short) ((pixel >> 16) & 0xFF);
    green[row][col] = (short) ((pixel >> 8) & 0xFF);
    blue[row][col] = (short) ((pixel >> 0) & 0xFF);
}

在每个频道发生变化后,您可以打包像素。

/** 
 * Create an RGB colour pixel.
 */
private int packPixel(int red, int green, int blue) {
    return (red << 16) | (green << 8) | blue;
}

对不起,如果不是您想要的。

答案 1 :(得分:0)

您可以从视图中获取像素:

ImageView imageView = ((ImageView)v);
Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
int pixel = bitmap.getPixel(x,y);

现在您可以通过以下方式获取每个频道:

int redValue = Color.red(pixel);
int blueValue = Color.blue(pixel);
int greenValue = Color.green(pixel);

答案 2 :(得分:0)

getPixel()返回指定位置的颜色。如果 x y 超出界限(分别为负数或&gt; =宽度或高度),则会引发异常。

返回的颜色是非预乘的 ARGB值。