手机裁剪圆角图片_iOS高效图片圆角裁剪方法
自定义裁剪算法
- (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高效图片圆角裁剪方法相关推荐
- android xml图片圆角矩形,使用Path自定义圆角图片
简单实现圆角图片CircleView 效果: CircleImageView代码: public class CircleImageView extends AppCompatImageView { ...
- MYSQL圆角矩形表示_android 利用Bitmap获取圆角矩形、圆形图片
1.在很多时候,我们要显示图片资源,需要将他的资源显示为圆角的:示例源码如下: public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,fl ...
- Android 实现圆角布局,变相实现圆角图片效果(不同位置不同弧度)
小菜最近在处理图片的圆角,不止是四个角全是圆角,还包括单左侧/单右侧/对角线方向的圆角.因为自己太菜只能寻求网上的大神,发现一个自定义圆角布局,这样可以变相的解决我的需求,还可以实现更多的圆角效果,不 ...
- 使用Glide加载圆角矩形图片、圆形图片
Glide是一个功能强大的图片加载库,下面是平常开发中使用到的一些功能,基于Glide-4.X版本的用法 Glide-github地址 Glide jar包下载地址 加载圆形图片: RequestOp ...
- android圆角glide,使用Glide加载圆角矩形图片、圆形图片
Glide是一个功能强大的图片加载库,下面是平常开发中使用到的一些功能,基于Glide-4.X版本的用法 Glide-github地址 Glide jar包下载地址 加载圆形图片:RequestOpt ...
- android xml 圆形图片,Android ImageView实现圆角,圆形图片
UI设计中,为了有更好的效果,用户的头像很多以圆形方式显示,其实现的步骤 1 在res/values/attrs中添加 2 自定义View,CustomImageView.java package c ...
- Android Glide加载图片时转换为圆形、圆角、毛玻璃等图片效果
Android Glide加载图片时转换为圆形.圆角.毛玻璃等图片效果 附录1简单介绍了Android开源的图片加载框架.在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬 ...
- html给图片切圆角,PS如何把图片切成圆角 怎么做呀?
回答: 先找个皮肤之后在用用Photoshop制作空间大图模块 Photoshop最大的优势就是强大的图片处理功能.因此我们利用它处理主页的皮肤,通过在皮肤上融图和添加个性图像,来制作浑然一体的个性空 ...
- 系统相机裁剪比例_拍照时图片比例怎么选?比构图还要提前一步的摄影攻略要做好...
谈到摄影第一步,很多人都在说构图,但是比构图还要提前一步的,是选择合适的拍摄比例.在拍照时,始终是把要拍的东西装进设备的取景器里面,所以取景器的比例是16:9,还是4:3或者其他,就直接影响了我们如何 ...
最新文章
- MyBatis复习笔记6:MyBatis缓存机制
- imp 只导表前10条数据_Excel数据规范化10条原则,让你的工作效率快速提升
- TRzCheckTree的使用
- 显示行数 设置ssh终端_linux限制用户登陆的一些方法
- 17 张程序员专属壁纸,有你喜欢的吗?
- jQueryEasyUI Messager基本使用
- Python项目实战
- ulipad.4.1.zip linux,Ubuntu 12.04下Ulipad的安装
- 水经注地图发布服务的安装与卸载
- lisp6 暖通cad_AutoCAD超强小工具(ARKtools)说明
- 工业企业产值产量电子台账操作指南(第一版)
- TeamViewer打开后没有密码的解决办法
- 人生就是一场永不停歇的修行
- 解决axis2处理java.util.Date类型对象时丢弃时间部分的问题
- 由于Windows无法加载这个设备所需要的驱动设备,导致这个设备工作异常(代码31)VMware Virtual Ethernet Adapter for VMnet1 or VMnet8
- Django连接SQL Server数据库,亲测成功
- 对称轴(Symmetry)
- 树莓派 9 周年:你不知道的树莓派冷知识
- assert.fail()详解
- 达梦数据库入门指南(一)- 安装与初始化教程(Linux)