Às vezes UIImageView parece rejeitar a imagem tirada com iPhone Camera

votos
2

é muito estranho, porque este erro não acontece o tempo todo ...

Eu tenho o seguinte código:

- (IBAction)getPhoto:(id)sender {
  UIImagePickerController * picker = [[UIImagePickerController alloc] init];
  picker.delegate = self;   
#if TARGET_IPHONE_SIMULATOR
  picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;    
#else   
  picker.sourceType = UIImagePickerControllerSourceTypeCamera;  
#endif
  [self presentModalViewController:picker animated:YES];
}

com o seletor delegado correspondente

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
  UIImage *image = [[info objectForKey:@UIImagePickerControllerOriginalImage] imageByScalingToSize:CGSizeMake(480, 320)];
  [[self imageView] setImage:image];
  [picker dismissModalViewControllerAnimated:YES];
}

estranho é, somtimes a imagem aparece no imageView e às vezes não. Eu chamei
(GDB) po UIImagePNGRepresentation (imagem)
logo após setImage e enfiou a saída em um arquivo. O arquivo é um png perfeito.

Alguém já experimentou o mesmo? Alguém já encontrou uma solução para isso?

desde já, obrigado

Max

Publicado 03/03/2010 em 22:17
fonte usuário
Em outras línguas...                            


4 respostas

votos
3

Parece que você está ficando sem memória.

Eu acho que você é suposto para liberar o UIImagePickerControllerdepois de colocá-lo na tela com presentModalViewController:.

(Ele será retido por você, o controlador de vista que é apresentá-lo)

Respondeu 04/03/2010 em 03:48
fonte usuário

votos
1

Eu tive esse problema mesmo no 3GS. Mas eu poderia resolvê-lo, liberando a UIImagePickerViewController antes de definir o imageView.image Eu acho que isso libertou um par de bytes. Talvez esta informação ajuda.

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
 [self dismissModalViewControllerAnimated:YES];
 [picker release];
 UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage];
 imageView.image = image;
}
Respondeu 12/06/2010 em 01:51
fonte usuário

votos
1

Sim essa é a solução que funcionou para mim. Usando didreceivememorywarning para armazenar todos os dados TextField e UIImage para o telefone. Em pickerdidfinish Eu também salvar a imagem para o telefone. Onload posso verificar se o nome do arquivo de imagem existente no telefone, se assim for carregá-lo. Basicamente o sistema operacional iPhone está fechando seu aplicativo e reopennkng-lo. Ponha um pouco de NSLog em viewDidLoad e você vai notar que é chamada durante o processo de imagem tomada. Esse método só é suposto ter chamado uma vez. Se ele está sendo chamado novamente, então isso significa que seu aplicativo morreu e reiniciado. É um problema de memória. Não o suficiente poder de cavalo. Eu não vejo esta questão no iPhone 3GS

Respondeu 10/04/2010 em 06:44
fonte usuário

votos
1

A solução é:

Logo depois de tirar a foto do receivedMemoryWarning no controlador é chamado pelo sistema. Mas o próprio controlador permanece retida. Ao pressionar-se o uso do selector delegado é executada e a imagem em imageView é definido. Mas depois de dispensar o ponto de vista modal do sistema reinicializa a vista da ponta. Assim, a imagem de ponta substitui a imagem definida no seletor de delegado. Solução é armazenar o conteúdo de todos os campos de texto e visualizações em didReceiveMemoryWarning em um dicionário, e armazenar a imagem em uma variável de instância e redefinindo-os em viewDidLoad se estiverem presentes.

Respondeu 06/03/2010 em 08:30
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more