在Android中捕获图像

孟加pk

我想在android中捕获图像并将其显示在imageview中。访问相机并拍照没有问题,但是每当我要拍照时都会出现空指针错误。以下是我的代码

public class New3Fragment extends Fragment implements OnClickListener,
    DialogClickListener {
EditText name_EditText, phonenumber_EditText, email_EditText;

ImageView photo1_ImageView, photo2_ImageView, photo3_ImageView;

String choice;

private Uri fileUri; // file url to store image/video

public static final int DIALOG_FRAGMENT = 1;

private int photo_number;

// Activity request codes
private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100;
public static final int MEDIA_TYPE_IMAGE = 1;
public static final int MEDIA_TYPE_VIDEO = 2;
private static int RESULT_LOAD_IMAGE = 1;

// directory name to store captured images and videos
private static final String IMAGE_DIRECTORY_NAME = "Safirisha";

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_new3, container,
            false);

    name_EditText = (EditText) rootView
            .findViewById(R.id.new3_editText_name);
    phonenumber_EditText = (EditText) rootView
            .findViewById(R.id.new3_editText_phonenumber);
    email_EditText = (EditText) rootView
            .findViewById(R.id.new3_editText_email);

    photo1_ImageView = (ImageView) rootView
            .findViewById(R.id.new3_imageView_photo1);
    photo2_ImageView = (ImageView) rootView
            .findViewById(R.id.new3_imageView_photo2);
    photo3_ImageView = (ImageView) rootView
            .findViewById(R.id.new3_imageView_photo3);

    photo_number = 0;

    photo1_ImageView.setOnClickListener(this);
    photo2_ImageView.setOnClickListener(this);
    photo3_ImageView.setOnClickListener(this);
    return rootView;
}

/**
 * Select image from gallery
 */
private void selectFromGallery() {
    Intent i = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

    startActivityForResult(i, RESULT_LOAD_IMAGE);
}

/**
 * Capturing Camera Image will lauch camera app requrest image capture
 */
private void captureImage() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);

    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

    // start the image capture Intent
    startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
}

/**
 * Here we store the file url as it will be null after returning from camera
 * app
 */
@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    // save file url in bundle as it will be null on scren orientation
    // changes
    outState.putParcelable("file_uri", fileUri);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if (savedInstanceState != null) {
        // Restore last state for checked position.
        fileUri = savedInstanceState.getParcelable("file_uri");
    }
}

/**
 * Receiving activity result method will be called after closing the camera
 * */
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // if the result is capturing Image
    if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) {
        if (resultCode == Activity.RESULT_OK) {
            // successfully captured the image
            // display it in image view
            previewCapturedImage();
        } else if (resultCode == Activity.RESULT_CANCELED) {
            // user cancelled Image capture
            Toast.makeText(getActivity().getApplicationContext(),
                    "User cancelled image capture", Toast.LENGTH_SHORT)
                    .show();
        } else {
            // failed to capture image
            Toast.makeText(getActivity().getApplicationContext(),
                    "Sorry! Failed to capture image", Toast.LENGTH_SHORT)
                    .show();
        }
    } else if (requestCode == RESULT_LOAD_IMAGE
            && resultCode == Activity.RESULT_OK && null != data) {
        Uri selectedImage = data.getData();
        String[] filePathColumn = { MediaStore.Images.Media.DATA };

        Cursor cursor = getActivity().getContentResolver().query(
                selectedImage, filePathColumn, null, null, null);
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex);
        cursor.close();

        // String picturePath contains the path of selected Image
        previewFromGallery(picturePath);
    } else if (requestCode == DIALOG_FRAGMENT) {
        if (resultCode == Activity.RESULT_OK) {

        }
        // After Ok code.
        else if (resultCode == Activity.RESULT_CANCELED) {
            // After Cancel code.
        }
    }
}

/**
 * Display image from a path to ImageView
 */
private void previewCapturedImage() {
    try {

        // bimatp factory
        BitmapFactory.Options options = new BitmapFactory.Options();

        // downsizing image as it throws OutOfMemory Exception for larger
        // images
        options.inSampleSize = 8;

        final Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath(),
                options);

        if (photo_number == 1) {
            photo1_ImageView.setImageBitmap(bitmap);
        } else if (photo_number == 2) {
            photo2_ImageView.setImageBitmap(bitmap);
        } else if (photo_number == 3) {
            photo3_ImageView.setImageBitmap(bitmap);
        }
    } catch (NullPointerException e) {
        e.printStackTrace();
    }
}

private void previewFromGallery(String picturePath) {
    photo1_ImageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
}

/**
 * ------------ Helper Methods ----------------------
 * */

/**
 * Creating file uri to store image/video
 */
public Uri getOutputMediaFileUri(int type) {
    return Uri.fromFile(getOutputMediaFile(type));
}

