2009-12-16 128 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。

同樣,使用「設備灰色」的已被普遍氣餒。你可能想仔細檢查,以確保你得到後面的色彩空間具有相同數量的組件,你指望它。