最近有一个需求,需要在手机上生成黑白图传给蓝牙设备显示出来。
一开始我在网上找了一个转黑白图片的方法,这个方法的逻辑是 用127做临界值,来判断灰度图的灰度是否比他大,大就打白,小就打黑,代码和效果图如下
/**
* 转为二值图像
*
* @param bmp 原图bitmap
*
* @return
*/
private fun convertToBMW(bmp: Bitmap, tmp:Int=130): Bitmap {
val width = bmp.width // 获取位图的宽
val height = bmp.height // 获取位图的高
val pixels = IntArray(width * height) // 通过位图的大小创建像素点数组
// 设定二值化的域值,默认值为100
//tmp = 180;
bmp.getPixels(pixels, 0, width, 0, 0, width, height)
var alpha = 0xFF shl 24
for (i in 0 until height) {
for (j in 0 until width) {
val grey = pixels[width * i + j]
// 分离三原色
alpha = grey and -0x1000000 shr 24
var red = grey and 0x00FF0000 shr 16
var green = grey and 0x0000FF00 shr 8
var blue = grey and 0x000000FF
if (red > tmp) {
red = 255
} else {
red = 0
}
if (blue > tmp) {
blue = 255
} else {
blue = 0
}
if (green > tmp) {
green = 255
} else {
green = 0
}
pixels[width * i + j] = (alpha shl 24 or (red shl 16) or (green shl 8)
or blue)
if (pixels[width * i + j] == -1) {
pixels[width * i + j] = -1
} else {
pixels[width * i + j] = -16777216
}
}
}
// 新建图片
val newBmp = Bitmap.createBi