0

網膜デバイス上で鮮明できれいに見える画像(Xおよび2Xバリアントを含む)があります。しかし、グラデーション効果が必要でした。その上にグラデーションを描くと、画像の鮮明さが失われます。グラデーションが正確な画像の境界に配置されていないためだと思います。これを修正する方法の提案。画像(グラデーション効果ありとなし)とグラデーションコードを添付しています:

- (UIImage *)tintedWithLinearGradientColors:(NSArray *)colorsArray forImageNamed:(NSString *)iImageName {
    // Load image
    UIImage *myIconImage = [UIImage imageNamed:iImageName];
    // Create gradient
    UIColor *colorOne = [colorsArray objectAtIndex:1]; // top color
    UIColor *colorTwo = [colorsArray objectAtIndex:0]; // bottom color

    NSArray *colors = [NSArray arrayWithObjects:(id)colorOne.CGColor, (id)colorTwo.CGColor, nil];
    CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
    CGGradientRef gradient = CGGradientCreateWithColors(space, (__bridge CFArrayRef)colors, NULL);

    UIGraphicsBeginImageContext(myIconImage.size);
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextTranslateCTM(context, 0, myIconImage.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);

    CGRect rect = CGRectMake(0, 0, myIconImage.size.width, myIconImage.size.height);

    // image drawing code
    CGContextSetBlendMode(context, kCGBlendModeNormal);
    CGContextDrawImage(context, rect, myIconImage.CGImage);

    // draw tint color, preserving alpha values of original image
    CGContextSetBlendMode(context, kCGBlendModeMultiply);
    CGContextClipToMask(context, rect, myIconImage.CGImage);
    CGContextDrawLinearGradient(context, gradient, CGPointMake(0,0), CGPointMake(0, myIconImage.size.height), 0);

    UIImage *coloredImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return coloredImage;
}

ここに画像の説明を入力してください

ここに画像の説明を入力してください

4

2 に答える 2

0

このグラデーションをコードで追加する必要がありますか?そうでない場合は、フォトショップまたは他のソフトウェアでグラデーションを追加してから、すでにグラデーションを使用してプロジェクトに画像を追加します。

于 2013-01-10T20:12:43.997 に答える
0

ラインの交換

UIGraphicsBeginImageContext(myIconImage.size);
with
UIGraphicsBeginImageContextWithOptions(myIconImage.size, NO, myIconImage.scale);

私のために働いた。

于 2013-01-10T20:37:09.703 に答える