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

4

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

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

谢谢。

3个回答

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;
}

抱歉,如果这不是您要找的内容。

0

getPixel() 返回指定位置的颜色。如果 xy 超出边界(负数或大于等于宽度或高度),则会抛出异常。

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


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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接