相机图像未显示在 ImageView 中

Posted

技术标签:

【中文标题】相机图像未显示在 ImageView 中【英文标题】:Camera Image not displaying in ImageView 【发布时间】:2015-06-29 03:22:09 【问题描述】:

我想在 ImageView 中显示从 Camera Intent 捕获的图像。我可以让相机打开并为图像创建一个目录,但是当我通过意图传递图像并尝试调用它时,图像不会显示。这就是我正在做的事情:

private static final int REQUEST_CODE = 1;
private ImageView addPicture;
private Bitmap bitmap;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(//setting the view);

    addPicture.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 

            Intent imageIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyImages");
            imagesFolder.mkdirs(); // <----
            File image = new File(imagesFolder, "image_001.jpg");
            Uri uriSavedImage = Uri.fromFile(image);
            imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
            startActivityForResult(imageIntent, 0);
        
    );



@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    addPicture = (ImageView) findViewById(R.id.profilepicture_registerone);

    if (requestCode == REQUEST_CODE) 
        if (resultCode == RESULT_OK) 
            try 
                InputStream stream = getContentResolver().openInputStream(data.getData());
                bitmap = BitmapFactory.decodeStream(stream);
                addPicture.setImageBitmap(bitmap);
                stream.close();


             catch (FileNotFoundException e) 
                e.printStackTrace();
             catch (IOException e) 

            

            RoundImage image = new RoundImage(bitmap);

         else if (resultCode == RESULT_CANCELED) 
            // User cancelled the image capture
         else 
            Toast.makeText(getApplicationContext(), "Bad Image Request. Please Try Again!", Toast.LENGTH_LONG).show();
        
    


我的权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<uses-feature android:name="android.hardware.camera" />

还有我在 XML 中的 ImageView:

<ImageView
    android:layout_
    android:layout_
    android:id="@+id/profilepicture_registerone"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="50dp"
    android:clickable="true"
    android:onClick="addPicture" />

编辑:由于我试图更改这篇文章的内容,我的 ID 不正确。我将它们改回原来的 ID 以避免更多混淆。

编辑 2:经过进一步测试,我发现 onActivityResult() 方法内没有设置任何图像。我尝试加载可绘制的图像,但这也不起作用。当我在onCreate() 中调用它时它起作用了。

【问题讨论】:

找到解决方案了吗? @所罗门鲍威尔 @Mano 不幸的是,没有。我什至尝试从我的可绘制文件夹中加载一个库存图像作为onActivityResult() 内的图像文件,但这也不起作用。这很奇怪,因为 OnActivityResults 正在被调用。 ***.com/a/30977539/4447803 ,试试这个代码有什么疑问可以问我——它适用于画廊和相机。 在 Oncreate 中创建您的图像视图,不要放入 OnActivvty 结果中 【参考方案1】:

您需要在 onCreate() 中找到您的 ImageView ID,并带有正确的 ID 标签。

 addPicture = (ImageView) findViewById(R.id.profilepicture_registerone);

请检查您的位图,是否为空?

【讨论】:

为了这篇文章,我改变了一些东西。我将在帖子中对其进行编辑,但即使使用正确的 ID,错误仍然存​​在 我发现data.getData()方法在被测试是否为null时返回null并抛出NullPointerException。 您的文件是在 SD 卡中创建的吗? 是的,图像存储在 SD 卡上【参考方案2】:

试试这个,

在Class区声明常量:

final int TAKE_PHOTO_REQ = 100;

调用相机意图:

        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, TAKE_PHOTO_REQ);

将 onActivityResult(..) 添加到您的活动中

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) 
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) 
        case TAKE_PHOTO_REQ: 
            if (resultCode == TakePicture.RESULT_OK && data != null) 

                Bitmap myBmp = (Bitmap) data.getExtras().get("data");



                imageView.setImageBitmap(myBmp);
                break;
            
        
        
    

*仍然有问题,然后检查您的 ImageView 是否正确。

希望这会有所帮助...谢谢

【讨论】:

【参考方案3】:

您确定吗,您的图像视图使用了正确的 id。在代码中,xml中的id是“图片”,但你在java中引用profilepicture_registerone?

【讨论】:

为了这篇文章,我更改了一些内容,但忘记更改所有内容。因此,我已将它们还原,但即使使用正确的 ID,错误仍然会发生 图片是否保存在手机上,您可以使用其他应用查看图片吗? 是的。图片在“MyImages”文件夹中保存为“image_001.jpg”。 尝试使用bundle传图,有可能现在通过intent传的图为null

以上是关于相机图像未显示在 ImageView 中的主要内容,如果未能解决你的问题,请参考以下文章

从相机拍照后图像未在 ImageView 中设置

使用 Image Picker 后图像未显示在 ImageView 中

在android [copy]中没有设置从相机到imageview的图像

从相机捕获的图像被视为 ImageView 对象的问题。 - 安卓

相机拍摄的图像不想在 ImageView 中显示

底部带有相机按钮的 ImageView