所以我关注simple tutorial以使用户能够在视图上绘图并且我已经使代码正常工作。但是我想在视图中添加背景图像,因此用户正在绘制该图像。
我遇到的问题是PaintView
的背景总是黑色,但PaintView
背后有非黑色视图。
我认为问题在于CGImageRef cacheImage = CGBitmapContextCreateImage(cacheContext);
在我希望它创建透明背景时会创建黑色背景。
所以现在的问题是,如何解决这个问题,以便PaintView
的背景是透明的(或者我从CGBitmapContextCreateImage
获得的图像,具体取决于问题究竟是什么)。< / p>
教程中建议的代码:
- (void) drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGImageRef cacheImage = CGBitmapContextCreateImage(cacheContext);
CGContextDrawImage(context, self.bounds, cacheImage);
CGImageRelease(cacheImage);
}
我用来绘制图像的代码:
- (void) drawRect:(CGRect)rect {
if(_snapshot != nil) {
[_snapshot drawInRect:rect];
}
CGContextRef context = UIGraphicsGetCurrentContext();
CGImageRef cacheImage = CGBitmapContextCreateImage(cacheContext);
CGContextDrawImage(context, self.bounds, cacheImage);
CGImageRelease(cacheImage);
}
_snapshot
是我要显示的UIImage
。
我的下一个想法是,当我创建cacheContext时,我用黑色背景初始化它,它应该是透明的。任何想法如何做到这一点?
编辑:我从CGContext
删除了涉及drawRect
的所有内容(只留下了我的图片的图纸),它用于绘制图像,但包括CGContext调用,这会呈现为黑色。
PS:我目前正在使用Xamarin,但我在Objective-C中提出过要求,因为Xamarin重命名了很多与CGContexts相关的东西。我可以阅读C#,Objective-C和Swift,所以你可以用任何语言回答。
答案 0 :(得分:0)
This answer解决了我的问题:
CGBitmapContext
supports only certain possible pixel formats.您可能需要kCGImageAlphaPremultipliedLast
。