Ios 使用CGColorSpaceCreateDeviceGray,但启用alpha

Ios 使用CGColorSpaceCreateDeviceGray,但启用alpha,ios,alpha,grayscale,Ios,Alpha,Grayscale,我有一个带有一些alpha值的UIImage,我想制作一个灰色版本。我一直在使用下面的,它适用于图像的非alpha部分,但是由于alpha不受支持/关闭,alpha部分变成黑色。。。我如何成功地打开alpha支持 (我修改了stackoverflow周围浮动的代码,以支持其他刻度(read RETAIN)) 我发现这篇文章包含大量的尝试。如果我发现任何支持视网膜(不同比例)和alpha的东西,我会报告回来。试试这个->现在我决定编辑图片中的alpha部分来解决这个问题,但是这个页面看起来很中肯,

我有一个带有一些alpha值的UIImage,我想制作一个灰色版本。我一直在使用下面的,它适用于图像的非alpha部分,但是由于alpha不受支持/关闭,alpha部分变成黑色。。。我如何成功地打开alpha支持

(我修改了stackoverflow周围浮动的代码,以支持其他刻度(read RETAIN))


我发现这篇文章包含大量的尝试。如果我发现任何支持视网膜(不同比例)和alpha的东西,我会报告回来。试试这个->现在我决定编辑图片中的alpha部分来解决这个问题,但是这个页面看起来很中肯,并承诺so+1。
-(UIImage*)grayscaledVersion2 {
    // Create image rectangle with current image width/height
    const CGRect RECT = CGRectMake(0, 0, self.size.width * self.scale, self.size.height * self.scale);

    // Grayscale color space
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();

    // Create bitmap content with current image size and grayscale colorspace
    CGContextRef context = CGBitmapContextCreate(nil, RECT.size.width, RECT.size.height, 8, 0, colorSpace, kCGImageAlphaNone);
    // kCGImageAlphaNone = no alpha, kCGImageAlphaPremultipliedFirst/kCGImageAlphaFirst/kCGImageAlphaLast = crash

    // Draw image into current context, with specified rectangle
    // using previously defined context (with grayscale colorspace)
    CGContextDrawImage(context, RECT, [self CGImage]);

    // Create bitmap image info from pixel data in current context
    CGImageRef imageRef = CGBitmapContextCreateImage(context);

    UIImage* imageGray = [UIImage imageWithCGImage:imageRef scale:self.scale orientation:self.imageOrientation];
    DLog(@"greyed %@ (%f, %f %f) into %@ (%f, %f %f)", self, self.scale, self.size.width, self.size.height, imageGray, imageGray.scale, imageGray.size.width, imageGray.size.height);

    // Release colorspace, context and bitmap information
    CGColorSpaceRelease(colorSpace);
    CGContextRelease(context);
    CFRelease(imageRef);

    return imageGray;
}