一:图片(bitmap)转亮度。
/**
* 获取bitmap的亮度
* 两种方法,一种Api,一种算出RBG,根据工具公式算出I
* 算出bitmap的I
*/
public static byte[] getBitmapI(Bitmap bitmap) {
//获取图片的所有像素点
int[] pixels = new int[bitmap.getWidth() * bitmap.getHeight()];
//扫描图片
bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
//图片数据长度
int bitmapLength = pixels.length;
byte[] I = new byte[bitmapLength];
for (int i = 0; i < bitmapLength; i++) {
int clr = pixels[i];
byte red = (byte) ((clr >> 16) & 0xFF); //取高两位
byte green = (byte) ((clr >> 8) & 0xFF); //取中两位
byte blue = (byte) ((clr) & 0xFF);
I[i] = (byte) ((30 * red + 59 * green + 11 * blue) / 100);
}
return I;
}
/**
* 获取bitmap的亮度
* 第二种,算出HSV中V
*
*/
public static byte[] getBitmapV(Bitmap bitmap) {
//获取图片的所有像素点
int[] pixels = new int[bitmap.getWidth() * bitmap.getHeight()];
//扫描图片
bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
//图片数据长度
int bitmapLength = pixels.length;
byte[] V = new byte[bitmapLength];
for (int i = 0; i < bitmapLength; i++) {
int clr = pixels[i];
float[] bytes = new float[3];
Color.colorToHSV(clr, bytes);
int v = (int) (bytes[bytes.length - 1] * 255);
V[i] = (byte) (v & 0xFF);
}
return V;
}
二:亮度转图片(bitmap)
/**
* 亮度V转换bitmap
*/
/**
* @方法描述 将亮度字节数组转换成Bitmap(目前只写出Api的转换,自己弄应该也可以)
*/
static public Bitmap IVToBitmap(byte[] data, int width, int height) {
float[] floats = new float[3];
int[] rbg = new int[data.length];
for (int i = 0; i < data.length; i++) {
floats[0] = 0;
floats[1] = 0;
floats[2] = (data[i] & 0xFF) / 255f;
rbg[i] = Color.HSVToColor(floats);
}
return Bitmap.createBitmap(rbg, 0, width, width, height,
Bitmap.Config.ARGB_8888);
}