четверг, 2 декабря 2010 г.

Выбор фотографии из галереи на iPad

Мда, как-то глупо выглядит мой предидущий пост Возвращение джедая, написан еще 14 сентября. Почти 2 месяца я возвращался. Но я постараюсь все таки заставить себя писать.

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

Еще меня обвинили в обмане. Мол я попиздеть пришел, а ничего конкретного не говорю. Согласен, отныне буду писать код и меньше текста.



Итак, я все еще работаю над созданием детской книжки для iPad на cocos2D. Одной из основных фич, должна стать функция замены лица главного персонажа. Лицо можно выбрать из набора имеющихся или вырезать из фотографии взятой в вашей галерее.

Разобъем эту функцию на несколько задач:
1: Выбор фотографии из галереи
2: Перемещение фотографии и изменение размера, чтоб подогнать под размер лица персонажа.
3: Вырезание лица из фотографии, то есть, наложение маски на фотку.


Выбор фотографии из галереи iPad

Для начала создадим кнопку вызова нашей функции.


CCMenuItem *photoPick = [CCMenuItemImage itemFromNormalImage:@"choosePhoto.png" selectedImage:@"choosePhoto2.png" target:self selector:@selector(showPhotoLibrary)];
photoPick.position = ccp(338, 60);
        
CCMenu *menuNew = [CCMenu menuWithItems:photoPick, maskPhoto, nil];
[self addChild: menuNew];


Дальше приведу функцию открытия PopUp для выбора фотографии:


-(void) showPhotoLibrary
{
if (picker) {
[picker dismissModalViewControllerAnimated:NO];
[picker.view removeFromSuperview];
[picker release];
}
if (popover) {
[popover dismissPopoverAnimated:NO];
[popover release];
}
picker = [[[UIImagePickerController alloc] init] retain];
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
picker.wantsFullScreenLayout = YES;
popover = [[[UIPopoverController alloc] initWithContentViewController:picker] retain];
[popover setDelegate:self];
CGSize winsize = [[CCDirector sharedDirector] winSize];
[popover setPopoverContentSize:CGSizeMake(320, winsize.height) animated:NO];
CGRect r = CGRectMake(20,20,10,10);
r.origin = [[CCDirector sharedDirector] convertToGL:r.origin];
[popover presentPopoverFromRect:r inView:[[CCDirector sharedDirector] openGLView] permittedArrowDirections:UIPopoverArrowDirectionDown animated:NO];
}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)_picker
{
[_picker dismissModalViewControllerAnimated:YES];
[_picker.view removeFromSuperview];
[_picker release];
_picker = nil;
[popover dismissPopoverAnimated:YES];
[popover release];
popover = nil;
}

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
[picker dismissModalViewControllerAnimated:YES];
[picker.view removeFromSuperview];
[picker release];
picker = nil;
}
-(void)imagePickerController:(UIImagePickerController *)_picker
didFinishPickingMediaWithInfo:(NSDictionary *)info{
newImage = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
[_picker dismissModalViewControllerAnimated:YES];
[_picker.view removeFromSuperview];
[_picker release];
_picker = nil;
[popover dismissPopoverAnimated:YES];
[popover release];
popover = nil;
if (imageFromPicker != nil) {
[self removeChild:imageFromPicker cleanup:TRUE];
}
imageFromPicker = [CCSprite spriteWithCGImage:newImage.CGImage key:nil];
[self removeChildByTag:1001 cleanup:TRUE];
    CGSize winsize = [[CCDirector sharedDirector] winSize];
    imageFromPicker.position = ccp(winsize.width/2, winsize.height/2);
[self addChild:imageFromPicker];
}


После выбора в попАпе фотографии она заносится в спрайт imageFromPicker.

Кому что не понятно - пишите комментарии или мне на почту/джаббер.

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

Продолжение следует...
blog comments powered by Disqus