我想创建一个黑白图像,因此它是1bpp。现在这是我的代码,它根据阈值将图像转换为黑白:
- (UIImage *)pureBlackAndWhiteImage:(UIImage *)image value:(float)value {
unsigned char *dataBitmap = [self convertUIImageToBitmapRGBA8:image];
for (int i = 0; i < image.size.width * image.size.height * 4; i += 4) {
if ((dataBitmap[i + 0] + dataBitmap[i + 1] + dataBitmap[i + 2]) < value) {
dataBitmap[i + 0] = 0;
dataBitmap[i + 1] = 0;
dataBitmap[i + 2] = 0;
} else {
dataBitmap[i + 0] = 255;
dataBitmap[i + 1] = 255;
dataBitmap[i + 2] = 255;
}
}
image = [self convertBitmapRGBA8ToUIImage:dataBitmap withWidth:image.size.width withHeight:image.size.height];
return image;
}
但是这张图片仍然是8bpp。我怎样才能使它成为1bpp?
答案 0 :(得分:0)
我不知道你提到的那些方法是什么,但第二种方法声称从RGBA数据集产生图像,那你为什么期望1bpp?
坦率地说,我不知道iOS是否能支持1bpp。如果您无法确定答案是否定的,那么您可能需要进行实验。您需要做的是首先渲染现有的RGBA图像并访问像素(就像您看到的那样。然后您将需要malloc一块内存并根据需要编写图像 - 每个1位像素。当你有这些数据时,你可以使用:
获得CGImageRefCGImageRef CGImageCreate (
size_t width,
size_t height,
size_t bitsPerComponent,
size_t bitsPerPixel,
size_t bytesPerRow,
CGColorSpaceRef colorspace,
CGBitmapInfo bitmapInfo,
CGDataProviderRef provider,
const CGFloat decode[],
bool shouldInterpolate,
CGColorRenderingIntent intent
);
和UIImage。