/**
 * returning image / video
 */
private static File getOutputMediaFile(int type) {

    // External sdcard location
    File mediaStorageDir = new File(
            Environment
                    .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
            IMAGE_DIRECTORY_NAME);

    // Create the storage directory if it does not exist
    if (!mediaStorageDir.exists()) {
        if (!mediaStorageDir.mkdirs()) {
            Log.d(IMAGE_DIRECTORY_NAME, "Oops! Error creating "
                    + IMAGE_DIRECTORY_NAME + " directory.");
            return null;
        }
    }

    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
            Locale.getDefault()).format(new Date());
    File mediaFile;
    if (type == MEDIA_TYPE_IMAGE) {
        mediaFile = new File(mediaStorageDir.getPath() + File.separator
                + "IMG_" + timeStamp + ".jpg");
    } else if (type == MEDIA_TYPE_VIDEO) {
        mediaFile = new File(mediaStorageDir.getPath() + File.separator
                + "VID_" + timeStamp + ".mp4");
    } else {
        return null;
    }

    return mediaFile;
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.new3_imageView_photo1:
        photo_number = 1;
        UploadPhotoDialog uploadPhotoDialog = new UploadPhotoDialog()
                .newInstance(123);
        uploadPhotoDialog.setTargetFragment(this, DIALOG_FRAGMENT);
        uploadPhotoDialog.show(getFragmentManager().beginTransaction(),
                "dialog");
        break;

    case R.id.new3_imageView_photo2:
        photo_number = 2;
        UploadPhotoDialog uploadPhotoDialog2 = new UploadPhotoDialog()
                .newInstance(123);
        uploadPhotoDialog2.setTargetFragment(this, DIALOG_FRAGMENT);
        uploadPhotoDialog2.show(getFragmentManager().beginTransaction(),
                "dialog");
        break;

    case R.id.new3_imageView_photo3:
        photo_number = 3;
        UploadPhotoDialog uploadPhotoDialog3 = new UploadPhotoDialog()
                .newInstance(123);
        uploadPhotoDialog3.setTargetFragment(this, DIALOG_FRAGMENT);
        uploadPhotoDialog3.show(getFragmentManager().beginTransaction(),
                "dialog");
        break;
    }

}

@Override
public void onCameraClick() {
    Toast.makeText(getActivity(), "Camera", Toast.LENGTH_SHORT).show();
    captureImage();
}

@Override
public void onGalleryClick() {
    selectFromGallery();

}

和logcat输出

07-07 14:05:23.225: E/AndroidRuntime(28851): FATAL EXCEPTION: main
07-07 14:05:23.225: E/AndroidRuntime(28851): java.lang.NullPointerException: file
07-07 14:05:23.225: E/AndroidRuntime(28851):    at android.net.Uri.fromFile(Uri.java:446)
07-07 14:05:23.225: E/AndroidRuntime(28851):    at com.koncious.safirisha.New3Fragment.getOutputMediaFileUri(New3Fragment.java:213)
07-07 14:05:23.225: E/AndroidRuntime(28851):    at com.koncious.safirisha.New3Fragment.captureImage(New3Fragment.java:95)
07-07 14:05:23.225: E/AndroidRuntime(28851):    at com.koncious.safirisha.New3Fragment.onCameraClick(New3Fragment.java:289)
07-07 14:05:23.225: E/AndroidRuntime(28851):    at com.koncious.safirisha.UploadPhotoDialog.onClick(UploadPhotoDialog.java:67)
07-07 14:05:23.225: E/AndroidRuntime(28851):    at android.view.View.performClick(View.java:3511)
07-07 14:05:23.225: E/AndroidRuntime(28851):    at android.view.View$PerformClick.run(View.java:14105)
07-07 14:05:23.225: E/AndroidRuntime(28851):    at android.os.Handler.handleCallback(Handler.java:605)
07-07 14:05:23.225: E/AndroidRuntime(28851):    at android.os.Handler.dispatchMessage(Handler.java:92)
07-07 14:05:23.225: E/AndroidRuntime(28851):    at android.os.Looper.loop(Looper.java:137)
07-07 14:05:23.225: E/AndroidRuntime(28851):    at android.app.ActivityThread.main(ActivityThread.java:4440)
07-07 14:05:23.225: E/AndroidRuntime(28851):    at java.lang.reflect.Method.invokeNative(Native Method)
07-07 14:05:23.225: E/AndroidRuntime(28851):    at java.lang.reflect.Method.invoke(Method.java:511)
07-07 14:05:23.225: E/AndroidRuntime(28851):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
07-07 14:05:23.225: E/AndroidRuntime(28851):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
07-07 14:05:23.225: E/AndroidRuntime(28851):    at dalvik.system.NativeStart.main(Native Method)

