J'ai un UIImage et je veux diminuer la valeur rgb de chaque point, comment puis-je faire cela? ou comment puis-je changer une couleur à une autre couleur dans une image? [Xcode8, swift3]comment changer la valeur rgb d'une image dans iOS?
0
A
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
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)
Merci, mais je termine mon travail avec CIFilter,: Q –