1

我正在尝试使用 Android Camera Intent 捕获图像。相机意图返回字节数组,当我将字节数组保存为位图时,我得到一个非常小的图像,而不是基于当前相机设置(当前在 android 移动相机中设置的 1024 个像素)获取图像。

通常我会从相机意图获取文件路径,但不知何故我没有从这个设备获取,所以我从相机意图返回的字节创建位图。

任何人都知道这是为什么以及如何解决这个问题。谢谢。

下面是我正在使用的 java 代码块。

私有意图 cameraIntent = null;

public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);

cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);

}

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

if (requestCode == CAMERA_PIC_REQUEST) {  
    if (resultCode == RESULT_OK) {
      if ( data != null)
        {
           Bitmap myImage = null;
           Bitmap imageBitmap = (Bitmap) data.getExtras().get("data");
           ByteArrayOutputStream stream = new ByteArrayOutputStream();
           imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100,stream);
           byte[] byteArray = stream.toByteArray();
           BitmapFactory.Options options = new BitmapFactory.Options();
           myImage = BitmapFactory.decodeByteArray(byteArray, 0,byteArray.length, options);
           fileOutputStream = new FileOutputStream(sPath);
           BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream);
           myImage.compress(CompressFormat.JPEG, 100, bos);
           bos.flush();
           bos.close();
        }
    }
}
}
4

1 回答 1

0

data.getExtras("data")唯一返回缩略图。要获得完整尺寸的图像,您需要将相机意图传递给存储该图像并稍后检索的文件。下面是一个粗略的例子。

开始意图:

File dir = new File(Environment.getExternalStorageDirectory() + "/dcim/myappname");
File mFile = File.createTempFile("myImage", ".png", dir);

Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mFile));
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);

内部onActivityResult

if (resultCode == RESULT_OK) {
   Bitmap bm = BitmapFactory.decodeFile(mFile.getAbsolutePath());
}
// do whatever you need with the Bitmap

请记住,mFile 必须是全局的或以某种方式持久化,以便在必要时可以调用它。

于 2013-10-09T22:18:34.083 回答