Проблема с прозрачностью - PullRequest
       15

Проблема с прозрачностью

0 голосов
/ 16 декабря 2009

У нас проблема с прозрачностью. При записи изображения в контекст с градиентом применяется прозрачность (что нежелательно). Мы не уверены, почему это применяется. Нам нужно, чтобы контекст был «ТОЛЬКО» с градиентом, а не с «ПРОЗРАЧНОСТЬЮ».

Прикрепление фрагмента кода для справки.

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

Итак, кто-нибудь, пожалуйста, дайте мне знать, почему это так? Было бы очень полезно, если бы эта проблема была решена.

Спасибо !!

1 Ответ

0 голосов
/ 16 декабря 2009

Я не пробовал запускать что-либо из этого, но вы, похоже, передаете альфа-значение CGContextSetGrayFillColor.

Кроме того, использование «устройства серого» обычно не рекомендуется. Возможно, вы захотите перепроверить, чтобы убедиться, что цветовое пространство, которое вы получаете, имеет столько же компонентов, сколько вы ожидаете.

...