我有黑白照片 - RGB 565,200x50。 因为我可以计算每个像素的强度0..255?
答案 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;
}