首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >抓拍一张照片,在安卓系统的ImageView中全尺寸显示

抓拍一张照片,在安卓系统的ImageView中全尺寸显示
EN

Stack Overflow用户
提问于 2016-06-10 21:15:06
回答 1查看 104关注 0票数 0

我正在尝试捕获一张照片并将其显示在ImageView中。第一部分已成功完成,图像已保存:

代码语言:javascript
运行
复制
    public void takePhoto (View view) {
    String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
    String fileName = "myPhoto.jpg";
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    imageFile = new File(baseDir + File.separator + fileName);
    Uri uri = Uri.fromFile(imageFile);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
    startActivityForResult(intent, 0);
}

但是,我无法在ImageView中以全尺寸显示图像:

代码语言:javascript
运行
复制
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {

           if (requestCode == 0)
        {
            if(imageFile.exists())
                    {
                        Toast.makeText(this,"file saved!",Toast.LENGTH_SHORT).show();

                    ImageView myImage = (ImageView) findViewById(R.id.imageView1);
                        Bitmap bmImg = BitmapFactory.decodeFile("imageFile");
                        myImage.setImageBitmap(bmImg);
                    }

                    else
                    {
                        Toast.makeText(this,"file not saved!",Toast.LENGTH_SHORT).show();
                    }
        }
}

XML布局是:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="com.example.android.trial3.MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Shoot"
        android:onClick="takePhoto"/>
   
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageView1"/>

</LinearLayout>

和Manifest.XML文件:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.android.trial3">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

我得到以下错误:

代码语言:javascript
运行
复制
BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2016-06-10 21:28:02

查看decodeFile方法的pathName参数上的docs

字符串:需要解码的文件的完整路径名。

您需要将图像文件的绝对路径传递给BitmapFactory.decodeFile()

替换以下行:

代码语言:javascript
运行
复制
BitmapFactory.decodeFile("imageFile");

通过以下方式:

代码语言:javascript
运行
复制
BitmapFactory.decodeFile(imageFile.getAbsolutePath());

此外,您的Manifest.xml中似乎缺少以下权限

代码语言:javascript
运行
复制
android.permission.WRITE_EXTERNAL_STORAGE

所以你的清单应该是这样的:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.android.trial3">

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

API级别的23+上,您需要在运行时请求此权限。

查看this链接,了解如何请求运行时权限。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37749277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档