在onActivityResult中将位图设置到ImageView上没有显示任何内容

3

我想把一个ImageView设置为刚刚拍摄的图片。相机应用程序可以正常工作,并将图像保存在正确的位置,但是当我尝试加载图像并将其设置为ImageView时,它会保持空白。除了使用最近拍摄的图像路径之外,我还尝试硬编码现有图像的路径,但是出现了同样的问题。我已经检查了其他线程,但是我看不出我的代码有任何区别。

这是相机函数:

private void takePicture(){
    Intent imageIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    File imagesFolder = new File(Environment.getExternalStorageDirectory(), "/resources/resources/WI"+job_num); 
    image_name = username+"_"+date+".png";
    File image_file = new File(imagesFolder, image_name);
    while(image_file.exists()){
        image_name = username+"-"+date+"("+ image_count+").png";
        image_count+=1;
        image_file = new File(imagesFolder,image_name);
    }
    image_path = imagesFolder+image_name;
    Uri uriSavedImage = Uri.fromFile(image_file);
    imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage); 
    int request_code = 100;
    startActivityForResult(imageIntent, request_code);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode == RESULT_OK){ 
        ImageView thumb = (ImageView) findViewById(R.id.thumbnail);
        Bitmap bmp = BitmapFactory.decodeFile(image_path);
        thumb.setImageBitmap(bmp);
        Toast.makeText(this, "Image Saved", Toast.LENGTH_SHORT).show();
    }
    else
        Toast.makeText(this,"Error Saving Image", Toast.LENGTH_SHORT).show();
}

最后,这是ImageView:

<ImageView
    android:id="@+id/thumbnail"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/camera"
    android:layout_marginTop="10dp"
    android:contentDescription="@string/picture_thumbnail"/>

需要改变什么?谢谢!
2个回答

6

试试这个:

    final ImageView thumb = (ImageView) findViewById(R.id.thumbnail);
    thumb.post(new Runnable() {
        @Override
        public void run()
        {
            Bitmap bmp = BitmapFactory.decodeFile(image_path);
            thumb.setImageBitmap(bmp);
            Toast.makeText(this, "Image Saved", Toast.LENGTH_SHORT).show();
        }
    });

但我不建议您在UI线程上解码位图。
来自这里 : Android相机应用程序将照片编码为返回的Intent中的小位图,在extras下使用键“data”。以下代码检索此图像并在ImageView中显示它。
private void handleSmallCameraPhoto(Intent intent) {
    Bundle extras = intent.getExtras();
    mImageBitmap = (Bitmap) extras.get("data");
    mImageView.setImageBitmap(mImageBitmap);
}

注意:来自“data”的这个缩略图可能适合用作图标,但不太适合其他用途。处理全尺寸图像需要更多的工作。

祝一切顺利。


谢谢您的回复。不幸的是,我的屏幕上什么也没有显示出来,但图像仍然成功保存。 - Matt Fritze
你确定位图不是空的吗?请提供你的“image_path”。 - Yakiv Mospan
更新答案,尝试按照这样的方式获取您的图像,并查看Android开发者指南。 - Yakiv Mospan
你知道如何将方向设置为垂直而不是水平吗? - Matt Fritze
你可以在这里找到一些笔记 - https://dev59.com/hmnWa4cB1Zd3GeqPwg-Z - Yakiv Mospan
显示剩余3条评论

1
onActivityResult中尝试这段代码。
  InputStream stream = null;
 if (bitmap != null) {
      bitmap.recycle();
    }
    stream = getContentResolver().openInputStream(data.getData());
    bitmap = BitmapFactory.decodeStream(stream);
    stream.close();
    thumb.setImageBitmap(bitmap);

建议始终回收位图。SO1Google Dev

编辑 尝试这段代码

 if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {  
        Bitmap photo = (Bitmap) data.getExtras().get("data"); 
        imageView.setImageBitmap(photo);
    }  

感谢您的回复。当我实现代码时,它在这一行崩溃:stream = getContentResolver()... 另外,出于好奇,为什么重复使用位图很重要? - Matt Fritze
我在上一条评论中过早地按下了“回车”键,对此感到抱歉。 - Matt Fritze
@Vayran相应地进行了编辑。 - MDMalik
它仍然崩溃,但在Eclipse的调试过程中,我注意到在调用openInputStream时作为参数使用的数据为空。 - Matt Fritze

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