将位图设置为ImageView的Android方法

47

你好,我有一个以Base64格式编码的字符串。我想将它转换为位图然后显示到ImageView上。这是代码:

ImageView user_image;
Person person_object;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.user_profile_screen);

    // ImageViews
    user_image = (ImageView) findViewById(R.id.userImageProfile);

    Bundle data = getIntent().getExtras();
    person_object = data.getParcelable("person_object");
    // getPhoto() function returns a Base64 String
    byte[] decodedString = Base64.decode(person_object.getPhoto(), Base64.DEFAULT);

    Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
    user_image.setImageBitmap(decodedByte);
    }

这段代码成功获得了Base64字符串,没有出现任何错误。但是它没有显示图片。 可能的问题是什么? 谢谢


请尝试添加以下代码行:user_image.setScaleType(ScaleType.FIT_XY); - KEYSAN
它可以使用资源图片吗?例如,如果您编写 iuser_image.setImageResource(android.R.drawable.ic_delete),会显示任何内容吗? - vortexwolf
4个回答

59

请尝试这个:

byte[] decodedString = Base64.decode(person_object.getPhoto(),Base64.NO_WRAP);
InputStream inputStream  = new ByteArrayInputStream(decodedString);
Bitmap bitmap  = BitmapFactory.decodeStream(inputStream);
user_image.setImageBitmap(bitmap);

1
谢谢回复。但是它没有起作用。我认为我正确地转换了位图。在我将位图设置到视图之后,需要重新绘制才能在屏幕上看到吗? - kgnkbyl
你能看到那张图片吗? - Anjula

7
    //decode base64 string to image
    imageBytes = Base64.decode(encodedImage, Base64.DEFAULT);
    Bitmap decodedImage = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
    image.setImageBitmap(decodedImage);

  //setImageBitmap is imp

6

有一个名为Picasso的库可以高效地从URL中加载图像。它也可以从文件中加载图片。

示例:

  1. Load URL into ImageView without generating a bitmap:

    Picasso.with(context) // Context
           .load("http://abc.imgur.com/gxsg.png") // URL or file
           .into(imageView); // An ImageView object to show the loaded image
    
  2. Load URL into ImageView by generating a bitmap:

    Picasso.with(this)
           .load(artistImageUrl)
           .into(new Target() {
               @Override
               public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {
                   /* Save the bitmap or do something with it here */
    
                   // Set it in the ImageView
                   theView.setImageBitmap(bitmap)
               }
    
               @Override
               public void onBitmapFailed(Drawable errorDrawable) {
    
               }
    
               @Override
               public void onPrepareLoad(Drawable placeHolderDrawable) {
    
               }
           });
    

在Picasso中有许多更多的选项。这是文档


5

这段代码在我的机器上可以正常运行。

 ImageView carView = (ImageView) v.findViewById(R.id.car_icon);

                            byte[] decodedString = Base64.decode(picture, Base64.NO_WRAP);
                            InputStream input=new ByteArrayInputStream(decodedString);
                            Bitmap ext_pic = BitmapFactory.decodeStream(input);
                            carView.setImageBitmap(ext_pic);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接