2 baidu 19694879 baidu_19694879 于 2016.03.16 18:48 提问

Android 方形图片编程圆形之后,太小了

从本地相册获取的一个图片,进行正方形裁剪后,在用遮罩方式变成圆形,怎么样调整生成圆形之后的圆形图片的大小。

下面是主要代码

/**
* 裁剪图片方法实现
*
* @param uri
/
public void startPhotoZoom(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/
");
// 设置裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", layoutPhoto.getWidth());
intent.putExtra("outputY", layoutPhoto.getHeight());
intent.putExtra("return-data", true);
startActivityForResult(intent, RESULT_REQUEST_CODE);
}

/**
 * 保存裁剪之后的图片数据
 * 
 * @param picdata
 */
private void getImageToView(Intent data) {
    Bundle extras = data.getExtras();
    if (extras != null) {
        Bitmap photo = extras.getParcelable("data");
        Bitmap bitPhoto = createCirclImage(photo);
        Drawable drawable = new BitmapDrawable(this.getResources(), bitPhoto);
        iv_nikePhoto.setImageDrawable(drawable);

    }
}

/**
 * 绘制圆形图片
 * 
 * @return
 */
private Bitmap createCirclImage(Bitmap bitmap) {
    // // 绘制画笔
    int width = layoutPhoto.getWidth();
    int height = layoutPhoto.getHeight();
    // 绘制圆角矩形
    Bitmap roundBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);
    Canvas canvas = new Canvas(roundBitmap);
    int color = 0xff424242;
    Paint paint = new Paint();
    // 设置圆形半径
    int radius;
    if (bitmap.getWidth() > bitmap.getHeight()) {
        radius = bitmap.getHeight() / 2;
    } else {
        radius = bitmap.getWidth() / 2;
    }
    // 绘制圆形
    paint.setAntiAlias(true);
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(color);
    canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2, radius, paint);
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
    canvas.drawBitmap(bitmap, 0, 0, paint);
    return roundBitmap;

}

7个回答

baidu_19694879
baidu_19694879   2016.03.22 15:06
已采纳

public static Bitmap cut2Circular(Bitmap source, boolean recycleSource) {

    int photoWidth = layoutPhoto.getWidth() - DisplayUtil.dip2px(mActivity, 10);
    int photoHeight = layoutPhoto.getHeight() - DisplayUtil.dip2px(mActivity, 10);
    int width = source.getWidth();
    int height = source.getHeight();
    float scaleWidth = (float) photoWidth / (float) width;
    float scaleHeight = (float) photoHeight / (float) height;
    Matrix mx = new Matrix();
    mx.postScale(scaleWidth, scaleHeight);
    source = Bitmap.createBitmap(source, 0, 0, width, height, mx, true);
    int diameter = Math.min(photoWidth, photoHeight);
    Paint paint = new Paint();
    paint.setAntiAlias(true);
    Bitmap result = Bitmap.createBitmap(diameter, diameter, Bitmap.Config.ARGB_8888);
    if (result != null) {
        Canvas canvas = new Canvas(result);
        // canvas.drawCircle(diameter / 2, diameter / 2, diameter / 2,
        // paint);
        canvas.drawCircle(diameter / 2, diameter / 2, diameter / 2, paint);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        // canvas.drawBitmap(source, (diameter - photoWidth) / 2, (diameter
        // - photoHeight) / 2, paint);
        canvas.drawBitmap(source, (diameter - photoWidth) / 2, (diameter - photoHeight) / 2, paint);
        if (recycleSource) {
            source.recycle();
            source = null;
        }
    } else {
        result = source;
    }
    return result;
dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.03.17 08:32

首先要让圆形的直径等于正方形的边长

lxk_1993
lxk_1993   Rxr 2016.03.17 08:37

可以看看你的效果图 和 设计图不

baidu_19694879
baidu_19694879   2016.03.17 09:25
baidu_19694879
baidu_19694879   2016.03.17 09:26

图片说明这是效果图

Connery_thunder
Connery_thunder   2016.03.17 14:06

图片说明

你可以去看看 CircleImageView 开源的 那个写的很完善,包括相片的选取

m_zero_ichelle
m_zero_ichelle   2016.03.18 11:12

看能不能给存放图片的地方的布局块设置一下参数为内容自适应。
//1设置参数
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);

