为什么BitmapFactory.decodeByteArray返回null?

时间:2011-06-29 12:38:18

标签: java android

这是简单的代码,而不是获得设置Bitmap的结果,我得到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);

更新

好的,所以我不能像我想的那样将文本转换为图像。这样怎么样?这会创建一个位图吗?

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

7 个答案:

答案 0 :(得分:19)

来自the documentation

  

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

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

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

编辑:我对Android图形一无所知,但你的更新当然看起来就像在一个位图上绘制文字更合理的方式。

答案 1 :(得分:5)

由于您提供了无效的位图数据,因此获得null

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

答案 2 :(得分:4)

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

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

答案 3 :(得分:3)

您正在尝试将String解析为位图。除非字节数组中存在有效的位图,否则BitmapFactory.decodeByteArray()将失败。在这种情况下没有,所以它返回null。

答案 4 :(得分:2)

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

答案 5 :(得分:1)

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

到目前为止,没有人给出明确答案!所有人都在谈论的是Bitmap无效。更有用的答案是如何在低级别创建有效的字节数组

答案 6 :(得分:0)

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