213行是

return Uri.fromFile(getOutputMediaFile(type));

如果有人可以指出哪里出了问题,我将不胜感激。

vishalv2050

您需要先运行媒体扫描仪(ACTION_MEDIA_SCANNER_SCAN_FILE),然后才能访问图像

Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
mediaScanIntent.setData(fileUri);
getApplicationContext().sendBroadcast(mediaScanIntent);

这实际上是将您的图像添加到图库数据库。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

列出android中捕获图像的图像Url

来自分类Dev

如何在Fragment Android中捕获图像

来自分类Dev

设置在Android中捕获的图像的尺寸

来自分类Dev

android:issue在gridview中显示捕获的图像

来自分类Dev

如何在Android OpenCV中捕获图像

来自分类Dev

如何使用片段中的相机在 xamarin android 中捕获图像

来自分类Dev

如何在Android中结合叠加位图和捕获的图像?

来自分类Dev

在Surfaceview Android中捕获图像后如何重新加载相机?

来自分类Dev

从相机捕获的图像未显示在imageview android中

来自分类Dev

使用相机意图在Android中获取捕获图像的路径

来自分类Dev

如何使用 OpenCV 在 Android Studio 中捕获图像

来自分类Dev

无需预览android即可在服务中捕获图像

来自分类Dev

如何通过在android中捕获图像来保存图像到php?

来自分类Dev

不幸的是,当通过android中的横向模式捕获图像时,图像未旋转停止了吗?

来自分类Dev

在iOS中捕获视频图像

来自分类Dev

捕获的图像中的问题始终在Android中的横向模式自定义相机中打开

来自分类Dev

在自定义相机中无法在Android中获得清晰的图像捕获

来自分类Dev

Android中捕获异常

来自分类Dev

Android相机预览捕获/调整捕获图像的大小以匹配预览

来自分类Dev

Android上使用Phonegap的“错误捕获图像”

来自分类Dev

Android Camera2捕获歪斜的图像

来自分类Dev

在nexus 5中使用android相机捕获图像后的空指针

来自分类Dev

在Android中启动应用程序时如何自动捕获图像?

来自分类Dev

捕获图像并将其传递给android中的另一个活动

来自分类Dev

在Android中使用Surfaceview类捕获后如何在imageview中显示图像

来自分类Dev

无法在Android Studio中在我的屏幕上显示和保存捕获的图像

来自分类Dev

如何在Android中的相机捕获图像上设置实时帧

来自分类Dev

在nexus 5中使用android摄像头捕获图像后为空指针

来自分类Dev

如何将捕获的/画廊图像传递给android中的下一个活动

Related 相关文章

  1. 1

    列出android中捕获图像的图像Url

  2. 2

    如何在Fragment Android中捕获图像

  3. 3

    设置在Android中捕获的图像的尺寸

  4. 4

    android:issue在gridview中显示捕获的图像

  5. 5

    如何在Android OpenCV中捕获图像

  6. 6

    如何使用片段中的相机在 xamarin android 中捕获图像

  7. 7

    如何在Android中结合叠加位图和捕获的图像?

  8. 8

    在Surfaceview Android中捕获图像后如何重新加载相机?

  9. 9

    从相机捕获的图像未显示在imageview android中

  10. 10

    使用相机意图在Android中获取捕获图像的路径

  11. 11

    如何使用 OpenCV 在 Android Studio 中捕获图像

  12. 12

    无需预览android即可在服务中捕获图像

  13. 13

    如何通过在android中捕获图像来保存图像到php?

  14. 14

    不幸的是,当通过android中的横向模式捕获图像时,图像未旋转停止了吗?

  15. 15

    在iOS中捕获视频图像

  16. 16

    捕获的图像中的问题始终在Android中的横向模式自定义相机中打开

  17. 17

    在自定义相机中无法在Android中获得清晰的图像捕获

  18. 18

    Android中捕获异常

  19. 19

    Android相机预览捕获/调整捕获图像的大小以匹配预览

  20. 20

    Android上使用Phonegap的“错误捕获图像”

  21. 21

    Android Camera2捕获歪斜的图像

  22. 22

    在nexus 5中使用android相机捕获图像后的空指针

  23. 23

    在Android中启动应用程序时如何自动捕获图像?

  24. 24

    捕获图像并将其传递给android中的另一个活动

  25. 25

    在Android中使用Surfaceview类捕获后如何在imageview中显示图像

  26. 26

    无法在Android Studio中在我的屏幕上显示和保存捕获的图像

  27. 27

    如何在Android中的相机捕获图像上设置实时帧

  28. 28

    在nexus 5中使用android摄像头捕获图像后为空指针

  29. 29

    如何将捕获的/画廊图像传递给android中的下一个活动

热门标签

归档