17

部分的に透明な単色の画像があります。イメージの通常バージョンと @2X バージョンの両方があります。コードで画像を別の色に着色できるようにしたいと思います。以下のコードは通常の画像では正常に機能しますが、@2X はアーティファクトで終わります。通常の画像にも同様の問題がある可能性があります。そうであれば、解像度の関係で検出できません。

+(UIImage *) newImageFromMaskImage:(UIImage *)mask inColor:(UIColor *) color {
    CGImageRef maskImage = mask.CGImage;
    CGFloat width = mask.size.width;
    CGFloat height = mask.size.height;
    CGRect bounds = CGRectMake(0,0,width,height);

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef bitmapContext = CGBitmapContextCreate(NULL, width, height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);
    CGContextClipToMask(bitmapContext, bounds, maskImage);
    CGContextSetFillColorWithColor(bitmapContext, color.CGColor);    
    CGContextFillRect(bitmapContext, bounds);

    CGImageRef mainViewContentBitmapContext = CGBitmapContextCreateImage(bitmapContext);
    CGContextRelease(bitmapContext);

    UIImage *result = [UIImage imageWithCGImage:mainViewContentBitmapContext];
    return result;
}

問題がある場合は、マスク イメージが を使用して読み込まれUIImage imageNamed:ます。また、Retina Simulator で実行すると @2X イメージが読み込まれることを確認しました。

更新:上記のコードは機能します。私が見たアーティファクトは、画像の消費者によって行われた追加の変換によって引き起こされました。この質問は、実際にはもう質問ではないため、削除されるか、後世に残される可能性があります。

4

2 に答える 2

4

問題のコードは作業コードです。バグは別のところにありました。

于 2011-04-18T15:43:11.823 に答える