Java 为什么BitmapFactory.decodeByteArray返回null?

Java 为什么BitmapFactory.decodeByteArray返回null?,java,android,Java,Android,这是一个简单的代码,我没有得到设置位图的结果,而是得到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); ima

这是一个简单的代码,我没有得到设置位图的结果,而是得到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);
发件人:

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

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

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


编辑:我对Android图形一无所知,但您的更新看起来确实是一种更合理的方式,可以在位图上绘制文本。

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


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

因为您提供了无效的位图数据,所以会得到
null


请参阅的文档

您试图将字符串解析为位图
BitmapFactory.decodeByteArray()
将失败,除非字节数组中存在有效的位图。在本例中没有,因此它返回null。

在这种情况下,您需要首先将字符串转换为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);

压缩图像数据的字节数组-这是什么?它与byte[]data=new byte[sz]有何不同


到目前为止,还没有人给出明确的答案!人们一直在谈论的是有一个无效的位图。更详细的答案是如何在低级别创建有效的字节数组。在我的例子中,BitmapFactory.decodeByteArray返回null,因为接收到的图像缓冲区不正确。尝试查看发送缓冲区和传入缓冲区,我相信您会看到两个数组中的差异。大多数时候这就是原因。

我知道这一点。我读过:)。我的意思是,为什么它不创建位图?代码中的错误在哪里?字符串“test”是十六进制的
74657374
。您正在尝试将其渲染为位图。它不是一个。@askmoo:错误在于试图像读取图像一样读取四个字节。你认为这些字节是什么图像格式?巴布亚新几内亚?JPEG?你希望这个图像是什么?请注意,您没有加载名为“test”或类似的文件。。。您只是试图用表示平台默认编码中字符串“test”的字节创建一个图像。@askmoo,您说您知道
decodeByteArray
的功能,但您的问题和随后的注释表明并非如此。你问你做错了什么,你现在有4个(实际上完全相同)的答案告诉你你做错了什么,所以我不得不问-你到底期望发生什么?你显然用了错误的方法来解决你的问题。这个问题出现在我写这个问题的时候:)。现在我知道是什么错误了。那么如何将字符串转换为字节[]->字节[]转换为图像呢?我想这就是方法。使用
Bitmap bm=Bitmap.createBitmap()创建
Bitmap
然后使用
canvas c=newcanvas(bm)创建画布
然后使用
c.drawText()
在画布中创建一些文本。位图将包含您的文本。如果您不熟悉
画布
,可能需要在谷歌上搜索一些教程。您实际上没有与图像相关的字符串。你的意思是,根据
字符串中的名称加载文件吗?更新后的代码将绘制文本,但它将超出位图的边界,因此你将看不到它。此外,在调用
setTextSixe(16)
时,16 x 16位图中的文本也不会太多。我认为这已经远远超出了原始问题的范围,如果您需要任何进一步的帮助,我建议您开始一个新问题。那么如何将字符串转换为字节[]->字节[]转换为图像?我认为这就是解决问题的方法。@askmoo:你希望图像包含什么?“测试”这个词的图片?真的不清楚你想做什么…@Skeet你是对的。我已经编辑了代码,我将很快粘贴新代码。谢谢
String strImage = geTImageAsHexString();
byte[] x = Base64.decode(strImage, Base64.DEFAULT);  //convert from base64 to byte array
Bitmap bmp = BitmapFactory.decodeByteArray(x,0,x.length);