今天突然有个老同学(美女)让我帮她修改一下照片底色,蓝底变白底,然后下了一个美图秀秀修改了半天还是不理想,于是觉得自己写一个demo来修改照片底色。
- (void)drawImage
{
CGImageRef cgimage = [self.imageView.image CGImage];
size_t width = CGImageGetWidth(cgimage); // 图片宽度
size_t height = CGImageGetHeight(cgimage); // 图片高度
unsigned char *data = calloc(width * height * 4, sizeof(unsigned char)); // 取图片首地址
size_t bitsPerComponent = 8; // r g b a 每个component bits数目
size_t bytesPerRow = width * 4; // 一张图片每行字节数目 (每个像素点包含r g b a 四个字节)
CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB(); // 创建rgb颜色空间
CGContextRef context =
CGBitmapContextCreate(data,
width,
height,
bitsPerComponent,
bytesPerRow,
space,
kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), cgimage);
for (size_t i = 10; i < height; i++)
{
for (size_t j = 10; j < width; j++)
{
size_t pixelIndex = i * width * 4 + j * 4;
unsigned char red = data[pixelIndex];
unsigned char green = data[pixelIndex + 1];
unsigned char blue = data[pixelIndex + 2];
//过滤代码
if ((red < 0x2f && red> 0x07) && (green < 0xa0 && green> 0x84) && (blue < 0xbf && blue> 0xa8)) {
//设置成白色
data[pixelIndex] = 255;
data[pixelIndex + 1] = 255;
data[pixelIndex + 2] = 255;
}
}
}
cgimage = CGBitmapContextCreateImage(context);
self.imageView.image = [UIImage imageWithCGImage:cgimage];
}
屏幕快照 2017-07-26 下午8.05.38.png
屏幕快照 2017-07-26 下午8.05.50.png
处理的效果一般,有些像素点没能过滤掉。
网友评论