2014-12-21 1 views
0

Я пытаюсь подражать тому, что Celebrity Clicks делает: добавьте знаменитую наклейку в камеру, разместите ее и нарисуйте, а затем сделайте снимок. Это должно дать вам фотографию с нанесенным наклейкой, что и делает Celebrity Click. Тем не менее, у меня возникли проблемы с объединением фото камеры с наклейкой. Есть несколько проблем: шкала и положение наклейки неправильны при применении к окончательному изображению камеры, потому что изображение, сделанное с камеры, на самом деле намного больше как по разрешению, так и по размеру, чем изображение, показанное на прямой трансляции камеры, когда вы устанавливаете наклейку.Как добавить наклейку на фотоаппарат

Вот что я делаю сейчас:

[(GPUImageStillCamera *)videoCamera capturePhotoAsImageProcessedUpToFilter:selectedFilter withCompletionHandler:^(UIImage *processedImage, NSError *error) { 
    selectedImage = [self imageByCombiningImage:processedImage withImage:celebOverlayView.imageView.image]; 
}]; 

- (UIImage*)imageByCombiningImage:(UIImage*)firstImage withImage:(UIImage*)secondImage { 
UIImage *image = nil; 
CGSize newImageSize = CGSizeMake(MAX(firstImage.size.width, secondImage.size.width),   MAX(firstImage.size.height, secondImage.size.height)); 
if (UIGraphicsBeginImageContextWithOptions != NULL) { 
    UIGraphicsBeginImageContextWithOptions(newImageSize, NO, [[UIScreen mainScreen] scale]); 
} else { 
    UIGraphicsBeginImageContext(newImageSize); 
} 
[firstImage drawInRect:cameraView.frame]; 

[firstImage drawAtPoint:CGPointMake(roundf((newImageSize.width-firstImage.size.width)/2), 
            roundf((newImageSize.height-firstImage.size.height)/2))]; 
[secondImage drawAtPoint:CGPointMake(roundf((newImageSize.width-secondImage.size.width)/2), 
            roundf((newImageSize.height-secondImage.size.height)/2))]; 
image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

return image; 
} 

Я приложил до и после фотографии, так что вы можете увидеть мою проблему.

камеры Экран настройки: enter image description here

Снимок сделан с камерой с наклейкой применяются: enter image description here

Я предполагаю, что есть лучший способ объединить два изображения или просто применять наклейку при заданных координатах к снимку, снятому камерой. Какие-либо предложения?

ответ

1

Это легче всего, если вы сохраняете относительный кадр добавленного вида в сборщике, а затем вычисляете новый кадр при применении добавленного изображения, объединяющего два изображения.

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

Кроме того, за то, что вы делаете, я предлагаю вам потерять основную графику, чтобы нарисовать содержимое изображения, а просто использовать представление изображения: создать изображение изображения с размером фонового изображения, установить изображение, а затем добавить другое изображение с добавленным изображением и установите кадр, как описано выше. Затем просто создайте снимок экрана и сделайте свое изображение. Таким образом, у вас не будет проблем с масштабированием, преобразованиями и т. Д.

+0

Итак, вы бы предложили создать представление, которое содержит два изображения: один с изображением с камеры и один с наклейкой, а затем просто снимок экрана из этого представления? – damjandd

+0

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

+0

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

 Смежные вопросы

  • Нет связанных вопросов^_^