//2给图片设置参数
imageview.setLayoutParams(params);
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Android中将方形图片截取成圆形的两种实现方式
以下两种方法均有不足,仅供参考第一种实现方式是通过设置画笔的渲染方式对图片进行处理:首先要了解几种渲染方式 1.BitmapShader(图像渲染)   BitmapShader的作用是使用一张位图作为纹理来对某一区域进行填充。可以想象成在一块区域内铺瓷砖,只是这里的瓷砖是一张张位图而已。    2.LinearGradient(线性渲染)   LinearGradient的作用是实现
android 图片剪切在小米手机上为方形框在华为上为圆形框解决办法
在android调用系统方法对图片进行裁剪时,华为手机显示的图形会变成圆形,将aspectX和aspectY的值改为不是1;1就好了 if (android.os.Build.MODEL.contains("HUAWEI")) {//华为特殊处理 不然会显示圆 intent.putExtra("aspectX", 9998); intent.putExtra("aspectY",
如何在安卓中把方形图变成圆形图
//传过去ImageView 和 id直接出来圆     private void toyuanb(ImageView iv, int i) {         // TODO Auto-generated method stub         Bitmap bmp = BitmapFactory.decodeResource(                 MainActivity.
一个圆形到方形的渐变效果 java
应同学需要写了一个小效果, 想运行需要jre1.6 以上
Android从服务器获取图片并设置圆形头像
先从本地把图片上传到服务器,然后根据URL把头像处理成圆形头像。 因为用到bmob(http://www.bmob.cn)的平台,所以要用到bmob官网申请密钥(Application ID)。 下面是代码: public class Person extends BmobObject { private String url;
如何将方形图片磨成圆形图片
如何将方形图片磨成圆形图片在开发中经常会有一些需求,比如显示头像,显示一些特殊的需求,将图片显示成圆角或者圆形或者其他的一些形状。但是往往我们手上的图片或者从服务器 获取到的图片都是方形的。这时候就需要我们自己进行处理,将图片处理成所需要的形状。使用Xfermode 两图相交方式通过查找资料通过查找资料发现android中可以设置画笔的Xfermode即相交模式,从而设置两张图相交之后的显示方式,具
css圆形图片处理示例(方形图片变圆形图片)
http://www.jb51.net/css/152445.html
Android拍照+方形剪裁——附代码与效果图
要开发一个头像上传的模块,头像上传过程分两步。第一步,相机拍照或者从图库选取照片,产生一个照片,第二步,提供头像剪裁,一般是剪裁为方形的。第三步,上传头像,删除不必要的缓存文件。 拍照和图库选择照片都可以使用系统的方案。自制相机可以搞滤镜,这个开发成本比较大,一般的APP也不用支持。图库选择照片这个可以自己做,访问sd卡,比较简单。问题出在图片剪裁上。网上有一些技术方案,迁移过来之后,效果不好,比如缩放的敏感度问题,缩放之后剪裁不准确的问题,缩放不流畅的问题。后来发现使用com.android.ca
将正方形图片转成圆形图片
//从xib加载就会调用 调用一次 - (void)awakeFromNib {     [super awakeFromNib];     // Initialization code     _itemView.layer.cornerRadius=30;     _itemView.layer.masksToBounds=YES; 第二种方
iOS-方形图片设置成圆形图片
创建一个方形的button,添加方形的背景图片,设置显示为圆形     self.view.backgroundColor=[UIColor orangeColor];     button=[UIButton buttonWithType:UIButtonTypeCustom];     button.frame=CGRectMake(0, 0, 200, 200