这是简单的代码,而不是获得设置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);
答案 0 :(得分:19)
返回已解码的位图,如果图像无法解码,则返回null。
字符串“test”中涉及的字节不是有效的位图,是吗?
如果您将文本“test”保存在名为foo.png
或foo.jpg
等文件中,并尝试在Windows中打开它,那么您期望得到的结果是什么?这将是一个错误:那些字节只是不是任何已知格式的有效图像。
答案 1 :(得分:5)
由于您提供了无效的位图数据,因此获得null
。
答案 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,因为收到的图像缓冲区不正确。尝试看看发送缓冲区和传入缓冲区,我相信你会看到两个数组的区别。大部分时间都是这个原因。