为什么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.png
或foo.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,因为收到的图像缓冲区不正确。 试着看看发送缓冲区和传入缓冲区,我相信你会看到两个数组的差异。 大部分时间这是原因。
- AppCompat v7 r21在values.xml中返回错误?
- LogCat消息:找不到Google Play服务资源。 检查您的项目configuration,以确保包含资源
- 如何重置Android Studio
- 从非活动使用startActivityForResult
- Android Google Maps API V2缩放至当前位置
- 如何在Android Studio中的模拟器上安装一个apk?
- 为什么一些Android手机导致我们的应用程序抛出java.lang.UnsatisfiedLinkError?
- ScrollView .scrollTo无法正常工作? 保存ScrollView的位置在旋转
- EditText.setFocusable(假); 不能设置为true。 :/