废话不多说,直接上代码
/**
* 计算图片颜色度
* @param context
* @param wpSrc 图片
* @param scale 缩小参数
* @param hScale 高度比
* @return false 默认白色, true为显示黑色
*/
public static boolean calculateWallpaperGray(Context context, final Bitmap wpSrc, int scale, int hScale){
try {
if (wpSrc == null || wpSrc.isRecycled()) {
return false;
}
if(scale<1){
scale = 1;
}
if(hScale<1){
hScale = 1;
}
Matrix matrix = new Matrix();
matrix.postScale(1.0f/scale,1.0f/scale); //长和宽放大缩小的比例
Bitmap wp = Bitmap.createBitmap(wpSrc,0,0,wpSrc.getWidth(),wpSrc.getHeight(),matrix,true);
int sgray[] = new int[256];
for (int i = 0; i < sgray.length; i++) {
sgray[i] = 0;
}
double sum = 0;
int width = wp.getWidth();
int height = wp.getHeight()/hScale;
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
int rgb = wp.getPixel(i, j);
/*
* 应为使用getRGB(i,j)获取的该点的颜色值是ARGB,
* 而在实际应用中使用的是RGB,所以需要将ARGB转化成RGB, 即bufImg.getRGB(i, j) &
* 0xFFFFFF。
*/
int r = (rgb & 0xff0000) >> 16;
int g = (rgb & 0xff00) >> 8;
int b = (rgb & 0xff);
int gray = (int) (r + g + b); // 计算灰度值
sgray[gray]++;
sum += gray;
}
}
double averageGray = sum / width / height;
return (averageGray >= 245)?true:false;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}