以编程方式更改图像的颜色

时间:2012-06-01 09:38:55

标签: iphone objective-c ios

我有一个奶油色的图像,我希望能够在运行时给它一个蓝色(例如)颜色,而不会通过使用另一个图像伪造颜色变化。

这种事情在iOS中是否适合? 有人能提供一些指导来实现这种事情吗?

非常感谢, -code

2 个答案:

答案 0 :(得分:3)

也许GPUImage可以解决您的问题:

  

GPUImage框架是一个获得BSD许可的iOS库,可让您将GPU加速滤镜和其他效果应用于图像,实时摄像机视频和电影。与Core Image(iOS 5.0的一部分)相比,GPUImage允许您编写自己的自定义过滤器,支持部署到iOS 4.0,并且具有更简单的界面。但是,它目前缺少核心图像的一些更高级功能,例如面部检测。

答案 1 :(得分:2)

如果您是RGB专家,您可以使用CGImage对图像执行任何操作。您可以浏览每个像素并将creem像素转换为蓝色!

以下仅供参考,不要将其视为答案。

-(UIImage *) getNewImageFromImage:(UIImage *)image {
    const int RED = 1, GREEN = 2, BLUE = 3;

    CGRect imageRect = CGRectMake(0, 0, image.size.width*2, image.size.height*2);

    int width = imageRect.size.width, height = imageRect.size.height;

    uint32_t * pixels = (uint32_t *) malloc(width*height*sizeof(uint32_t));
    memset(pixels, 0, width * height * sizeof(uint32_t));

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, width * sizeof(uint32_t), colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedLast);

    CGContextDrawImage(context, CGRectMake(0, 0, width, height), [image CGImage]);

    for(int y = 0; y < height; y++) {
        for(int x = 0; x < width; x++) {
            uint8_t * rgbaPixel = (uint8_t *) &pixels[y*width+x];
            rgbaPixel[RED] = <DO_SOMETHING>;
            rgbaPixel[GREEN] = <DO_SOMETHING>;
            rgbaPixel[BLUE] = <DO_SOMETHING>;
        }
    }

    CGImageRef newImage = CGBitmapContextCreateImage(context);

    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);
    free(pixels);

    UIImage * resultUIImage = [UIImage imageWithCGImage:newImage];
    CGImageRelease(newImage);

    return resultUIImage;
}