【问题标题】:Get image cropped裁剪图像
【发布时间】:2023-04-02 07:22:01
【问题描述】:

我正在实现一段从用户单元格的库中获取图片的代码,但我希望用户能够使用 Android 默认裁剪 UI 裁剪图像,所以我使用下面的代码:

    Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    intent.putExtra("crop", "true");
    intent.putExtra("aspectX", 1);
    intent.putExtra("aspectY", 1);
    intent.putExtra("outputX", 280);
    intent.putExtra("outputY", 280);
    intent.putExtra("scale", true);
    startActivityForResult(intent , RESULT_CODE_PICK_FROM_LIBRARY);

为了取回图像,我使用 onActivityResult 上的代码:

Uri selectedImage = data.getData();
String tempPath = getPath(selectedImage);
Bitmap pickedImage = BitmapFactory.decodeFile(tempPath);

getPath():

private String getPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA }; // MediaColumns.DATA // MediaStore.Images.Media.DATA
    Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
    if (cursor != null) {
        cursor.moveToFirst();
        int columnIndex = cursor.getColumnIndex(projection[0]);
        String filePath = cursor.getString(columnIndex);
        cursor.close();
        return filePath;
    } else {
        return null;
    }
}

但是我得到了一个空指针异常:

Cursor cursor = getContentResolver().query(uri, projection, null, null, null);

有人知道这件事吗? 另外,拍照的代码是什么,提供裁剪它的选项,然后检索简单的图像..不需要原始文件..

谢谢, 牛顿

【问题讨论】:

    标签: android image crop


    【解决方案1】:

    这个Tutorial正是你需要的享受:

    Intent 选择操作后裁剪图像

    【讨论】:

    • 感谢您的建议,但是本教程将拍摄的图片保存到文件中,我不需要,我只需要随附的小尺寸图片……而且,它使用了无证/私人代码( com.android.camera.action.CROP),可能很快就会失去支持,并且也不适用于所有设备/osVersions!
    【解决方案2】:

    使用此功能裁剪位图

    public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) {
        Bitmap sbmp;
        if(bmp.getWidth() != radius || bmp.getHeight() != radius)
            sbmp = Bitmap.createScaledBitmap(bmp, radius, radius, false);
        else
            sbmp = bmp;
        Bitmap output = Bitmap.createBitmap(sbmp.getWidth(),
                sbmp.getHeight(), Config.ARGB_8888);
        Canvas canvas = new Canvas(output);
    
        final int color = 0xffa19774;
        final Paint paint = new Paint();
        final Rect rect = new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight());
    
        paint.setAntiAlias(true);
        paint.setFilterBitmap(true);
        paint.setDither(true);
        canvas.drawARGB(0, 0, 0, 0);
        paint.setColor(Color.parseColor("#BAB399"));
    //    canvas.drawCircle(sbmp.getWidth() / 2+0.7f, sbmp.getHeight() / 2+0.7f,
    //            sbmp.getWidth() / 2+0.1f, paint);
        canvas.drawCircle(sbmp.getWidth()/2, sbmp.getHeight()/2,
                (sbmp.getWidth()/2), paint);
        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
        canvas.drawBitmap(sbmp, rect, rect, paint);
    
    
                return output;
    }
    

    【讨论】:

    • 我有裁剪图像的代码,但如果图像不是方形的,它会失去纵横比。所以我想实现 Android 默认的裁剪 UI。知道怎么做吗?跨度>
    猜你喜欢
    • 2017-05-22
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 2023-03-22
    • 2012-05-04
    相关资源
    最近更新 更多