为什么BitmapFactory.decodeByteArray返回null?

这是简单的代码,而不是获得结果来设置位图,我得到空。 谁能告诉我我犯了什么错误?

String test = "test"; byte[] byteA = test.getBytes(); Bitmap bmp = BitmapFactory.decodeByteArray(byteA, 0, byteA.length); //<- I get null here ImageView image = (ImageView) findViewById(R.id.image); image.setImageBitmap(bmp); 

UPDATE

好的,所以我不能像我想的那样把文本转换成图像。 这样呢? 这会创build一个位图?

  Paint paint = new Paint(); paint.setStyle(Paint.Style.FILL); paint.setColor(Color.RED); paint.setTextSize(16); paint.setAntiAlias(true); paint.setTypeface(Typeface.MONOSPACE); Bitmap bm = Bitmap.createBitmap(16, 16, Bitmap.Config.ALPHA_8); float x = bm.getWidth(); float y = bm.getHeight(); Canvas c = new Canvas(bm); c.drawText("Test", x, y, paint); 

从文档 :

返回已解码的位图,如果图像无法解码,则返回 null。

string“test”中涉及的字节不是有效的位图,是吗?

如果您将文本“test”保存在一个名为foo.pngfoo.jpg等文件中,并试图在Windows中打开它,您会期望结果是什么? 这将是一个错误:这些字节不是任何已知格式的有效图像。

编辑:我不知道任何关于Androidgraphics,但你的更新当然看起来像一个更合理的方式来绘制文本到位图上。

由于您提供无效的位图数据,您会得到null

请参阅BitmapFactory.decodeByteArray()的文档。

因为"test".getBytes() 的字节不代表有效的位图

您需要创build一个实际上包含编码位图的字节数组,而不仅仅是与string表示forms相对应的一些“随机字节”。

你正试图parsing一个string作为一个位图。 BitmapFactory.decodeByteArray()将失败,除非在字节数组中有一个有效的位图。 在这种情况下没有,所以它返回null。

字节数组的压缩图像数据 – 这是什么,它是如何不同于字节[]数据=新的字节[SZ]?

目前还没有人给出明确的答案! 所有人都在谈论的是,有一个无效的位图。 更有用的答案是如何在低层创build一个有效的字节数组

在这种情况下,您需要先将string转换为Base64。

 String strImage = geTImageAsHexString(); byte[] x = Base64.decode(strImage, Base64.DEFAULT); //convert from base64 to byte array Bitmap bmp = BitmapFactory.decodeByteArray(x,0,x.length); 

在我的情况下BitmapFactory.decodeByteArray返回null,因为收到的图像缓冲区不正确。 试着看看发送缓冲区和传入缓冲区,我相信你会看到两个数组的差异。 大部分时间这是原因。