2009-12-16 134 views
0

我们有透明度的问题。使用渐变将图像写入上下文时,透明度(这是不需要的)正在得到应用。我们不确定为什么这已被应用。我们需要上下文是“ONLY”与渐变,但不与“透明度”。问题与透明度

附加的代码片段供大家参考。

- (UIImage *)ReflectImage:(CGFloat)refFract { 
    int reflectionHeight = self.size.height * refFract; 

    CGImageRef gradientMaskImage = NULL; 

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); 

    CGContextRef gradientBitmapContext = CGBitmapContextCreate(nil, 1, reflectionHeight, 
                   8, 0, colorSpace, kCGImageAlphaNone); 

    CGFloat colors[] = {0.0, 1.0, 1.0, 1.0}; 

    CGGradientRef grayScaleGradient = CGGradientCreateWithColorComponents(colorSpace, colors, NULL, 2); 
    CGColorSpaceRelease(colorSpace); 

    CGPoint gradientStartPoint = CGPointMake(0, reflectionHeight); 
    CGPoint gradientEndPoint = CGPointZero; 

    CGContextDrawLinearGradient(gradientBitmapContext, grayScaleGradient, gradientStartPoint, 
           gradientEndPoint, kCGGradientDrawsAfterEndLocation); 
    CGGradientRelease(grayScaleGradient); 

    CGContextSetGrayFillColor(gradientBitmapContext, 0.0, 0.5); 
    CGContextFillRect(gradientBitmapContext, CGRectMake(0, 0, 1, reflectionHeight)); 

    gradientMaskImage = CGBitmapContextCreateImage(gradientBitmapContext); 
    CGContextRelease(gradientBitmapContext); 

    CGImageRef reflectionImage = CGImageCreateWithMask(self.CGImage, gradientMaskImage); 
    CGImageRelease(gradientMaskImage); 

    CGSize size = CGSizeMake(self.size.width, self.size.height + reflectionHeight); 

    UIGraphicsBeginImageContext(size); 

    [self drawAtPoint:CGPointZero]; 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextDrawImage(context, CGRectMake(0, self.size.height, self.size.width, reflectionHeight), reflectionImage); 

    UIImage* result = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    CGImageRelease(reflectionImage); 

    return result; 
} 

因此,有人可以请让我知道为什么会是这样?如果这个问题得到解决,这将非常有帮助。

谢谢!

回答

0

我没有尝试运行任何的这一点,但你似乎传递一个Alpha值CGContextSetGrayFillColor。

同样,使用“设备灰色”的已被普遍气馁。你可能想仔细检查,以确保你得到后面的色彩空间具有相同数量的组件,你指望它。