Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >掩码UIImage iOS 8

掩码UIImage iOS 8
EN

Stack Overflow用户
提问于 2014-10-13 02:24:30
回答 1查看 589关注 0票数 3

我使用下面的代码在iOS 7中屏蔽to图像,效果很好。但现在,在iOS 8中,它什么也做不了,不是返回原始图像+蒙版,而是返回一张黑色图像。

代码语言:javascript
运行
AI代码解释
复制
- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {

CGImageRef imgRef = [image CGImage];
CGImageRef maskRef = [maskImage CGImage];
CGImageRef actualMask = CGImageMaskCreate(CGImageGetWidth(maskRef),
                                          CGImageGetHeight(maskRef),
                                          CGImageGetBitsPerComponent(maskRef),
                                          CGImageGetBitsPerPixel(maskRef),
                                          CGImageGetBytesPerRow(maskRef),
                                          CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask(imgRef, actualMask);
return [UIImage imageWithCGImage:masked];

}

这是我的应用程序的工作原理:-原始图像将被模糊-然后应用一个蒙版(圆形,正方形,任何形状。返回模糊的图像,遮罩应该裁剪模糊的图像,并在没有模糊的情况下看到原始图像的后面。它可以在iOS 7上工作,但在iOS 8中,关于掩码的代码(上面)不能工作。有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2014-12-01 10:56:28

使用此方法在iOS 8.0中遮罩图像。我已经在我的运行代码中使用了这个方法,并且工作得很好。

代码语言:javascript
运行
AI代码解释
复制
- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {

    CGImageRef imgRef  = [image CGImage];
    CGImageRef maskRef = [maskImage CGImage];


    int maskWidth      = CGImageGetWidth(maskRef);
    int maskHeight     = CGImageGetHeight(maskRef);
    //  round bytesPerRow to the nearest 16 bytes, for performance's sake
    int bytesPerRow    = (maskWidth + 15) & 0xfffffff0;
    int bufferSize     = bytesPerRow * maskHeight;

    //  allocate memory for the bits
    CFMutableDataRef dataBuffer = CFDataCreateMutable(kCFAllocatorDefault, 0);
    CFDataSetLength(dataBuffer, bufferSize);

    //  the data will be 8 bits per pixel, no alpha
    CGColorSpaceRef colourSpace = CGColorSpaceCreateDeviceGray();
    CGContextRef ctx            = CGBitmapContextCreate(CFDataGetMutableBytePtr(dataBuffer),
                                                        maskWidth, maskHeight,
                                                        8, bytesPerRow, colourSpace, kCGImageAlphaNone);
    //  drawing into this context will draw into the dataBuffer.
    CGContextDrawImage(ctx, CGRectMake(0, 0, maskWidth, maskHeight), maskRef);
    CGContextRelease(ctx);

    //  now make a mask from the data.
    CGDataProviderRef dataProvider  = CGDataProviderCreateWithCFData(dataBuffer);
    CGImageRef mask                 = CGImageMaskCreate(maskWidth, maskHeight, 8, 8, bytesPerRow,
                                                        dataProvider, NULL, FALSE);

    CGDataProviderRelease(dataProvider);
    CGColorSpaceRelease(colourSpace);
    CFRelease(dataBuffer);

    CGImageRef masked = CGImageCreateWithMask(imgRef, mask);
    return [UIImage imageWithCGImage:masked];

}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26332092

复制
相关文章
iOS16适配指南之UIImage
SF Symbols 中增加了新的类别 Variable,其中的图标支持可变渲染。 UIImage 相应地增加了新的构造函数支持可变渲染。 import Combine import UIKit class ViewController: UIViewController { // 可变色度 lazy var variable: Double = 0 { didSet { // 新的构造函数,支持可变渲染 let image
YungFan
2022/06/23
1.1K0
iOS中图片(UIImage)拉伸技巧 原
简单暴力,却是最最常用的方法,直接将图片设置为ImageView的image属性,图片便会随UIImageView对象的大小做自动拉伸。这种拉伸的方法有一个致命的缺陷,它会使图像发生失真与形变。
珲少
2018/08/15
3.6K0
iOS中图片(UIImage)拉伸技巧
                                                                            原
iOS:聊一聊UIImage几点知识
UIImage是IOS中层级比较高的一个用来加载和绘制图像的一个类,更底层的类还有CGImage,以及IOS5.0以后新增加的CIImage。今天我们主要聊一聊UIImage的三个属性: imageOrientation, size, scale,几个初始化的方法: imageNamed,imageWithContentsOfFile,以及绘制Image的几个draw开头的方法。
ios-lan
2020/09/14
1.3K0
改变UIImage 的大小
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/52609922
用户1451823
2018/09/13
1.1K0
反掩码与通配符掩码[通俗易懂]
掩码我们学数通的应该都很熟悉,我们刚刚学习IP的时候肯定都学过,这里就不在叙述。
全栈程序员站长
2022/09/15
4.1K0
反掩码与通配符掩码[通俗易懂]
掩码、通配符与反掩码
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/161565.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/09
7510
掩码、通配符与反掩码
UIColor转换为UIImage
/** color转image */ (UIImage)createImageWithColor: (UIColor)color { CGRect rect=CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); UIGraphicsBeginImageContext(rect.size); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [color
好派笔记
2021/10/31
6080
把UIImage转成PDF进行保存
最近有个场景,需要把H5传递过来的base64保存为PDF文件,经解析,H5是直接把png转base64,保存下来的文件就算是重命名为【xxx.pdf】,依然还是没法在【文件.app】中打开,只能把base64转成UIImage,再通过绘制PDF来进行保存
freesan44
2022/04/02
6090
通配符掩码
在访问控制列表中,通配符掩码来指定主机、特定网络或网络的一部分,首先要理解块大小,其用于指定地址范围
全栈程序员站长
2022/09/07
9650
如何理解掩码、反掩码、通配符「建议收藏」
一、掩码 在掩码中,1表示精确匹配,0表示随机 1和0,永远不交叉; 1永远在左边,0永远在右边; 在配置IP地址以及路由的时候,会使用掩码; 二、反掩码 在反掩码中,1表示随机,0表示精确匹配 0和1,永远不交叉; 0永远在左边,1永远在右边; 在路由协议的配置中,通过network命令进行网段宣告时,会使用 三、通配符 在统配符中,1表示随机,0表示精确匹配 0和1的位置,没有任何的固定限制 可以连续,可以交叉 在ACL中,使用的通配符 通配符掩码表
全栈程序员站长
2022/09/09
3K0
子网掩码和通配符掩码的区别
说白了子网掩码的工作原理就是,它拥有和主机IP地址一样的位数,每一位与对应的ip地址位进行“与”操作,得出的结果就是主机所在的子网,打个比方,192.168.1.1 255.255.255.0这是一个标准的C类网络,子网掩码/24,所以它的网络位也就是所在的子网就是192.168.1.0,计算过程如下:
全栈程序员站长
2022/09/15
1.2K0
把UIImage转成PDF进行保存
最近有个场景,需要把H5传递过来的base64保存为PDF文件,经解析,H5是直接把png转base64,保存下来的文件就算是重命名为【xxx.pdf】,依然还是没法在【文件.app】中打开,只能把base64转成UIImage,再通过绘制PDF来进行保存
freesan44
2022/01/26
6250
彻底澄清子网掩码、反掩码、通配符掩码以及ospf network命令误区
示例1:deny ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
全栈程序员站长
2022/09/09
2.5K1
彻底澄清子网掩码、反掩码、通配符掩码以及ospf network命令误区
理解通配符掩码
通配符掩码是一个32位比特数,以点分十进制表示,告诉路由器数据包IP地址的哪些比特需要和access-list命令中给定的IP地址相匹配。
全栈程序员站长
2022/09/15
1.2K0
子网掩码,反掩码与通配符之间的区别
1:子网掩码与反掩码的区别: 反掩码就是通配符掩码 通过标记0和1告诉设备应该匹配到哪位copy。 由于跟子网掩码刚好相zd反,所以也叫反掩码 例如掩码是255.255.255.0 wildcard-mask 就是0.0.0.255 255.255.255.248 反掩就是0.0.0.7 2:通配符掩码,ospf和Acl这儿用通配符掩码也不是每家的交换机都这么做,像cisco 3550就是用的子网掩码,所以不是一定的。
全栈程序员站长
2022/09/09
1.2K0
iOS逆向(8)-Monkey、Logos
https://juejin.im/post/5cc0983a6fb9a031ed20bd1d”
iOSSir
2019/06/14
1.9K0
iOS逆向(8)-Monkey、Logos
iOS 网络图片转为UIImage 和微信分享时缩略图片的压缩
我们的图片是从阿里云那里获取的网络图片,需要把网络图片转化为UIImage,下面就是方法:
honey缘木鱼
2018/12/14
2K0
iOS 网络图片转为UIImage 和微信分享时缩略图片的压缩
Signal之掩码操作
Kernel里,每个Task都有针对Signal的掩码(Mask)。掩码值为1表示拦截该Signal,即不处理Signal;掩码值为0表示会处理该Signal。而且默认情况下每个Task都会处理发给自己的Signal,只不过默认的处理方案是SIG_IGN(丢弃/忽略)。因此,要对Signal有所反应,就需要手动挂接Signal的处理机制了。今天看看Mask相关的操作
Taishan3721
2020/07/06
1.7K0
什么是通配符掩码
通配符掩码(Wildcard Mask) — 通配符掩码(Wildcard Mask)是一个32位的数量,用在与一个IP地址的联合上来决定在一个IP地址的那个位应该不忽略,在将那个地址与另一个IP地址相比时。一个通配符掩码在设置接入列表时被指定。
全栈程序员站长
2022/09/15
1.6K0
子网掩码详解
参考博客:https://blog.csdn.net/jason314/article/details/5447743
梅花
2022/05/11
2.1K0

相似问题

iOS 7的UIImage掩码问题

32

来自UIImage/CGImage的iOS层掩码?

12

iOS使用掩码和UIColor创建UIImage

11

UIImage掩码不起作用(Swift、iOS 10)

15

iOS 8 UIImage元数据

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文