每个像素的强度为0..255?

时间:2011-07-06 12:49:14

标签: android

我有黑白照片 - RGB 565,200x50。 因为我可以计算每个像素的强度0..255?

2 个答案:

答案 0 :(得分:1)

这就是我的意思,谢谢。可以这可以有人帮忙。我得到每个像素的强度0..255并获得平均值。

     Bitmap cropped = Bitmap.createBitmap(myImage, 503, 270,myImage.getWidth() - 955,            myImage.getHeight() - 550);



     Bitmap cropped2 = Bitmap.createBitmap(cropped, 0, 0,cropped.getWidth() , cropped.getHeight() / 2 );



 final double GS_RED = 0.35;

 final double GS_GREEN = 0.55;

 final double GS_BLUE = 0.1;

 int  R, G, B;
 int result = 0;
 int g = 0;
 int ff;
     for(int x = 0; x < cropped2.getWidth(); x++) 
    {   
        int ff_y = 0;      
         for(int y = 0; y < cropped2.getHeight(); y++) 
        {             
             Pixel = cropped.getPixel(x, y);      

             R = Color.red(Pixel);

             G = Color.green(Pixel);

             B = Color.blue(Pixel);        

             ff = (int)(GS_RED * R + GS_GREEN * G + GS_BLUE * B) ;
             ff_y += ff;

        }
        result += ff_y;
        g = result / (cropped2.getWidth()*cropped2.getHeight());

    }
   Toast.makeText(this, "00" +  g, Toast.LENGTH_LONG).show();

答案 1 :(得分:0)

您可以尝试使用具有亮度和两个色度分量的颜色模型进行转换。亮度分量考虑亮度,而两个色度分量代表颜色。您可能需要查看http://en.wikipedia.org/wiki/YUV

否则:如果我是正确的,白色到灰色到黑色的颜色在RGB格式中具有相同的值,每个通道具有相同的位数(例如从(0,0,0)到(255,255) ,255))。假设这是真的,您可以只使用其中一个通道来表示强度,因为您可以从中确定其他值。不能保证这是否有效。

编辑: 我写了一个片段,展示了上述想法。我使用了RGB888,但在删除断言并修改像素的最大强度后,它也应该与RGB 565配合使用,如评论中所述。请注意,每个像素只有2 ^ 5个不同的强度等级。因此,您可能希望使用平均强度的缩放版本。

我使用http://www.smashingmagazine.com/2008/06/09/beautiful-black-and-white-photography/中的图片对其进行了测试。我希望它可以解决你的问题。

// 2^5 for RGB 565
private static final int MAX_INTENSITY = (int) Math.pow(2, 8) - 1;

public static int calculateIntensityAverage(final BufferedImage image) {
    long intensitySum = 0;
    final int[] colors = image.getRGB(0, 0, image.getWidth(),
            image.getHeight(), null, 0, image.getWidth());
    for (int i = 0; i < colors.length; i++) {
        intensitySum += intensityLevel(colors[i]);
    }
    final int intensityAverage = (int) (intensitySum / colors.length);
    return intensityAverage;
}

public static int intensityLevel(final int color) {
    // also see Color#getRed(), #getBlue() and #getGreen()
    final int red = (color >> 16) & 0xFF;
    final int blue = (color >> 0) & 0xFF;
    final int green = (color >> 8) & 0xFF;
    assert red == blue && green == blue; // doesn't hold for green in RGB 565
    return MAX_INTENSITY - blue;
}