Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.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 Imageview_Android Bitmap - Fatal编程技术网

Android 使用相机拍照并在图像视图中查看

Android 使用相机拍照并在图像视图中查看,android,android-camera,android-imageview,android-bitmap,Android,Android Camera,Android Imageview,Android Bitmap,我不知道为什么我的代码刚刚运行,突然停止了?我想通过“图像”按钮拍摄一张照片,然后在图像视图中显示它。以下是我的代码,它不会显示在图像视图中: public class UserInterface extends AppCompatActivity { private static final int REQUEST_IMAGE_CAPTURE= 1; private ImageView imageView; ImageButton cap; Bundle ext

我不知道为什么我的代码刚刚运行,突然停止了?我想通过“图像”按钮拍摄一张照片,然后在图像视图中显示它。以下是我的代码,它不会显示在图像视图中:

public class UserInterface extends AppCompatActivity {
    private static final int REQUEST_IMAGE_CAPTURE= 1;
    private ImageView imageView;
    ImageButton cap;
    Bundle extras;
    Bitmap imageBitmap;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_interface);
        imageView = (ImageView)this.findViewById(R.id.imageView1);
        cap = (ImageButton) this.findViewById(R.id.cap);
        cap.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                    startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
                }
            }

        });
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
             extras = data.getExtras();
             imageBitmap = (Bitmap) extras.get("data");
            imageView.setImageBitmap(imageBitmap);
        }

    }
}
在按钮上单击“侦听器”:

cap.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        imageUri = Uri.fromFile(new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "IMG_" + String.valueOf(System.currentTimeMillis()) + ".jpg"));
        takePictureIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageUri);
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }
});
关于活动结果:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        imageView.setImageURI(imageUri);
    }
}

我以前遇到过这个问题,这是因为图像在完全保存到设备之前就显示了,所以请尝试将其包装到延迟处理程序中:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        new Handler().postDelayed(new Runnable() {          
           @Override
           public void run() {
              extras = data.getExtras();
              imageBitmap = (Bitmap) extras.get("data");
              imageView.setImageBitmap(imageBitmap);
           }
        }, 750);
    }
}

如果它也不起作用,请尝试先将其保存到SD卡,然后直接从SD卡获取:

cap.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    File file = new File(Environment.getExternalStorageDirectory()+File.separator + "image.jpg");
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
    startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
  }
});
然后要得到它:

File file = new File(Environment.getExternalStorageDirectory()+File.separator + "image.jpg");
Bitmap image = decodeSampledBitmapFromFile(file.getAbsolutePath(), 1000, 700);


public static Bitmap decodeSampledBitmapFromFile(String path, int reqWidth, int reqHeight) 
{ // BEST QUALITY MATCH

    //First decode with inJustDecodeBounds=true to check dimensions
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(path, options);

    // Calculate inSampleSize, Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    options.inPreferredConfig = Bitmap.Config.RGB_565;
    int inSampleSize = 1;

    if (height > reqHeight) 
    {
        inSampleSize = Math.round((float)height / (float)reqHeight);
    }
    int expectedWidth = width / inSampleSize;

    if (expectedWidth > reqWidth) 
    {
        //if(Math.round((float)width / (float)reqWidth) > inSampleSize) // If bigger SampSize..
        inSampleSize = Math.round((float)width / (float)reqWidth);
    }

    options.inSampleSize = inSampleSize;

    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;

    return BitmapFactory.decodeFile(path, options);
}

代码对我来说很好。有错误吗?或者相机打开,但拍摄的图像无法进入图像视图?或者什么都没有发生?捕获的图像不会进入图像视图。摄像头出现,它将图像保存在手机上,但图像视图中没有出现。你确定imageView id是imageView1吗?是的,我刚刚检查过。是否调用了onActivityResult()方法?放一些日志消息并检查。
File file = new File(Environment.getExternalStorageDirectory()+File.separator + "image.jpg");
Bitmap image = decodeSampledBitmapFromFile(file.getAbsolutePath(), 1000, 700);


public static Bitmap decodeSampledBitmapFromFile(String path, int reqWidth, int reqHeight) 
{ // BEST QUALITY MATCH

    //First decode with inJustDecodeBounds=true to check dimensions
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(path, options);

    // Calculate inSampleSize, Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    options.inPreferredConfig = Bitmap.Config.RGB_565;
    int inSampleSize = 1;

    if (height > reqHeight) 
    {
        inSampleSize = Math.round((float)height / (float)reqHeight);
    }
    int expectedWidth = width / inSampleSize;

    if (expectedWidth > reqWidth) 
    {
        //if(Math.round((float)width / (float)reqWidth) > inSampleSize) // If bigger SampSize..
        inSampleSize = Math.round((float)width / (float)reqWidth);
    }

    options.inSampleSize = inSampleSize;

    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;

    return BitmapFactory.decodeFile(path, options);
}