У меня есть одноцветное изображение с частичной прозрачностью. У меня есть как обычные, так и @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:
. Кроме того, я подтвердил, что изображение @2X загружается при запуске на симуляторе сетчатки.
Обновление: приведенный выше код работает. Артефакты, которые я видел, были вызваны дополнительными преобразованиями, сделанными потребителем изображений. Этот вопрос можно было бы удалить, поскольку он больше не является вопросом или не оставлен для потомков.