我需要從另一個UIImage(非灰度)獲取純黑白UIImage。任何人都可以幫助我?獲取黑白UIImage(非灰度)
感謝您的閱讀。
編輯:
這裏所提出的解決方案。謝謝大家。幾乎我知道這不是更好的方式,它可以正常工作。
// Gets an pure black and white image from an original image.
- (UIImage *)pureBlackAndWhiteImage:(UIImage *)image {
unsigned char *dataBitmap = [self bitmapFromImage:image];
for (int i = 0; i < image.size.width * image.size.height * 4; i += 4) {
if ((dataBitmap[i + 1] + dataBitmap[i + 2] + dataBitmap[i + 3]) < (255 * 3/2)) {
dataBitmap[i + 1] = 0;
dataBitmap[i + 2] = 0;
dataBitmap[i + 3] = 0;
} else {
dataBitmap[i + 1] = 255;
dataBitmap[i + 2] = 255;
dataBitmap[i + 3] = 255;
}
}
image = [self imageWithBits:dataBitmap withSize:image.size];
return image;
}
EDITED 1:
響應於評論,這裏是方法bitmapFromImage
和imageWithBits
。
// Retrieves the bits from the context once the image has been drawn.
- (unsigned char *)bitmapFromImage:(UIImage *)image {
// Creates a bitmap from the given image.
CGContextRef contex = CreateARGBBitmapContext(image.size);
if (contex == NULL) {
return NULL;
}
CGRect rect = CGRectMake(0.0f, 0.0f, image.size.width, image.size.height);
CGContextDrawImage(contex, rect, image.CGImage);
unsigned char *data = CGBitmapContextGetData(contex);
CGContextRelease(contex);
return data;
}
// Fills an image with bits.
- (UIImage *)imageWithBits:(unsigned char *)bits withSize:(CGSize)size {
// Creates a color space
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
if (colorSpace == NULL) {
fprintf(stderr, "Error allocating color space\n");
free(bits);
return nil;
}
CGContextRef context = CGBitmapContextCreate (bits, size.width, size.height, 8, size.width * 4, colorSpace, kCGImageAlphaPremultipliedFirst);
if (context == NULL) {
fprintf (stderr, "Error. Context not created\n");
free (bits);
CGColorSpaceRelease(colorSpace);
return nil;
}
CGColorSpaceRelease(colorSpace);
CGImageRef ref = CGBitmapContextCreateImage(context);
free(CGBitmapContextGetData(context));
CGContextRelease(context);
UIImage *img = [UIImage imageWithCGImage:ref];
CFRelease(ref);
return img;
}
我編輯了我的問題,並添加了Brad Larson和您提出的答案。 – 2010-12-10 16:41:56
您可以發佈`bitmapFromImage`和`imageWithBits`方法嗎? – Osi 2013-03-16 12:40:30
在這裏,你有他們@Osi。對不起,延遲。 – 2014-02-24 17:29:02