我有一个奶油色的图像,我希望能够动态地给它一个蓝色(例如)颜色,而不会通过使用另一个图像来伪造颜色变化。
iOS中是否适合这种事情?任何人都能够提供一些实现这种事情的指针吗?
非常感谢,-代码
我有一个奶油色的图像,我希望能够动态地给它一个蓝色(例如)颜色,而不会通过使用另一个图像来伪造颜色变化。
iOS中是否适合这种事情?任何人都能够提供一些实现这种事情的指针吗?
非常感谢,-代码
也许GPUImage可以解决您的问题:
GPUImage 框架是一个 BSD 许可的 iOS 库,可让您将 GPU 加速的滤镜和其他效果应用于图像、实时摄像机视频和电影。与 Core Image(iOS 5.0 的一部分)相比,GPUImage 允许您编写自己的自定义过滤器,支持部署到 iOS 4.0,并具有更简单的界面。但是,它目前缺少 Core Image 的一些更高级的功能,例如面部检测。
如果你是 RGB 专家,你可以使用 CGImage 对图像做任何事情。您可以遍历每个像素并将奶油像素转换为蓝色!
以下仅供参考,请勿将其视为答案。
-(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;
}