android将彩图转为黑白_android 彩色图片二值化转可打印的点阵黑白图

本文介绍了如何在Android中将彩色图片转换为黑白图片,以适应蓝牙设备打印。首先尝试了简单的127临界值法,但效果不佳。然后采用了Floyd-Steinberg算法,该算法通过误差扩散实现更平滑的二值化处理,达到理想效果。最后将处理后的图像保存为BMP格式并发送给蓝牙设备。
摘要由CSDN通过智能技术生成

最近有一个需求,需要在手机上生成黑白图传给蓝牙设备显示出来。

一开始我在网上找了一个转黑白图片的方法,这个方法的逻辑是 用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值