从相机裁剪图像并保存

Posted

技术标签:

【中文标题】从相机裁剪图像并保存【英文标题】:Crop image from camera and save it 【发布时间】:2014-10-23 14:41:35 【问题描述】:

我有这门课,我可以拍照并毫无问题地保存它。如果可能

public class TakePicture extends Activity 

    private static final String TAG = "CallCamera";
    private static final int CAPTURE_IMAGE_ACTIVITY_REQ = 0;

    private Uri fileUri = null;
    private ImageView photoImage = null;
    private String fileName = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);

        Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        File file = getOutputPhotoFile();
        fileUri = Uri.fromFile(getOutputPhotoFile());
        i.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
        startActivityForResult(i,
                Constantes.CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);

    

    private File getOutputPhotoFile() 
        File directory = new File(
                Environment
                        .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
                getString(R.string.app_name));
        if (!directory.exists()) 
            if (!directory.mkdirs()) 
                Log.e(TAG, "Failed to create storage directory.");
                return null;
            
        

        String timeStamp = new SimpleDateFormat("yyyMMdd_HHmmss")
                .format(new Date());
        fileName = "IMG_" + timeStamp + ".jpg";
        return new File(directory.getPath() + File.separator + fileName);
    

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
        if (requestCode == Constantes.CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) 
            if (resultCode == RESULT_OK) 
                Uri photoUri = null;
                if (data == null) 
                    photoUri = fileUri;
                    setDataPhoto(photoUri);
                 else 
                    photoUri = data.getData();
                    setDataPhoto(photoUri);
                
             
            finish();
        
    

    private void setDataPhoto(Uri photoUri) 
        String filePath = photoUri.getPath();
        fileName = filePath.substring(filePath.lastIndexOf(File.separator) + 1);
        Intent intent = new Intent();
        intent.putExtra(Constantes.IMAGE_PATH, filePath);
        intent.putExtra(Constantes.IMAGE_NAME, fileName);
        setResult(Activity.RESULT_OK, intent);
        finish();
    


【问题讨论】:

您可能会发现 crop image intent 很有用。请参阅简短的tutorial,其中捕获和裁剪意图协同工​​作。 【参考方案1】:

您应该使用位图。您可以使用 BitmapFactory 轻松地将您的照片转换为位图。它可以从文件路径、字节数组等创建位图。看看BitmapFactory。

然后你可以按照你想要的方式裁剪它。将照片转换为位图后,必须使用该方法;

Bitmap dest=Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height);

这里 x 和 y 是起点的坐标,也就是左下角的部分。注意输入的宽度和高度不能大于原始位图的尺寸。

【讨论】:

以上是关于从相机裁剪图像并保存的主要内容,如果未能解决你的问题,请参考以下文章

刚从相机拍摄并通过从图库中挑选显示的Android裁剪图像

我想裁剪图像并输入在图像中查看。如何使用这种类型的裁剪从相机裁剪图像?

如何让用户选择在保存之前裁剪从相机拍摄的照片?

如何在 Android 相机上使用意图添加功能裁剪图像?

从相机捕获图像并裁剪不工作

从相机胶卷导入图像并裁剪