自定义裁剪算法

- (UIImage *)dealImage:(UIImage *)img cornerRadius:(CGFloat)c {

// 1.CGDataProviderRef 把 CGImage 转 二进制流

CGDataProviderRef provider = CGImageGetDataProvider(img.CGImage);

void *imgData = (void *)CFDataGetBytePtr(CGDataProviderCopyData(provider));

int width = img.size.width * img.scale;

int height = img.size.height * img.scale;

// 2.处理 imgData

// dealImage(imgData, width, height);

cornerImage(imgData, width, height, c);

// 3.CGDataProviderRef 把 二进制流 转 CGImage

CGDataProviderRef pv = CGDataProviderCreateWithData(NULL, imgData, width * height * 4, releaseData);

CGImageRef content = CGImageCreate(width , height, 8, 32, 4 * width, CGColorSpaceCreateDeviceRGB(), kCGBitmapByteOrder32Big | kCGImageAlphaPremultipliedLast, pv, NULL, true, kCGRenderingIntentDefault);

UIImage *result = [UIImage imageWithCGImage:content];

CGDataProviderRelease(pv); // 释放空间

CGImageRelease(content);

return result;

}

其它方法

void releaseData(void *info, const void *data, size_t size) {

free((void *)data);

}

核心方法

// 裁剪圆角

void cornerImage(UInt32 *const img, int w, int h, CGFloat cornerRadius) {

CGFloat c = cornerRadius;

CGFloat min = w > h ? h : w;

if (c < 0) { c = 0; }

if (c > min * 0.5) { c = min * 0.5; }

// 左上 y:[0, c), x:[x, c-y)

for (int y=0; y

for (int x=0; x

UInt32 *p = img + y * w + x; // p 32位指针,RGBA排列,各8位

if (isCircle(c, c, c, x, y) == false) {

*p = 0;

}

}

}

// 右上 y:[0, c), x:[w-c+y, w)

int tmp = w-c;

for (int y=0; y

for (int x=tmp+y; x

UInt32 *p = img + y * w + x;

if (isCircle(w-c, c, c, x, y) == false) {

*p = 0;

}

}

}

// 左下 y:[h-c, h), x:[0, y-h+c)

tmp = h-c;

for (int y=h-c; y

for (int x=0; x

UInt32 *p = img + y * w + x;

if (isCircle(c, h-c, c, x, y) == false) {

*p = 0;

}

}

}

// 右下 y~[h-c, h), x~[w-c+h-y, w)

tmp = w-c+h;

for (int y=h-c; y

for (int x=tmp-y; x

UInt32 *p = img + y * w + x;

if (isCircle(w-c, h-c, c, x, y) == false) {

*p = 0;

}

}

}

}

判断点 (px, py) 在不在圆心 (cx, cy) 半径 r 的圆内

static inline bool isCircle(float cx, float cy, float r, float px, float py) {

if ((px-cx) * (px-cx) + (py-cy) * (py-cy) > r * r) {

return false;

}

return true;

}

手机裁剪圆角图片_iOS高效图片圆角裁剪方法相关推荐

  1. android xml图片圆角矩形,使用Path自定义圆角图片

    简单实现圆角图片CircleView 效果: CircleImageView代码: public class CircleImageView extends AppCompatImageView { ...

  2. MYSQL圆角矩形表示_android 利用Bitmap获取圆角矩形、圆形图片

    1.在很多时候,我们要显示图片资源,需要将他的资源显示为圆角的:示例源码如下: public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,fl ...

  3. Android 实现圆角布局,变相实现圆角图片效果(不同位置不同弧度)

    小菜最近在处理图片的圆角,不止是四个角全是圆角,还包括单左侧/单右侧/对角线方向的圆角.因为自己太菜只能寻求网上的大神,发现一个自定义圆角布局,这样可以变相的解决我的需求,还可以实现更多的圆角效果,不 ...

  4. 使用Glide加载圆角矩形图片、圆形图片

    Glide是一个功能强大的图片加载库,下面是平常开发中使用到的一些功能,基于Glide-4.X版本的用法 Glide-github地址 Glide jar包下载地址 加载圆形图片: RequestOp ...

  5. android圆角glide,使用Glide加载圆角矩形图片、圆形图片

    Glide是一个功能强大的图片加载库,下面是平常开发中使用到的一些功能,基于Glide-4.X版本的用法 Glide-github地址 Glide jar包下载地址 加载圆形图片:RequestOpt ...

  6. android xml 圆形图片,Android ImageView实现圆角,圆形图片

    UI设计中,为了有更好的效果,用户的头像很多以圆形方式显示,其实现的步骤 1 在res/values/attrs中添加 2 自定义View,CustomImageView.java package c ...

  7. Android Glide加载图片时转换为圆形、圆角、毛玻璃等图片效果

     Android Glide加载图片时转换为圆形.圆角.毛玻璃等图片效果 附录1简单介绍了Android开源的图片加载框架.在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬 ...

  8. html给图片切圆角,PS如何把图片切成圆角 怎么做呀?

    回答: 先找个皮肤之后在用用Photoshop制作空间大图模块 Photoshop最大的优势就是强大的图片处理功能.因此我们利用它处理主页的皮肤,通过在皮肤上融图和添加个性图像,来制作浑然一体的个性空 ...

  9. 系统相机裁剪比例_拍照时图片比例怎么选?比构图还要提前一步的摄影攻略要做好...

    谈到摄影第一步,很多人都在说构图,但是比构图还要提前一步的,是选择合适的拍摄比例.在拍照时,始终是把要拍的东西装进设备的取景器里面,所以取景器的比例是16:9,还是4:3或者其他,就直接影响了我们如何 ...

最新文章

  1. MyBatis复习笔记6:MyBatis缓存机制
  2. imp 只导表前10条数据_Excel数据规范化10条原则,让你的工作效率快速提升
  3. TRzCheckTree的使用
  4. 显示行数 设置ssh终端_linux限制用户登陆的一些方法
  5. 17 张程序员专属壁纸,有你喜欢的吗?
  6. jQueryEasyUI Messager基本使用
  7. Python项目实战
  8. ulipad.4.1.zip linux,Ubuntu 12.04下Ulipad的安装
  9. 水经注地图发布服务的安装与卸载
  10. lisp6 暖通cad_AutoCAD超强小工具(ARKtools)说明
  11. 工业企业产值产量电子台账操作指南(第一版)
  12. TeamViewer打开后没有密码的解决办法
  13. 人生就是一场永不停歇的修行
  14. 解决axis2处理java.util.Date类型对象时丢弃时间部分的问题
  15. 由于Windows无法加载这个设备所需要的驱动设备,导致这个设备工作异常(代码31)VMware Virtual Ethernet Adapter for VMnet1 or VMnet8
  16. Django连接SQL Server数据库,亲测成功
  17. 对称轴(Symmetry)
  18. 树莓派 9 周年:你不知道的树莓派冷知识
  19. assert.fail()详解
  20. 达梦数据库入门指南(一)- 安装与初始化教程(Linux)

热门文章

  1. 2023 极术通讯-安谋科技与此芯科技携手共建Arm PC SIG
  2. 【Java基础】 随机数的3种生成方法
  3. VcdRom 虚拟光驱驱动代码分析
  4. windows下打开 .pages文件?
  5. Disconf安装简要
  6. 商业 AI 发明者Datatist成为Oracle商业AI领域合作伙伴
  7. Modelsim 仿真 IP 核
  8. 离线使用Google Gears书签“保存所有内容”
  9. echarts 实时数据展示
  10. ssm网上购物系统 by sj ym 123361