Objective c 在iOS中混合图像
我有两个名为透明和彩色的图像,如上图所示。我想Objective c 在iOS中混合图像,objective-c,ios,transparency,Objective C,Ios,Transparency,我有两个名为透明和彩色的图像,如上图所示。我想 先显示透明图像 当用户触摸屏幕时,在手指划动时显示彩色图像 这是我的drawRect代码 - (void) drawRect:(CGRect)rect { [[UIColor redColor] set]; CGContextRef context1 = UIGraphicsGetCurrentContext(); UIImage *colorImage = [UIImage imageNamed:@"color.png"]
- (void) drawRect:(CGRect)rect
{
[[UIColor redColor] set];
CGContextRef context1 = UIGraphicsGetCurrentContext();
UIImage *colorImage = [UIImage imageNamed:@"color.png"];
UIImage *bwImage = [UIImage imageNamed:@"transparent.png"];
CGContextSetBlendMode(context1, kCGBlendModeSourceAtop);
// Draw the finger Strokes
for (UIBezierPath *path in [touchPaths allValues]) {
[path stroke];
}
CGContextDrawImage(context1, rect, colorImage.CGImage);
CGContextDrawImage(context1, rect, bwImage.CGImage);
UIGraphicsEndImageContext();
}
上面的代码只是创建了一个空白屏幕。我做错了什么?请帮帮我。您正在调用
UIGraphicsEndImageContext()
,但您从未调用过UIGraphicsBeginImageContext(…)
,因此它可能正在删除默认的图形上下文(或类似疯狂的事情)。那条线不应该在那里;这些函数用于创建您自己的UIImage
,您在这里不需要这样做。在单个视图的drawRect
方法中工作意味着每次用户绘制某个对象时,您都需要绘制两个图像和一个bezier路径。这将是相当低效的。您需要一种将图像和绘图区域存储在不同位置的方法
CALayer很适合解决这类问题。可以将图像存储在图层中,并让用户的图形遮罩其中一个图层。首先从示例开始,包括示例
对于真正平滑的绘图,您可以使用OpenGL,尽管这需要更多的工作才能正确绘制。看看苹果的例子
至于为什么这段代码不起作用,它确实画了两幅图。但是,绘制的第二幅图像将是透明图像。您的附件暗示这是不透明的灰色。这将使您的视图充满灰色,看起来什么也不做。如果您确定它没有画那么多,请检查以下内容:
UIImage *colorImage = [UIImage imageNamed:@"color.png"];
UIImage *bwImage = [UIImage imageNamed:@"transparent.png"];
// Check if the images loaded.
NSLog(@"colorImage = %@", colorImage);
if (!colorImage)
NSLog(@"colorImage did not load, nothing to draw");
NSLog(@"bwImage = %@", bwImage);
if (!bwImage)
NSLog(@"bwImage did not load, nothing to draw");
我正在呼叫UIGraphicsGetCurrentContext。我的印象是drawRect已经创建了一个可供绘制的上下文。如果我错了,请纠正我。是的,当调用
drawRect
时,已经为您创建了一个上下文,并且该上下文在drawRect
返回后关闭。它不是图像上下文,您不需要关闭它。您不需要任何东西来平衡UIGraphicsGetCurrentContext()
。它只返回当前状态。它没有构造任何新的东西,因此没有什么可处理的。