Android 如何放置相机图像而不是可绘制图像?

Android 如何放置相机图像而不是可绘制图像?,android,bitmap,android-camera,android-imageview,drawable,Android,Bitmap,Android Camera,Android Imageview,Drawable,我只是个编程新手。我只想在第二个活动中放置我的捕获图像,而不是可绘制的图像。我需要有关imagePath的帮助。。下面的代码 主要活动 Button btn_cam = (Button) findViewById(R.id.btn_cam); btn_cam.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent intent

我只是个编程新手。我只想在第二个活动中放置我的捕获图像,而不是可绘制的图像。我需要有关imagePath的帮助。。下面的代码

主要活动

    Button btn_cam = (Button) findViewById(R.id.btn_cam);
    btn_cam.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            file = new File(MainActivity.this.getExternalCacheDir(),
                    String.valueOf(System.currentTimeMillis()) + ".jpg");
            fileUri = Uri.fromFile(file);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
            MainActivity.this.startActivityForResult(intent, CAMERA_PIC_REQUEST);

        }
    });                                                                     }                                                                       
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK) { 
            fileUri = data.getData();
            Intent cam = new Intent(this, MainCam.class);
            cam.putExtra("flostic", fileUri.toString());
            startActivity(cam);
            this.finish();
        }
第二项活动

            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inPreferredConfig = Bitmap.Config.ARGB_8888;
            Bitmap bitmap = BitmapFactory.decodeFile(image_path, options);
            view.setImageBitmap(bitmap);

        }

根据您的评论,您希望在第二个活动中获取图像路径。这是实现这一目标的关键路线

String image_path = getIntent().getStringExtra("flostic");
下面是完整的代码

第一项活动:

Button btnCam = (Button) findViewById(R.id.btn_cam);
btnCam.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        File file = new File(Environment.getExternalStorageDirectory(),
                String.valueOf(System.currentTimeMillis()) + ".jpg");
        Uri fileUri = Uri.fromFile(file);

        Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        i.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
        startActivityForResult(i, CAMERA_PIC_REQUEST);
    }
});                                                                             

@Override                                               
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK) { 
        Intent cam = new Intent(this, MainCam.class);
        cam.putExtra("flostic", data.getDate().toString());
        startActivity(cam);
        finish();
    }
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout):

    ImageView view = (ImageView) findView(R.id.your_image_view);

    Intent i = getIntent();
    String imagePath = i.getStringExtra("flostic");

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inPreferredConfig = Bitmap.Config.ARGB_8888;
    Bitmap bitmap = BitmapFactory.decodeFile(imagePath, options);

    view.setImageBitmap(bitmap);
}
第二项活动:

Button btnCam = (Button) findViewById(R.id.btn_cam);
btnCam.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        File file = new File(Environment.getExternalStorageDirectory(),
                String.valueOf(System.currentTimeMillis()) + ".jpg");
        Uri fileUri = Uri.fromFile(file);

        Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        i.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
        startActivityForResult(i, CAMERA_PIC_REQUEST);
    }
});                                                                             

@Override                                               
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK) { 
        Intent cam = new Intent(this, MainCam.class);
        cam.putExtra("flostic", data.getDate().toString());
        startActivity(cam);
        finish();
    }
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout):

    ImageView view = (ImageView) findView(R.id.your_image_view);

    Intent i = getIntent();
    String imagePath = i.getStringExtra("flostic");

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inPreferredConfig = Bitmap.Config.ARGB_8888;
    Bitmap bitmap = BitmapFactory.decodeFile(imagePath, options);

    view.setImageBitmap(bitmap);
}

首先在清单中添加这些权限

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
将onClickListener()放到相机按钮上

 btn_cam.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, 1);
        }
    });
然后在
onActivityResult()
中从所选图像URI获取图像路径,如下所示

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    Uri uri=data.getData();
    switch (requestCode){


        case 1:
            if (resultCode==RESULT_OK){

                String path=getRealPathFromURI(uri);

                Toast.makeText(this, ""+path, Toast.LENGTH_SHORT).show();

                Intent intent=new Intent(this,SecondActivity.class);
                intent.putExtra("imagepath",path);
                startActivity(intent);
            }
    }
}
包括
getRealPathFromURI()
方法,该方法返回通过相机拍摄的图像的路径。使用
intent.putExtra()
将映像路径发送到第二个活动

此代码用于
SecondActivity

然后在第二个活动中,从第一个活动获取数据(图像路径),并将其存储在字符串变量中,然后从该图像路径创建位图,并将位图图像设置为imageview

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_next);

    String imagepath=getIntent().getExtras().getString("imagepath");


    File image_path=new File(imagepath);
    if (image_path.exists()){

        Bitmap imageBitmap = BitmapFactory.decodeFile(image_path.getAbsolutePath());

        ImageView imageView = (ImageView) findViewById(R.id.imageselect);

        imageView.setImageBitmap(imageBitmap);
    }
} }


这就是如何在第一个活动中拍摄的第二个活动中显示摄像头图像的方法

问题出在哪里?您是否有任何异常或代码无法工作?请提供在第二个活动中获得意图的代码。我想知道如何获取imagepathmBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.image)。复制(Bitmap.Config.ARGB_8888,true);这是我想用camera image而不是Drawable替换的代码我添加了这个Intent getIntent=getIntent();仍然不起作用您正在使用Intent将图像路径从第一个活动传递到第二个活动,并且必须在第二个活动中从Intent对象提取图像路径。请看这个答案:你能给我一个样本解决方案吗?请。我已经解决了这个问题。我使用意图来调用图像。哈哈,但现在还可以。感谢您在捕获应用程序崩溃后花费的时间您是否已在清单中授予相机和写入外部存储权限?这是工作代码,我在这里发布之前再次测试了它。如果它崩溃了,那么你错过了什么。如果您正在marshmellow上运行应用程序,请授予您的应用程序权限,如“设置>应用程序>选择您的应用程序>向下滚动”,然后您将单击“权限>切换所需权限”(注意:要执行此操作,您还必须先在android清单中包含权限)。如果它仍然崩溃,那么发布logcat.u是否可以发布激活此错误的活动代码?我是否需要调整图像大小?抱歉,由于工作繁忙,我无法解决您的问题。如果我的答案解决了你的问题,那么请将其标记为已回答或投票。谢谢