iPhone SDK: проблема с сохранением одного изображения над другим - PullRequest
0 голосов
/ 20 июня 2011

В основном я делаю приложение, в котором пользователь делает фотографию или выбирает ее уже на своем устройстве, а затем накладывает на нее наложение.

Итак, я вроде все хорошо кодировал,Кроме того, после того как пользователь выбрал оверлей и поместил его, при сохранении размер оверлея изменился, тогда как значения x и y кажутся правильными.

И вот этот код я использую длядобавьте оверлей («изображение» - это фотография пользователя):

float wid = (overlay.image.size.width);
float hei = (overlay.image.size.height);

overlay.frame = CGRectMake(0, 0, wid, hei);
[image addSubview:overlay];

И этот код используется для сохранения полученного изображения:

UIGraphicsBeginImageContext(image.image.size);  

// Draw the users photo  
[image.image drawInRect:CGRectMake(0, 0, image.image.size.width, image.image.size.height)];  

// Draw the overlay  
float xx = (overlay.center.x);
float yy = (overlay.center.y);

CGRect aaFrame = overlay.frame;
float width = aaFrame.size.width;
float height = aaFrame.size.height;


[overlay.image drawInRect:CGRectMake(xx, yy, width, height)];
    UIGraphicsEndImageContext();

Любая помощь?Спасибо

1 Ответ

2 голосов
/ 20 июня 2011

Проблема в том, что вы используете размер изображения, а не размер кадра представления изображения.Изображение кажется намного больше, чем его изображение, поэтому, когда вы используете размер изображения, размер другого изображения оказывается намного меньше по сравнению с ним, хотя он по-прежнему имеет правильный размер.Вы можете изменить свой фрагмент на это -

UIGraphicsBeginImageContext(image.frame.size);  

// Draw the users photo  
[image.image drawInRect:CGRectMake(0, 0, image.frame.size.width, image.frame.size.height)];  
[overlay.image drawInRect:overlay.frame];

UIImage * resultingImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

Предотвращение потери качества

Хотя приведенный выше метод приводит к потере разрешения, попытка нарисовать родительское изображение вего правильное разрешение может оказать нежелательное влияние на его дочернее изображение, т. е. если наложение не имеет самого высокого разрешения, оно может перестать быть растянутым.Однако вы можете попробовать этот код, чтобы нарисовать его в разрешении родительского изображения (не проверено, дайте мне знать, если у вас есть проблемы) -

float verticalScale = image.image.size.height / image.frame.size.height;
float horizontalScale = image.image.size.width / image.frame.size.width;

CGRect overlayFrame = overlay.frame;
overlayFrame.origin.x *= horizontalScale;
overlayFrame.origin.y *= verticalScale;
overlayFrame.size.width *= horizontalScale;
overlayFrame.size.height *= verticalScale;

UIGraphicsBeginImageContext(image.image.size);  

// Draw the users photo  
[image.image drawInRect:CGRectMake(0, 0, image.image.size.width, image.image.size.height)];  
[overlay.image drawInRect:overlayFrame];

UIImage * resultingImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();
...