Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android中base64字符串到位图的解码 代码_Java_Android_String_Bitmap - Fatal编程技术网

Java Android中base64字符串到位图的解码 代码

Java Android中base64字符串到位图的解码 代码,java,android,string,bitmap,Java,Android,String,Bitmap,即使我给它encoded64(utf-8)字符串-->aGVsbG8,它也总是返回null= 为什么会发生这样的事?有人知道吗。。??我做错了什么,谁能告诉我 我认为问题在于您试图将base64字符串解码为位图,但实际上您只想将其解码为字符串。下面是执行此操作的代码: public Bitmap StringToBitMap(String encodedString){ try{ byte [] encodeByte=Bas

即使我给它encoded64(utf-8)字符串-->aGVsbG8,它也总是返回null=


为什么会发生这样的事?有人知道吗。。??我做错了什么,谁能告诉我

我认为问题在于您试图将base64字符串解码为位图,但实际上您只想将其解码为字符串。下面是执行此操作的代码:

public Bitmap StringToBitMap(String encodedString){          
   try{              
         byte [] encodeByte=Base64.decode(encodedString,Base64.DEFAULT);               
         Bitmap bitmap=BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length);
         return bitmap;
       }catch(Exception e){
           e.getMessage();
           return null;
       } 
}
(假设采用UTF-8编码)

如果使用测试字符串调用此函数,如下所示:

String decodeBase64String(String encodedString)
{
    byte[] data = Base64.decode(encodedString, Base64.DEFAULT);
    return new String(data, "UTF-8");
}
Bitmap textToBitmap(String text)
{
     Paint paint = new Paint();
     paint.setColor(Color.WHITE);
     paint.setStrokeWidth(12);
     Rect bounds = new Rect();
     paint.getTextBounds(text, 0, text.length(), bounds);
     Bitmap bitmap = Bitmap.createBitmap(bounds.width(), bounds.height(), Bitmap.Config.ARGB_8888);
     Canvas canvas = new Canvas(bitmap);
     canvas.drawText(text, 0, 0, paint);
     return bitmap;
}
然后结果将是“你好”

以下是如何将文本转换为位图:

String result = decodeBase64String("aGVsbG8=");
因此,您可以将base64编码的文本转换为位图,如下所示:

String decodeBase64String(String encodedString)
{
    byte[] data = Base64.decode(encodedString, Base64.DEFAULT);
    return new String(data, "UTF-8");
}
Bitmap textToBitmap(String text)
{
     Paint paint = new Paint();
     paint.setColor(Color.WHITE);
     paint.setStrokeWidth(12);
     Rect bounds = new Rect();
     paint.getTextBounds(text, 0, text.length(), bounds);
     Bitmap bitmap = Bitmap.createBitmap(bounds.width(), bounds.height(), Bitmap.Config.ARGB_8888);
     Canvas canvas = new Canvas(bitmap);
     canvas.drawText(text, 0, 0, paint);
     return bitmap;
}
或者你可以这样做:

String result = decodeBase64String("aGVsbG8=");
Bitmap bitmap = textToBitmap(result);

您可以使用其他一些内置方法还原代码

Bitmap bitmap = textToBitmap("hello");

如果抛出异常,您将返回null—您正在调用
getMessage()
,但没有记录它或执行类似操作。我的猜测是抛出了一个异常,但由于缺少日志记录,您不知道发生了什么…我知道,但我的问题是,为什么会发生这种情况,我传递了它64base字符串,即使它没有将其转换为位图,提示:如果您查看异常,您将发现它发生的原因。这就是例外比“它失败了”更丰富的原因。(如果这真的是完整的base64信息,我怀疑问题在于它不是一个完整的图像文件。)位图是图像
aGVsbG8=
只是ASCII编码“hello”的base64编码形式。你到底指望那会是什么?如果你希望它是一个位图,上面画有文本,那么你使用的方法是完全错误的。是的,我尝试将它转换为位图。你想把文本绘制到位图上吗?不,我只想我写的字符串的位图,所以我搜索它,最后我得到了这个函数,但它似乎不起作用,简而言之,我想要一个传递字符串的函数,它会返回该字符串的位图,请在我的答案中尝试代码。它将返回原始字符串“hello”。为什么需要位图?位图用于图像而不是文本。请参阅我的更新答案。我想你对base64的用途感到困惑。它不用于在位图上绘制文本。它用于将数据(例如图像)编码为文本字符串,然后将文本转换回数据。不过还是试试代码吧。我在函数中也这么做了