Странное поведение с CGContext - iOS

Следующий код разбивает изображение на 2. Кажется, что он отлично работает с устройствами, не использующими сетчатку, однако он дает другой вывод для устройств с сетчаткой. Может ли кто-нибудь помочь мне исправить это? Спасибо..

Мой код

UIImage *img = [UIImage imageNamed:@"apple.png"];

CGSize sz = [img size];
UIGraphicsBeginImageContextWithOptions(CGSizeMake(sz.width/2, sz.height), NO, 0);
[img drawAtPoint:CGPointMake(-sz.width/2, 0)];
UIImage *right = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
rightView = [[[UIImageView alloc] initWithImage:right] autorelease];
rightView.frame = CGRectMake(self.view.frame.size.width/2, 0, self.view.frame.size.width/2, self.view.frame.size.height);

CGImageRef leftRef = CGImageCreateWithImageInRect([img CGImage],CGRectMake(0,0,sz.width/2,sz.height));
UIGraphicsBeginImageContextWithOptions(CGSizeMake(sz.width/2, sz.height), NO, 0);
CGContextRef con = UIGraphicsGetCurrentContext();
CGContextDrawImage(con, CGRectMake(0,0,sz.width/2.0,sz.height), leftRef);
UIImage *left = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImage *rotatedImage = [left imageRotatedByDegrees:180.0];

leftView = [[[UIImageView alloc] initWithImage:rotatedImage] autorelease];
leftView.frame = CGRectMake(0, 0, self.view.frame.size.width/2, self.view.frame.size.height);
leftView.transform = CGAffineTransformMake(-1,0,0,1,0,0);

CGImageRelease(leftRef);


[self.view addSubview:leftView];
[self.view addSubview:rightView];

без сетчатка

сетчатка

PS: я не знаю, важно ли это, но у apple.png есть версия @2x..

2 ответа

[-UIImage size] Свойство возвращает размер в точках, а не в пикселях. Вам, вероятно, нужно также позвонить [-UIImage scale] чтобы выяснить, как масштабируется изображение.

Когда вы создаете левый вид с

leftView = [[[UIImageView alloc] initWithImage:rotatedImage] autorelease];, 

Вы не указываете правильный масштаб. Вместо того, чтобы создавать свой UIImage таким образом:

UIImage *left = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImage *rotatedImage = [left imageRotatedByDegrees:180.0];

попробуйте создать CGImageRef и затем инициализировать UIImage, используя

[UIImage imageWithCGImage:scale:orientation:]

при этом указав правильный масштаб. Есть несколько способов преобразовать необработанные данные изображения из контекста в CGImageRef, или вы можете использовать созданное вами изображение и использовать свойство CGImage UIImage.

Другие вопросы по тегам