2017-07-30 1 views

Répondre

0

Cette réponse vaut que si vous voulez changer les pixels individuels ..

Première utilisation UIImage.cgImage pour obtenir un CGImage. Ensuite, créez un contexte bitmap en utilisant CGBitmapContextCreate avec l'espace colorimétrique CGColorSpaceCreateDeviceRGB et tous les modes de fusion souhaités.

Ensuite, appelez le CGContextDrawImage pour dessiner l'image dans le contexte qui est soutenu par un tableau de pixels fourni par vous. Nettoyage, et vous avez maintenant un tableau de pixels.

- (uint8_t*)getPixels:(UIImage *)image { 
    CGColorSpaceRef cs= CGColorSpaceCreateDeviceRGB(); 
    uint8_t *pixels= malloc(image.size.width * image.size.height * 4); 
    CGContextRef ctx= CGBitmapContextCreate(rawData, image.size.width, image.size.height, 8, image.size.width * 4, cs, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 
    CGColorSpaceRelease(cs); 

    CGContextDrawImage(ctx, CGRectMake(0, 0, image.size.width, image.size.height)); 
    CGContextRelease(ctx); 
    return pixels; 
} 

Modifier les pixels que vous voulez .. mais ensuite recréer l'image des pixels ..

- (UIImage *)imageFromPixels:(uint8_t *)pixels width:(NSUInteger)width height:(NSUInteger)height { 
    CGDataProviderRef provider = CGDataProviderCreateWithData(nil, pixels, width * height * 4, nil); 

    CGColorSpaceRef cs = CGColorSpaceCreateDeviceRGB(); 
    CGImageRef cgImageRef = CGImageCreate(width, height, 8, 32, width * 4, cs, kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedLast, provider, nil, NO, kCGRenderingIntentDefault); 

    pixels = malloc(width * height * 4); 
    CGContextRef ctx = CGBitmapContextCreate(pixels, width, height, 8, width * 4, cs, kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedLast); 

    CGContextDrawImage(ctx, (CGRect) { .origin.x = 0, .origin.y = 0, .size.width = width, .size.height = height }, cgImage); 
    CGImageRef cgImage = CGBitmapContextCreateImage(ctx); 
    UIImage *image = [UIImage imageWithCGImage:cgImage]; 
    CGImageRelease(cgImage); 
    CGContextRelease(ctx); 
    CGColorSpaceRelease(cs); 
    CGImageRelease(cgImageRef); 
    CGDataProviderRelease(provider); 
    free(pixels); 
    return image; 
} 
+0

Merci, mais je termine mon travail avec CIFilter,: Q –

0

L'une des façons est d'utiliser l'image comme modèle et de définir la couleur que vous voulez.

extension UIImageView { 
func changeImageColor(color:UIColor) -> UIImage 
{ 
    image = image!.withRenderingMode(.alwaysTemplate) 
    tintColor = color 
    return image! 
} 
} 

    //Change color of logo 
    logoImage.image = logoImage.changeImageColor(color: .red)