2015-03-13 45 views
0

代码

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

这个总是返回null即使我把它encoded64(UTF-8)字符串---> aGVsbG8 =解码Base64的字符串作为Android中位图

为什么这发生任何一个有想法??什么我做错了任何一个可以推荐我...

+3

那么,如果抛出一个异常,你会返回null - 你调用'getMessage()'但不记录它或做任何类似的事情。我的猜测是,一个异常*被抛出,但你不知道是什么原因导致缺少日志记录... – 2015-03-13 11:48:04

+0

我知道,但我的问题是为什么这个偶然我已经通过它的64base字符串即使这样它不转换它进入位图, – Drim 2015-03-13 11:51:11

+1

提示:如果你看看异常,你会发现它为什么会发生。这就是例外情况比“仅失败”更富有。 (如果这真的是你的完整的base64信息,我怀疑问题是它不是一个完整的图像文件。) – 2015-03-13 11:52:44

回答

1

我认为问题是,你正在试图解码的base64字符串为位图,但实际上你只是想将其解码为一个字符串。下面的代码做到这一点:

String decodeBase64String(String encodedString) 
{ 
    byte[] data = Base64.decode(encodedString, Base64.DEFAULT); 
    return new String(data, "UTF-8"); 
} 

(假定UTF-8编码)

如果你调用这个函数测试字符串是这样的:

String result = decodeBase64String("aGVsbG8="); 

那么结果将是“你好”。

下面介绍如何将文本转换为位图:

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

所以,你可以编码的文本转换您的base64为位图是这样的:

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

或者你可以这样做:

Bitmap bitmap = textToBitmap("hello"); 
+0

是的,我试图将它转换成位图 – Drim 2015-03-13 12:29:29

+0

看我解码我写相同 – Drim 2015-03-13 12:30:24

+0

你想绘制文本到一个位图? – samgak 2015-03-13 12:31:29

0

试试这个,可能会帮助你..

字符串基地=“****你的Base64编码字符串******”;

字节[] imageBytes = Base64.decode(base.getBytes(),Base64.DEFAULT); ImageView.setImageBitmap(BitmapFactory.decodeByteArray(imageBytes,0,imageBytes.length)

+0

String x =“aGVsbG8 =”; \t \t \t \t byte [] imageBytes = Base64.decode(x.getBytes(),Base64.DEFAULT); \t \t位图bb = BitmapFactory.decodeByteArray(imageBytes,0,imageBytes.length); \t \t Log.v(“bitmap”,bb +“< - bb ----”); null仍然 - > bb – Drim 2015-03-13 12:15:25

+0

我认为你的base64字符串数据有问题,请重新阅读或尝试不同的base64字符串数据。 – 2015-03-13 12:22:12

0

我检查它的正常工作。

可能是你传错了“encodedString”。

测试下面的代码

字符串strBase64 =“/ 9J/4AAQSkZJRgABAQAAAQABAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI //////////////////////////// //////////////////////// 2wBDAVVaWnhpeOuCguv ///////////////////////// //////////////////////////////////////////////// wAARCABeAJoDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4 + Tl5ufo6erx8vP09fb3 + PN6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOU lZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3 + PN6/9oADAMBAAIRAxEAPwCsqgrnFLsHpQn3RTqoY3YPSjYPSnUUAN2L6UbF9KfRQAzYvpRsX0p9FADNi + lGxfSn0UAM2L6UbB6U/FJQIbsHpRsHpTqKAG7R6Um0elPpKYDdg9Kd5YpVqbhEU7QSfWiyIbK5THao6suBk4BA9DVWlJDi7kyfcFOpqH5BS7vagsWik3UbqAFpaTNLmgAopNwo3CgBaQ5A460m + lQlnAoewAM9 + tFDkhyOKbuPtQtgHUUmaOaYC0lJ83rRz60CHDinrIyjAIx7iosmjJoE1cezZySck1WqbJqGlIErD1 + 7S0L90UUFBSU6jFAWAHFGaMUmKAsJRS4ooASpIfv/AIUypYPvE + 1J7ANlHz1HUs33h9KaKa2AbzTlNLg9qAGphYUmmYJqTaaNppBYjCmnY9aXbS4oCw3FQVZxVakxEi4x1pwXPTmohTgSpyKVxpknlt6UbG9KesyEc8GpQAeRTuXoQhGPajY3pU + KMUXAh8qjyanoouBX8k0oAjVgTyanqGSMs/Hf3pMTEKhwuDnAo8oUsaFX5/nUuKECIdnvQFI71Nim4p3HYbg0Yp + KTFAhmKMU/FJigBlVqsuwUc1WoZLJYdufmp8yoeU49qgU4pSxPGaRFtRKnhnCrtYE1BUsRCg5HPrQVexI1yv8IP41JE + 9MkjPeqbdaccKqsrHd3pD5i7SVXFw/dc09Zlbvg + 9LUu6JGIUc0wOu4k8YFJNygP5VEIc9wD70C6kxdQT705SGGRVfyvQg/SpYxtTIPFAIkpKjaUKM5z + NM88/wB2mO6J6aWCjkiq6uzuAWIzTW + 8cnPvTJ5h7TOTxwKjyT3pzMCAABxTaCb3DvzTadSUAApaQHFLuoAKATjFG6jd7UALg0nWjdRu9qBCjIowaTdRuoAdkjHt T9ynlsk1Fuo3Uhkm4AfLkUm44I9aZuo3UAKcmg5OKTdRupiAZFHJo3UbqBhiijdSZoAWm0uaKAP/2Q ==“;

Log.d("base64 String: ", strBase64); 


    byte[] decodedString = Base64.decode(strBase64, Base64.DEFAULT); 
    Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 
    test.setImageBitmap(decodedByte); 
+0

试试这个吧,我已经把它转换成了64bas --- >> aGVsbG8 = 但在解码字节对象是我得到null打印解码对象 – Drim 2015-03-13 12:26:33

+0

log cat显示:skia(19911):--- SkImageDecoder :: Factory返回null。你可以知道你是如何编码位图base64字符串 – Avinash 2015-03-13 12:49:17

+0

检查我的代码:位图selectedImage = BitmapFactory.decodeFile(“/ mnt/sdcard/test.jpg”); \t \t ByteArrayOutputStream stream = new ByteArrayOutputStream(); \t \t selectedImage.compress(Bitmap.CompressFormat.JPEG,10,stream); \t \t byte [] byteArray = stream.toByteArray(); \t //编码 \t \t String strBase64 = Base64.encodeToString(byteArray,Base64.DEFAULT); \t \t \t \t \t \t \t \t Log.d( “BASE64字符串:”,strBase64); \t \t //解码\t \t \t 字节\t [] decodedString = Base64.decode(strBase64,Base64.DEFAULT); \t \t位图decodedByte = BitmapFactory.decodeByteArray(decodedString,0,decodedString.length); – Avinash 2015-03-13 12:55:40

1

您可以使用其他内置方法恢复您的代码。

String base="****Base64 string values of some image******”; 
    byte[] imageAsBytes = Base64.decode(base.getBytes(), Base64.DEFAULT); 
    ImageView image = (ImageView)this.findViewById(R.id.imageView1); 
    image.setImageBitmap(
    BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length) 
+0

我做了相同的功能 – Drim 2015-03-13 12:32:20

+0

Drim:使用此代码,我认为它会为你工作 – 2015-03-13 12:36:50