我想将应用中的图片转换为Base64编码的字符串。此图像可以是任何类型,如jpeg,png等。
我所做的是,我将drawable转换为Bitmap。然后我使用compress metheod将此Bitmap转换为ByteArrayOutputStream并且我将此ByteArrayOutputStream转换为字节数组。然后我使用encodeToString()将其编码为Base64。
如果图像是PNG或JPEG,我可以使用上述方法显示图像。
ByteArrayOutputStream objByteOutput = new ByteArrayOutputStream();
imgBitmap.compress(CompressFormat.JPEG, 0, objByteOutput);
但问题是如果图像是除PNG或JPEG以外的任何其他类型,我该如何显示图像?
或者请建议我从Bitmap获取字节数组的另一种方法。
谢谢...
答案 0 :(得分:1)
我建议使用
并指定一个ByteBuffer,然后你可以在ByteBuffer上使用.array()(如果它是一个可选方法)或.get(byte [])来获取它,如果.array()不存在的话。
更新
为了确定要创建的缓冲区的大小,您应该使用Bitmap.getByteCount()。但是这仅出现在API 12及更高版本上,因此您需要使用Bitmap.getWidth()* Bitmap.getHeight()* 4 - 4的原因是Bitmap使用一系列像素(内部表示可能更少)但不应该更多),每个都是一个ARGB值0-255因此4 bytes per pixel。
您可以使用Bitmap.getHeight()* Bitmap.getRowBytes()获得相同的内容 - 这里是我用来验证此工作的一些代码:
BitmapDrawable bmd = (BitmapDrawable) getResources().getDrawable(R.drawable.icon);
Bitmap bm = bmd.getBitmap();
ByteBuffer byteBuff = ByteBuffer.allocate(bm.getWidth() * bm.getHeight() * 4);
byteBuff.rewind();
bm.copyPixelsToBuffer(byteBuff);
byte[] tmp = new byte[bm.getWidth() * bm.getHeight() * 4];
byteBuff.rewind();
byteBuff.get(tmp);
这不是很好的代码,但它会将字节数组输出。