首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用getPixel()方法提取巨大负值

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

Stack Overflow用户
提问于 2016-12-26 13:50:52
回答 3查看 1.2K关注 0票数 4

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

不过,我有个问题。我从这个方法得到的数字是一个巨大的负数,大约是-1298383。这是正常的吗?我怎么才能修好它?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-26 14:05:22

我不是专家,但在我看来,你得到的是十六进制值。也许您想要更容易理解的东西,比如每个RGB层的值。

要将像素解压缩为其RGB值,您应该执行以下操作:

代码语言:javascript
复制
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);
}

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

代码语言:javascript
复制
/** 
 * Create an RGB colour pixel.
 */
private int packPixel(int red, int green, int blue) {
    return (red << 16) | (green << 8) | blue;
}

如果这不是你要找的东西,很抱歉。

票数 2
EN

Stack Overflow用户

发布于 2016-12-26 14:00:36

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

代码语言:javascript
复制
ImageView imageView = ((ImageView)v);
Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
int pixel = bitmap.getPixel(x,y);

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

代码语言:javascript
复制
int redValue = Color.red(pixel);
int blueValue = Color.blue(pixel);
int greenValue = Color.green(pixel);
票数 0
EN

Stack Overflow用户

发布于 2016-12-26 14:01:51

getPixel()在指定的位置返回颜色。如果xy超出界限(宽度或高度分别为负或>= ),则抛出异常。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41332253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档