2011-11-06 3 views
2

J'utilise UIImagePicker pour charger une image que j'ai chargée dans la photothèque (sur mon iPad), mais elle se charge sans la couche alpha. J'ai tripple vérifié pour s'assurer que l'image en a un. Sauf si elle est supprimée lors de la synchronisation avec iTunes?Comment charger une image à partir de UIImagePicker avec alpha

Voici le code que je me sers pour le sélecteur d'image quand il se termine la cueillette:

-(void)imagePickerController: (UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    //dissmiss picker 
    [imagePopOver dismissPopoverAnimated:YES]; 

    //get the picker image 
    UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 

    //create image view for selected image 
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 
    imageView.frame = CGRectMake(0, 0, imageView.image.size.width, imageView.image.size.height); 
    imageView.center = CGPointMake(512, 384); 
    [imageLayer addSubview:imageView]; 

    //release image and image view 
    [image release]; 
    [imageView release]; 
} 

Qu'est-ce que je fais mal? J'espère que ce n'est pas un 'Doh!' moment.

Répondre

-1

Avez-vous essayé d'appeler:

imageView.backgroundColor = [UIColor clear] 

probablement vous devrez peut-être faire en sorte que ImageLayer est trop transparente,. Je ne suis pas sûr de la façon dont cela a été mis en œuvre.

0

Peu importe. C'était comme je le soupçonnais. Le canal alpha est perdu d'une manière ou d'une autre lors de l'importation du png via iTunes (synchronisation). Doit être en train de convertir en 24bit? J'ai téléchargé mon image sur le Web, puis l'ai téléchargée via le navigateur vers photo lib et ça va maintenant.

6

UIImagePicker prend en charge les images avec un canal alpha, comme l'indique Kangoo dans sa propre réponse. Cependant, les conditions pour que cela fonctionne correctement sont plus compliquées que le simple téléchargement d'une image à travers le navigateur vers la librairie photo. Tout d'abord, il est tout à fait logique d'utiliser le sélecteur d'image d'iOS pour sélectionner uniquement le rouleau de la caméra. Sur un appareil iOS, il est possible d'enregistrer des images depuis Mail ou Safari vers le rouleau de la caméra, et d'autres applications prenant en charge les images avec un canal alpha vous permettent d'enregistrer sur le rouleau de la caméra.

Les images dans le reste de la bibliothèque Photos, autres que le rouleau de pellicule, auraient été enregistrées par iTunes. Et c'est un problème. Bien qu'iPhoto sur OSX prenne en charge les images PNG avec un canal alpha, lorsque la synchronisation iTunes envoie ces images vers un périphérique iOS, les zones transparentes de l'arrière-plan de l'image deviennent blanches et opaques. Deuxièmement, si vous configurez le sélecteur d'image iOS pour permettre l'édition (recadrage carré, déplacement, échelle), les zones transparentes de l'arrière-plan de l'image deviendront noires opaques! Mais si vous configurez le sélecteur d'image d'iOS pour qu'il ne permette PAS l'édition et que vous sélectionniez une image à partir du rouleau de la caméra, l'image sélectionnée (UIImage) peut avoir un canal alpha.

Sur le UIImage choisi, utilisez CGImageGetAlphaInfo (pickedImage.CGImage) pour obtenir le CGImageAlphaInfo, et si cette information ne sont pas (ou kCGImageAlphaNone kCGImageAlphaNoneSkipFirst ou kCGImageAlphaNoneSkipLast), puis l'image a un canal alpha.

+0

Bienvenue sur stackoverflow. Vous pourriez rendre cette réponse plus utile en ajoutant quelques références. – CCoder

Questions connexes