Цвета немного отличаются при создании нового изображения из UIImage с помощью UIGraphics и CGImage.

Я использую UIImageView с contentMode:UIViewContentModeScaleAspectFill, который содержит изображение, которое не полностью заполняет UIImageView.

Например, UIImageView имеет размер: ширина = 480; высота = 180, но изображение внутри имеет только размер: ширина = 320; высота = 180. Следовательно, слева и справа от 80 есть четкий запас.

Я создал эту функцию, чтобы заполнить эти 80 пикселей шаблоном первого прямоугольника 1x180 пикселей:

- (UIImage *)repeatEdgesForImage:(UIImage *)image withDesiredSize:(CGSize)size {

UIImage *result = nil;

double ratio = image.size.height / size.height;
int width = size.width * ratio;

UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, image.size.height), NO, 0.0);

CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], CGRectMake(0, 0, 1, image.size.height));
UIImage *fillImg = [UIImage imageWithCGImage:imageRef];
[fillImg drawAsPatternInRect:CGRectMake(0, 0, width, image.size.height)];

int offset = (width - image.size.width) / 2;
[image drawAtPoint:CGPointMake(offset, 0) blendMode:kCGBlendModeNormal alpha:1.0];

result = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return result; }

Работает нормально, но результат не совсем идеальный, потому что цвета немного отличаются:

введите здесь описание изображения

Как видите, левая и правая стороны немного отличаются по цвету. Я не уверен, происходит ли это от преобразования UIImage в CGImage или откуда-то еще?


person electronix384128    schedule 28.04.2013    source источник


Ответы (1)


Я нашел ответ сам.

Проблема была в исходном изображении. Кажется, что первый 1px немного отличается от остальных...

изменение этой строки работает:

CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], CGRectMake(5, 0, 1, image.size.height));

По сути, выходя из зоны безопасности 5 пикселей;), а затем беря 1 пиксель ...

person electronix384128    schedule 29.04.2013