2009-12-16 5 views
0

Nous avons un problème de transparence. Lors de l'écriture d'une image dans Context avec dégradé, la transparence (qui est indésirable) est appliquée. Nous ne savons pas pourquoi cela a été appliqué. Nous avons besoin que le contexte soit "UNIQUEMENT" avec Gradient mais pas avec "TRANSPARENCE".Problème avec transparence

Joindre l'extrait du code pour votre référence.

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

Alors, quelqu'un peut s'il vous plaît laissez-moi savoir pourquoi c'est ainsi? Ce serait d'une grande aide si ce problème était résolu.

Merci!

Répondre

0

Je n'ai pas essayé d'exécuter tout cela, mais vous semblez transmettre une valeur alpha à CGContextSetGrayFillColor.

En outre, l'utilisation de "dispositif gris" a été généralement déconseillée. Vous pouvez vérifier que l'espace de couleur que vous récupérez a le même nombre de composants que vous le souhaitez.