在surfaceView android上裁剪图像

时间:2013-05-24 08:21:17

标签: android camera

我正在使用SurfaceHolder.Callback和Camera.PictureCallback在我的活动中打开相机拍摄图像后我想裁剪该图像然后将其保存到SD卡。我找到了许多通过意图相机进行裁剪的解决方案,但根据我的要求没有找到任何解决方案 如果有人帮助我,我会感激的。

先谢谢。

1 个答案:

答案 0 :(得分:1)

您应该实现Camera.PreviewCallback而不是Camera.PictureCallback,

使用接口实现的方法:

public void onPreviewFrame(byte[] data, Camera camera) {
   if (shutterEnabled){
      shutterEnabled = false;

      // Process data
      // Put it on a Bitmap
      // Send it to cropImage
      // -----
   }
}

请注意,如果您没有设置相机参数setPreviewFormat,则viewPreviewFrame上的图片将以YUV(NV21)格式到达。 实际上我正在考虑如何制作这部分,这就是为什么我碰到了你的问题。

这里的重点是,你如何将图片传递给裁剪方法,你应该研究一下。

使用shutterEnabled标志,你的听众可以“监视”该事件。

private void cropImage( picture){
        Intent cropIntent = new Intent("com.android.camera.action.CROP");
        cropIntent.setDataAndType(picture, "image/*");
        cropIntent.putExtra("aspectX",0);
        cropIntent.putExtra("aspectY",0);
        cropIntent.putExtra("return-data", true);
        startActivityForResult(cropIntent, CAMERA_CROP_CODE);
    }


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

     if (resultCode == RESULT_OK && requestCode == CAMERA_CROP_CODE){
                Bitmap bmp = (Bitmap)data.getExtras().get("data");

    }
}