首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将图像裁剪

将图像裁剪
EN

Stack Overflow用户
提问于 2013-12-23 08:00:04
回答 2查看 772关注 0票数 0

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

代码语言:javascript
运行
复制
    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上使用了以下代码:

代码语言:javascript
运行
复制
Uri selectedImage = data.getData();
String tempPath = getPath(selectedImage);
Bitmap pickedImage = BitmapFactory.decodeFile(tempPath);

getPath():

代码语言:javascript
运行
复制
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;
    }
}

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

代码语言:javascript
运行
复制
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);

有谁对此有什么线索吗?另外,拍摄一张照片,提供裁剪它的选项,然后检索简单的图像的代码是什么。不需要原始文件..

谢谢,牛顿

EN

回答 2

Stack Overflow用户

发布于 2013-12-23 12:23:38

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

在意图拾取操作后裁剪图像

票数 1
EN

Stack Overflow用户

发布于 2013-12-23 12:38:47

使用此函数可裁剪位图

代码语言:javascript
运行
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20735413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档