- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是 Quartz 新手。我有 2 张图像、一个背景和一个带有切口形状的蒙版,我想将其放在背景上以切出一个部分。生成的图像应该是切口的形状。这是我的面具(中间的形状是 0 alpha):
这是我的代码:
UIView *canvas = [[[sender superview] subviews] objectAtIndex:0];
UIGraphicsBeginImageContext(canvas.bounds.size);
CGColorSpaceRef colourSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef cgContext = CGBitmapContextCreate(NULL, canvas.bounds.size.width, canvas.bounds.size.height, 8, 0, colourSpace, kCGImageAlphaPremultipliedLast);
CGColorSpaceRelease(colourSpace);
CGImageRef maskImage = [[UIImage imageNamed:@"Mask.png"] CGImage];
CGContextClipToMask(cgContext, CGRectMake(0, 0, canvas.frame.size.width, canvas.frame.size.height), maskImage);
CGImageRef maskedImageRef = CGBitmapContextCreateImage(cgContext);
CGContextRelease(cgContext);
UIImage *maskedImage = [UIImage imageWithCGImage:maskedImageRef];
UIGraphicsEndImageContext();
[button setBackgroundImage:maskedImage forState:UIControlStateNormal];
除了什么都没有出现...知道我哪里出错了吗?非常感谢。
最佳答案
在使用蒙版裁剪上下文之后,您实际上应该在该上下文上绘制一些东西。
除此之外:
UIGraphicsBeginImageContextWithOptions
来支持比例因子。UIGraphicsBeginImageContext
,另一个使用 CGBitmapContextCreate
。一个就够了:)蒙版的源样本确定剪切区域的哪些点发生了变化
。换句话说,透明将变得透明简单的示例代码,我在 imageView 中剪切图像,然后将其设置回去:
UIGraphicsBeginImageContextWithOptions(self.imageView.frame.size, NO, 0.0);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0.0, self.imageView.frame.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGImageRef maskImage = [[UIImage imageNamed:@"mask.png"] CGImage];
CGContextClipToMask(context, self.imageView.bounds, maskImage);
CGContextTranslateCTM(context, 0.0, self.imageView.frame.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
[[self.imageView image] drawInRect:self.imageView.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
self.imageView.image = image;
使用 CGImageCreateWithMask
的例子:
UIImage *image = [UIImage imageNamed:@"image"];
CGImageRef originalMask = [UIImage imageNamed:@"mask"].CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(originalMask),
CGImageGetHeight(originalMask),
CGImageGetBitsPerComponent(originalMask),
CGImageGetBitsPerPixel(originalMask),
CGImageGetBytesPerRow(originalMask),
CGImageGetDataProvider(originalMask), nil, YES);
CGImageRef maskedImageRef = CGImageCreateWithMask(image.CGImage, mask);
UIImage *maskedImage = [UIImage imageWithCGImage:maskedImageRef scale:image.scale orientation:image.imageOrientation];
CGImageRelease(mask);
CGImageRelease(maskedImageRef);
关于objective-c - CGContextClipToMask 返回空白图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10801723/
到目前为止,我正在尝试在 iOS 上复制 CGContextClipToMask 的行为,但运气不佳。有谁知道 CGContextClipToMask 在内部是如何工作的?我已经阅读了文档,它说它只是
我试图通过使用剪贴蒙版剪掉路径的笔划,只留下阴影,在圆角矩形内绘制一个嵌入阴影。最终目标是近似通知中心内事物的嵌入外观。 我失败了。 CGContextClipToMask 根本不起作用,这尤其令人抓
此代码生成下图。据我了解 CGContextClipToMask,红色矩形不应该可见,因为它在裁剪区域之外。我在这里错过了什么?感谢您的帮助! CGContextRef context = UIGra
我是 Quartz 新手。我有 2 张图像、一个背景和一个带有切口形状的蒙版,我想将其放在背景上以切出一个部分。生成的图像应该是切口的形状。这是我的面具(中间的形状是 0 alpha): 这是我的代码
我正在尝试将 UIImage 保存到照片库中,并使用以下方法来执行此操作: func savePhoto() { UIGraphicsBeginImageContextWithOptions(
我正在尝试为我的图像添加剪辑蒙版。然后用手指在屏幕上触摸作画。 手指触摸和剪辑蒙版有效,但问题是我的 UIImage 看起来上下颠倒。 我该如何纠正? 这是我的面具的代码行: CGContextCli
是否可以让 CGContextClipToMask 忽略蒙版图像的灰度值并像纯黑白一样工作? 我有一个灰度图像,当我将它用作 mask 时,灰色被解释为 alpha channel 。这很好,除了我需
我无法在 Internet 上找到一个示例来教我如何即时创建一个圆圈,然后使用该圆圈来剪辑 UIImage。 这是我的代码,不幸的是它没有给我想要的结果。 //create a graphics co
我是一名优秀的程序员,十分优秀!