覆盖drawRect时的黑色视图:

时间:2016-06-08 10:02:27

标签: ios cgcontext

所以我关注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,所以你可以用任何语言回答。

1 个答案:

答案 0 :(得分:0)

This answer解决了我的问题:

  

CGBitmapContext supports only certain possible pixel formats.您可能需要kCGImageAlphaPremultipliedLast