直接方法:彩色图像转换为黑白图像
-
(UIImage *)convertToBlackAndWhite:(UIImage *)originalImage {
// 创建灰度色彩空间
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
// 创建位图上下文
CGContextRef context = CGBitmapContextCreate(nil, originalImage.size.width, originalImage.size.height, 8, 0, colorSpace, kCGImageAlphaNone);
CGColorSpaceRelease(colorSpace);if (context == NULL) {
return nil;
}// 绘制原始图像到位图上下文
CGRect imageRect = CGRectMake(0, 0, originalImage.size.width, originalImage.size.height);
CGContextDrawImage(context, imageRect, [originalImage CGImage]);// 从位图上下文中获取像素数据
unsigned char *bitmapData = CGBitmapContextGetData(context);
if (bitmapData == NULL) {
CGContextRelease(context);
return nil;
}// 迭代每个像素并转换为黑白
for (int y = 0; y < originalImage.size.height; y++) {
for (int x = 0; x < originalImage.size.width; x++) {
unsigned char pixel = bitmapData[y*(int)originalImage.size.width + x];
// 根据像素值将其转换为黑白
unsigned char newValue = pixel > 127 ? 255 : 0;
bitmapData[y*(int)originalImage.size.width + x] = newValue;
}
}// 创建黑白图像
CGImageRef convertedImageRef = CGBitmapContextCreateImage(context);
UIImage *convertedImage = [UIImage imageWithCGImage:convertedImageRef];// 释放资源
CGImageRelease(convertedImageRef);
CGContextRelease(context);return convertedImage;
}