2013-04-28 1 views
2

J'utilise un UIImageView avec contentMode: UIViewContentModeScaleAspectFill qui contient une image qui ne remplit pas complètement UIImageView. Par exemple, l'UIImageView a la taille: width = 480; height = 180 mais l'image à l'intérieur n'a que la taille: width = 320; height = 180. Par conséquent, il y a une marge nette sur le côté gauche et à droite de 80.Les couleurs sont légèrement différentes lors de la création d'une nouvelle image depuis UIImage avec UIGraphics et CGImage

J'ai créé cette fonction pour remplir ces 80px avec un motif de la première rect 1x180px:

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

Il fonctionne bien, mais le résultat est pas tout à fait parfait, parce que les couleurs sont légèrement différentes:

enter image description here

Comme vous pouvez le voir à gauche et à droite sont légèrement différentes en couleur. Je ne suis pas sûr si cela vient de la conversion de UIImage à CGImage ou d'ailleurs?

Répondre

0

J'ai trouvé moi-même la réponse.

Le problème était dans l'image source. Il semble que la première 1px est légèrement différente de celle du reste ...

agit en modifiant cette ligne:

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

Fondamentalement, laissant une zone de sécurité 5px;) puis prendre 1px ...

Questions connexes