Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法从照相机中检索捕获的图像_Android_Android Camera_Android Camera Intent - Fatal编程技术网

Android 无法从照相机中检索捕获的图像

Android 无法从照相机中检索捕获的图像,android,android-camera,android-camera-intent,Android,Android Camera,Android Camera Intent,我正在用android构建一个简单的摄像头应用程序,只需点击一个按钮就可以启动一个摄像头。然后,摄像头意图将单击一个图像,该图像稍后将显示在MainActivity中的ImageView中。 然而,问题是我能够捕获图像,但一旦捕获图像而不是显示图像,应用程序就会突然崩溃 以下是我的应用程序代码: MainActivity.java package com.example.suzancruz.cameraapplicaton; import android.content.Intent; imp

我正在用android构建一个简单的摄像头应用程序,只需点击一个按钮就可以启动一个摄像头。然后,摄像头意图将单击一个图像,该图像稍后将显示在MainActivity中的ImageView中。 然而,问题是我能够捕获图像,但一旦捕获图像而不是显示图像,应用程序就会突然崩溃

以下是我的应用程序代码:

MainActivity.java

package com.example.suzancruz.cameraapplicaton;

import android.content.Intent;
import android.graphics.Bitmap;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;


public class MainActivity extends AppCompatActivity {


    static final int REQUEST_IMAGE_CAPTURE = 123;
    ImageView myImageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    //Launching the camera
    public void launchCamera(View view){
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        //Take a picture and pass results along to onActivityResult
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
    }

    //If you want to return the image taken
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK){
            //Get the photo
            Bundle extras = data.getExtras();
            Bitmap photo = (Bitmap) extras.get("data");
            myImageView.setImageBitmap(photo);
        }
    }
}
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.suzancruz.cameraapplicaton.MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="launchCamera"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="Take Picture"

        />
    <ImageView
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:id="@+id/myImageView"

        />
</RelativeLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.suzancruz.cameraapplicaton">

    <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>
        <uses-feature android:name="android.hardware.camera2"></uses-feature>
        <uses-permission android:name="android.permission.CAMERA"/>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    </application>

</manifest>

试试这个`public void onTakeImg(){

values=新内容值();
value.put(MediaStore.Images.Media.TITLE,“Image”);
value.put(MediaStore.Images.Media.DESCRIPTION,“来自您的相机”);
imageUri=getActivity().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL\u CONTENT\u URI,值);
Intent takePictureIntent=新的意图(MediaStore.ACTION\u IMAGE\u CAPTURE);
takePictureContent.putExtra(MediaStore.EXTRA_输出,imageUri);
if(takePictureContent.resolveActivity(getActivity().getPackageManager())!=null){
startActivityForResult(获取图片内容、请求图像捕获);
}
}
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
开关(请求代码){
案例请求\u图像\u捕获:
if(resultCode==RESULT\u OK){
试一试{
mBitmap=MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(),imageUri);
}捕获(例外e){
e、 printStackTrace();
}
onImageAvailable(mBitmap、requestCode);
设置图像位图(mBitmap);
}
打破
}
}
无效onImageAvailable(位图图像位图,int请求代码){
字符串输出=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString()+“/.immigration/temp/”;
文件f=新文件(输出);
如果(!f.exists()){
f、 mkdirs();
}
字符串文件名=输出+“Image.jpg”;
File fileDelete=新文件(文件名);
if(fileDelete.exists()){
if(fileDelete.delete()){
System.out.println(“文件删除:“+filename”);
}否则{
System.out.println(“文件未删除:“+filename”);
}
}
试一试{
FileOutputStream out=新的FileOutputStream(文件名);
矩阵=新矩阵();
if(imageBitmap.getWidth()
你的崩溃报告怎么说?@Piyush,原因是:java.lang.NullPointerException:在第行“myImageView.setImageBitmap(照片)”;“你忘记初始化你的
myImageView
这是访问画廊图像的请求代码。我说的是
myImageView=(ImageView)findviewbyd(R.id.myImageView)
onCreate()
方法中。@Piyus谢谢,它现在可以正常工作了,尽管图像很模糊。
    values = new ContentValues();
    values.put(MediaStore.Images.Media.TITLE, "Image");
    values.put(MediaStore.Images.Media.DESCRIPTION, "From your Camera");
    imageUri = getActivity().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }

}
   public void onActivityResult(int requestCode, int resultCode, Intent data) {

    switch (requestCode) {
        case REQUEST_IMAGE_CAPTURE:
            if (resultCode == RESULT_OK) {
                try {
                    mBitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), imageUri);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                onImageAvailable(mBitmap, requestCode);
                Img.setImageBitmap(mBitmap);
                               }
            break;

    }
}

void onImageAvailable(Bitmap imageBitmap, int requestCode) {
    String output = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() + "/.immigration/temp/";
    File f = new File(output);
    if (!f.exists()) {
        f.mkdirs();
    }

    String filename = output + "Image.jpg";

    File fileDelete = new File(filename);

    if (fileDelete.exists()) {
        if (fileDelete.delete()) {
            System.out.println("file Deleted :" + filename);
        } else {
            System.out.println("file not Deleted :" + filename);
        }
    }

    try {
        FileOutputStream out = new FileOutputStream(filename);
        Matrix matrix = new Matrix();
        if (imageBitmap.getWidth() < imageBitmap.getHeight()) {
            matrix.postRotate(90);
        }
        mBitmap = Bitmap.createBitmap(imageBitmap, 0, 0, imageBitmap.getWidth(), imageBitmap.getHeight(), matrix, true);
        mBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
        out.close();
        Log.d("Ar", "Ole");
    } catch (IOException e) {
        e.printStackTrace();
        Log.d("Ar", e.toString());
    }

    File fdelete = new File(imageUri.getPath());
    if (fdelete.exists()) {
        if (fdelete.delete()) {
            System.out.println("file Deleted :" + imageUri.getPath());
        } else {
            System.out.println("file not Deleted :" + imageUri.getPath());
        }
    }

}`