android 生成1位图,Android:将位图转换为单色位图(每像素1位)

我想将位图打印到移动蓝牙打印机(Bixolon SPP-R200)--SDK不提供用于打印内存的direkt方法图片。所以我想这样转换一个位图:Android:将位图转换为单色位图(每像素1位)

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

到单色位图。我使用Canvas在上面给出的位图上绘制黑色文本,效果很好。但是,当我将上述位图转换为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 - 是否有意义简单地通过宽度“大步”的说法?

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

如何最好地评估每个像素颜色信息以决定它应该是黑色还是白色? (呈现的位图在白色背景上是黑色的疼痛)

这种方法是否有意义?有更容易的方法吗?仅将位图黑色化为白色是不够的,主要问题是将每个像素的颜色信息减少到一位。

UPDATE

至于建议由鲁本我的位图转换到一个单色位图。然后我会遍历每个像素:

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);

}

}

流便建议将“读取每个32位像素的最低字节” - 这将涉及到我关于如何评价像素的颜色问题。我在这方面的最后一个问题:我简单地做这个拿到最低字节:

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

int lowestByte = pixel & 0xff;

+0

我有这个QA出演,因为我工作的一个类似的概念关于以编程方式操作数组变成单色位图。我有一个问题及其最终答案在这里:http://stackoverflow.com/questions/17918978/plot-an-array-into-bitmap-in-cc-for-thermal-printer如果这有助于人们,请给我发电子邮件和我会为这个问题提出一个合适的答案。 –

2013-12-28 09:16:01

+0

为什么使用GetPixels将所有像素加载到单个数组中......然后通过位图AGAIN调用单个GetPixel调用(可能效率最低的方式)嵌套循环?只需循环访问原始数组,然后使用SetPixels将整个阵列重新推回到位图中。 –

2016-03-14 16:17:06

+0

@ClintStLaurent好点 - 代码真的很老xD - 我甚至不认为我们已经以这种形式使用它了,但正如你指出的那样,它写在那里的方式效率很低。随意根据您的建议进行编辑。 –

2016-03-15 19:20:29

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值