2012-06-22 11 views
5

Tengo un problema con la imagen Core. lo que estoy haciendo es obtener una imagen de UIImageView y luego usar algún código que encontré en los tutoriales (soy nuevo en Core image) pero luego quiero volver a poner la imagen sepia en el mismo UIImageView cada vez que intento poner la nueva imagen en la vista que simplemente desaparece. He probado para ver si la vista de la imagen contiene una imagen y lo hace, pero no está visible. ¿Alguna sugerencia sobre qué hacer?cómo aplicar correctamente el filtro de imagen principal

EDIT: bien, tengo el filtro sepia para que funcione, entonces intenté posterize y tuve el mismo problema, la imagen simplemente desaparece. Aquí está el código:

CIImage *beginImage = [CIImage imageWithCGImage:[image_view.image CGImage]]; 
context = [CIContext contextWithOptions:nil]; 
filter = [CIFilter filterWithName:@"CIColorPosterize" keysAndValues:kCIInputImageKey, beginImage,@"inputLevels",[NSNumber numberWithFloat:0.8], nil]; 
CIImage *outputImage = [filter outputImage]; 
CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; 
UIImage *newImg = [UIImage imageWithCGImage:cgimg]; 
[image_view setImage:newImg]; 
CGImageRelease(cgimg); 
+0

enviar el código que tiene hasta el momento !!! – trumpetlicks

+0

¡acaba de publicarlo! –

+0

Faltan filtros CoreImage del iOS SDK. Creo que Posterize es uno de ellos. Google for iOS admite filtros CoreImage para la lista de compatibles. –

Respuesta

11

intentar algo como esto (Digamos que usted tiene una UIImageView * myImageView)

CIImage *beginImage = [CIImage imageWithCGImage:[myImageView.image CGImage]]; 
CIContext *context = [CIContext contextWithOptions:nil]; 

CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone" keysAndValues: kCIInputImageKey, beginImage, @"inputIntensity", [NSNumber numberWithFloat:0.8], nil]; 
CIImage *outputImage = [filter outputImage]; 

CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; 
UIImage *newImg = [UIImage imageWithCGImage:cgimg]; 

[myImageView setImage:newImg]; 

CGImageRelease(cgimg); 
+0

¡ah! ¡Eso funciona! ¡Muchas gracias! –

+0

La fuente de esta respuesta: http://www.raywenderlich.com/22167/beginning-core-image-in-ios-6 –

+3

O esto: http://blog.objectgraph.com/index.php/2011/ 12/31/core-image-framework-in-ios-5-0/o esto: http://books.google.com/books?id=ANOhiaaOwjAC&pg=PA633&lpg=PA633&dq=cisepiatone&source=bl&ots=aRg2fklJUm&sig=8eb3ThWDPwqmkz0ZN-8WHZQLb6w&hl = en & sa = X & ei = -_ XPU8mkDIeCzAP40oKYCw & redir_esc = y # v = onepage & q = cisepiatone & f = falso o este http://technet.weblineindia.com/mobile/apply-image-filters-using-coreimage-framework-in-ios/2/ o ... – Ladislav

0

mismo código en Swift 3.0 en Xcode 8.2 (Mi imageView en el proyecto es "@IBOutlet var photoImageView: UIImageView ") control con éxito en un dispositivo iPhone iOS 7plus 10

guard let myImageView = self.photoImageView.image else 
    { 
     return 
    } 
    guard let cg = myImageView.cgImage else 
    { 
     return 
    } 
    let beginImage = CIImage(cgImage: cg) 
    let context : CIContext = CIContext(options: nil) 
    let inputParams : [String : Any]? = [kCIInputImageKey : beginImage, 
             "inputIntensity" : NSNumber(value : 0.8)] 
    let filter : CIFilter = CIFilter(name: "CISepiaTone", withInputParameters: inputParams)! 
    let outputImage : CIImage? = filter.outputImage! 

    if let outputImage = outputImage 
    { 
     let cgImage : CGImage? = context.createCGImage(outputImage, from: outputImage.extent)! 

     if let cg = cgImage 
     { 
      let newImage : UIImage = UIImage(cgImage: cg) 
      photoImageView.image = newImage 
     } 
    } 
Cuestiones relacionadas