如何通过原始尺寸的相机显示图像捕获?

时间:2012-10-17 10:40:19

标签: android image opencv camera

我正在尝试实现一个应用程序,它将使用相机捕获图像并将其显示在ImageView上。但是,系统会在屏幕上显示之前将pic分辨率调整为204x153,但它会保留sd卡中图像的原始分辨率(3264x2448)。

这是我的代码。

buttonCapture.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            Intent intentCamera = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            bmpUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),  
                    "pic_" + String.valueOf(System.currentTimeMillis()) + ".jpg"));  
            try {  
                intentCamera.putExtra("return-data", false);  
                startActivityForResult(intentCamera, resultOpenCamera);  
            } 
            catch (ActivityNotFoundException e) {  
                e.printStackTrace();  
            }               
        }
    });

和我的onActivityResult

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode == resultOpenCamera && resultCode == RESULT_OK && null != data) {
            setContentView(R.layout.preview);

            if(data.getAction() != null){  

               Uri selectedImage = data.getData();
               bmpUri = selectedImage;
               // display image received on the view
               Bundle newBundle = data.getExtras();
               Bitmap theImage = (Bitmap) newBundle.get("data");
               displayImage(preProcessing(theImage));  
               System.out.println("theImage height n width = "+theImage.getHeight()+" + "+theImage.getWidth());
            }
        }
}

我使用System.out.println来跟踪从摄像头捕获的位图分辨率。它表明只有204x153。原始分辨率应为3264x2448。

任何人都知道如何解决这个问题? 非常感谢。

3 个答案:

答案 0 :(得分:2)

仅来自ACTION_IMAGE_CAPTURE的官方文档:

  

调用者可以传递额外的EXTRA_OUTPUT来控制此图像的位置   将写。如果EXTRA_OUTPUT不存在,则小   size图像作为额外字段中的Bitmap对象返回。这是   适用于只需要小图像的应用程序。如果   存在EXTRA_OUTPUT,然后将写入全尺寸图像   EXTRA_OUTPUT的Uri值。

答案 1 :(得分:0)

尝试将imageview的比例类型设置为center或centerInside。

答案 2 :(得分:0)

试试这个: -

int width = bmpSelectedImage.getWidth();
int height = bmpSelectedImage.getHeight();
float scaleWidth = ((float) 250) / width;
float scaleHeight = ((float) 150) / height;
Matrix matrix = new Matrix(); matrix.postRotate(90);
resizedBitmap = Bitmap.createBitmap(bmpSelectedImage, 0, 0, width, height, matrix, true);