Странное поведение с 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..


person user1526474    schedule 30.09.2012    source источник


Ответы (2)


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

person user1118321    schedule 30.09.2012

Когда вы создаете вид слева с помощью

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.

person mbroch2    schedule 05.10.2012
comment
Спасибо за ваш ответ .. Не могли бы вы привести пример? - person user1526474; 06.10.2012