【问题标题】:Huge negative values extracted by using getPixel() method使用 getPixel() 方法提取的巨大负值
【发布时间】:2017-05-10 23:28:18
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: android image colors pixel getpixel


    【解决方案1】:

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

    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】:

      getPixel() 返回指定位置的颜色。如果 xy 超出范围(分别为宽度或高度的负数或 >=),则引发异常。

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

      【讨论】:

        【解决方案3】:

        我不是专家,但在我看来,您正在获取十六进制值。也许您想要更易于理解的,比如每个 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;
        }
        

        抱歉,如果不是您要找的。​​p>

        【讨论】:

          猜你喜欢
          • 2022-06-15
          • 1970-01-01
          • 1970-01-01
          • 2018-10-17
          • 2016-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-11
          相关资源
          最近更新 更多