使用 getPixel() 方法提取的巨大负值
Huge negative values extracted by using getPixel() method
我正在开发的图像处理应用程序有问题(这里是新手)。我正在尝试使用 getPixel()
方法提取特定像素的值。
不过我遇到了问题。我从这种方法中得到的数字是一个巨大的负数,类似于 -1298383。这是正常的吗?我该如何解决?
谢谢。
您可以像这样从视图中获取像素:
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);
getPixel()
returns 指定位置的颜色。如果 x 或 y 超出范围(分别为负值或 >= 宽度或高度),则抛出异常。
返回的颜色是非预乘 ARGB 值。
我不是专家,但对我来说,您似乎获得了十六进制值。也许您想要更可以理解的东西,比如每个 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;
}
抱歉,如果这不是您要找的。
我正在开发的图像处理应用程序有问题(这里是新手)。我正在尝试使用 getPixel()
方法提取特定像素的值。
不过我遇到了问题。我从这种方法中得到的数字是一个巨大的负数,类似于 -1298383。这是正常的吗?我该如何解决?
谢谢。
您可以像这样从视图中获取像素:
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);
getPixel()
returns 指定位置的颜色。如果 x 或 y 超出范围(分别为负值或 >= 宽度或高度),则抛出异常。
返回的颜色是非预乘 ARGB 值。
我不是专家,但对我来说,您似乎获得了十六进制值。也许您想要更可以理解的东西,比如每个 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;
}
抱歉,如果这不是您要找的。