2009-12-16 4 views
0

투명성 문제가 있습니다. Context에 그래디언트로 이미지를 쓰는 동안 투명도 (원하지 않음)가 적용됩니다. 왜 이것이 적용되고 있는지 확실하지 않습니다. 우리는 "TRANSPARENCY"가 아니라 그라디언트가 "유일한"컨텍스트를 필요로합니다.투명성 문제

참조 용 스 니펫을 첨부하십시오.

- (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

나는이 중 아무 것도 실행시키지 않았지만 CGContextSetGrayFillColor에 알파 값을 전달하는 것처럼 보입니다.

또한 "장치 회색"의 사용은 일반적으로 권장되지 않습니다. 다시 돌아 오는 색상 공간에 원하는만큼의 컴포넌트가 있는지 다시 확인하고 싶을 것입니다.