J'essaie d'obtenir CIImage
d'ImageView qui s'affichent à l'écran.
UIImage *image = myImageView.image;
convertir l'image UIImage
a CIImage
.
CIImage *cImage = [....];
Comment faire ?
J'essaie d'obtenir CIImage
d'ImageView qui s'affichent à l'écran.
UIImage *image = myImageView.image;
convertir l'image UIImage
a CIImage
.
CIImage *cImage = [....];
Comment faire ?
CIImage *ciImage = [UIImage imageNamed:@"test.png"].CIImage;
UIImage *uiImage = [[UIImage alloc] initWithCIImage:ciImage];
Pour résoudre le cas où myUIImage.CIImage
renvoie à nil
comme [UIImageView image]
vous pouvez plutôt faire [CIImage imageWithCGImage:myUIImage.CGImage]
- Dylan Hand
Version Swift :
let ciImage = UIImage(named: "test.png")!.ciImage
let uiImage = UIImage(ciImage: ciImage)
Pour résoudre le cas où myUIImage.ciImage
renvoie à nil
comme vous pouvez le faire à la place CIImage(cgImage: myUIImage!.cgImage!)
.
Bien que la réponse de Changxing Wang soit effectivement correcte, Apple indique que UIImage.CIImage ne fonctionnera pas toujours. Plus précisément, à partir de PocketCoreImage :
// Create a CIImage from the _inputImage. While UIImage has a property returning
// a CIImage representation of it, there are cases where it will not work. This is the
// most compatible route.
_filteredImage = [[CIImage alloc] initWithCGImage:_inputImage.CGImage options:nil];
Apple utilise également la méthode suivante, qui ne fonctionne pas pour moi :
[UIImage imageWithCIImage:_filteredImage]
Ma mise en œuvre personnelle, adaptée de ce poste fonctionne pour moi :
// result is a CIImage, output of my filtering.
// returnImage is (obviously) a UIImage that I'm going to return.
CIContext *context = [CIContext contextWithOptions:nil];
UIImage *returnImage =
[UIImage imageWithCGImage:[context createCGImage:result fromRect:result.extent]];
C'est la façon la plus compatible de le faire :
UIImage* u =[UIImage imageNamed:@"image.png"];
CIImage* ciimage = [[CIImage alloc] initWithCGImage:u.CGImage];
utilise maintenant ciimage...
et la version Swift :
let i1 = UIImage(named: "testImage")
if let cgi1 = i1?.cgImage {
let ci = CIImage(cgImage: cgi1)
//use ci
}
(correction d'une coquille dans l'instruction if let)
Voici un exemple complet de code que j'ai utilisé dans mes projets.
- (UIImage *)makeUIImageFromCIImage:(CIImage *)ciImage {
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef cgImage = [context createCGImage:ciImage fromRect:[ciImage extent]];
UIImage* uiImage = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
return uiImage;
}
CIImage
est en fait une recette pour une image. Vous rencontrerez des problèmes si vous essayez de convertir directement de CIImage
a UIImage
. Par exemple, en appelant
NSData * UIImageJPEGRepresentation (
UIImage *image,
CGFloat compressionQuality
);
retournera nil
.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.