android - 在 surfaceView android 上裁剪图像

标签 android camera

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

提前致谢。

最佳答案

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

通过使用接口(interface)实现的方法:

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) 格式到达。 事实上,我正在寻找如何制作这部分,这就是我遇到你的问题的原因。

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

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");

    }
}

关于android - 在 surfaceView android 上裁剪图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16730563/

相关文章:

android - Android Camera2 API中的等效canDisableShutterSound方法

android - 尝试填充 Room DB 时出错

android - Fabric ListView 中的 Twitter 用户时间线

android - 在 android 中使用 Glide 预取图像

android - 即使 Activity 存在,ActivityNotFound

android - 通过MediaStore.ACTION_IMAGE_CAPTURE Intent抓图时,如何判断抓取的图像是前置摄像头还是后置摄像头?

java - RecyclerView 的动态部分标题使用当前日期时间

ios - 来自相机的电子邮件附件不断从纵向旋转为横向

opencv - ISO调整和亮度公式的代码实现

安卓: "Camera.takePicture failed"异常