android nv位图打印机_Android:将位图转换为单色位图(每像素1位)

博主想将Android位图打印到移动蓝牙打印机,SDK无直接打印内存中图像的方法,于是想将Bitmap转换为单色位图。在转换为ByteArray时打印机无法处理,博主考虑获取像素信息,将颜色信息减为一位,还根据建议先转单色位图再遍历像素,探讨评估像素颜色的方法。

我想打印一个位图到一个移动蓝牙打印机(Bixolon SPP-R200) – SDK不提供直接的方法来打印内存中的图像。所以我想到像这样转换一个Bitmap:

Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

到单色位图。我正在绘制黑色文字上面给出的Bitmap使用Canvas,这很好。但是,当我将上述Bitmap转换为ByteArray时,打印机似乎无法处理这些字节。我怀疑我需要一个每像素一位数组(像素将为白色= 1或黑色= 0)。

因为似乎没有方便,开箱即用的方法,一个想法是使用:

bitmap.getPixels(pixels, offset, stride, x, y, width, height)

获取像素。我假设,我必须使用它如下:

int width = bitmap.getWidth();

int height = bitmap.getHeight();

int [] pixels = new int [width * height];

bitmap.getPixels(pixels, 0, width, 0, 0, width, height);

但是 – 我不知道几件事情:

>在getPixels中 – 简单地将宽度作为“Stride”参数传递是有意义的吗?

>我想我必须评估每个像素的颜色信息,并将其切换为黑色或白色(我会将这个值写入一个新的目标字节数组,我最终将传递给打印机)?

>如何最好地评估每个像素的颜色信息,以决定它应该是黑色还是白色? (渲染的Bitmap是白色背景上的黑色疼痛)

这种做法是否有意义?有更简单的方法吗?只是使位图黑色和白色,主要的问题是将每个像素的颜色信息减少到一个位。

UPDATE

根据Reuben的建议,我将首先将Bitmap转换为单色位图。然后我会遍历每个像素:

int width = bitmap.getWidth();

int height = bitmap.getHeight();

int[] pixels = new int[width * height];

bitmap.getPixels(pixels, 0, width, 0, 0, width, height);

// Iterate over height

for (int y = 0; y < height; y++) {

int offset = y * height;

// Iterate over width

for (int x = 0; x < width; x++) {

int pixel = bitmap.getPixel(x, y);

}

}

现在Reuben建议“读取每个32位像素的最低字节” – 这将涉及到我如何评估像素颜色的问题。我在这方面的最后一个问题:通过简单的做法,我得到最低的字节:

// Using the pixel from bitmap.getPixel(x,y)

int lowestByte = pixel & 0xff;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值