即使alpha等于1.0,UIImage也会在边缘变得透明

时间:2015-07-29 14:51:17

标签: ios uiimageview uiimage quartz-graphics cgcontext

我试图制作彩票刮刮游戏并找到一些我可以使用的开源代码。但是,它不是很好,我不知道如何解决它。主要问题是您设置为刮开表面的图像在顶部和底部边缘周围变得部分透明(这似乎是随机发生的,但大约90%的时间都是如此)。图像也颠倒翻转,就像盯着镜子一样。

在下面的图片中,右边的圆圈是一个正常的imageView,带有正确的图像(它看起来翻转,因为,而不是找到翻转图像的代码,我只是决定编辑我的图像,所以当它被翻转时它看起来很正常)。右边的图像是刮开的。我相信,通过这种方法可以创造它的外观:

- (void)initContextWithImage:(UIImage *)image
{
    int width       = self.frame.size.width;
    int height      = self.frame.size.height;
    self.opaque     = NO;
    CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceGray();

    CFMutableDataRef pixels = CFDataCreateMutable( NULL , width * height );
    alphaPixels = CGBitmapContextCreate( CFDataGetMutableBytePtr( pixels ) , width , height , 8 , width , colorspace , kCGImageAlphaNone );
    provider = CGDataProviderCreateWithCFData(pixels);
    CFRelease(pixels);

    // Create scratchable CGImageRef
    scratchable = [image CGImage];

    // Set up CGContext for real
    CGContextSetFillColorWithColor(alphaPixels, [UIColor blackColor].CGColor);
    CGContextFillRect(alphaPixels, self.frame);

    CGContextSetStrokeColorWithColor(alphaPixels, [UIColor whiteColor].CGColor);
    CGContextSetLineWidth(alphaPixels, lineWidth);
    CGContextSetLineCap(alphaPixels, kCGLineCapRound);

    CGImageRef mask = CGImageMaskCreate(width, height, 8, 8, width, provider, nil, NO);
    scratched = CGImageCreateWithMask(scratchable, mask);

    CGImageRelease(mask);
    CGColorSpaceRelease(colorspace);

    _promptView = nil;
    _touched = NO;
}

我有什么方法可以解决这个透明度问题吗?

enter image description here

0 个答案:

没有答案