1

我想创建一个黑白图像,所以它是 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?

4

1 回答 1

1

我不知道您指的是什么方法,但是第二种方法确实声称可以从 RGBA 数据集生成图像,那么您为什么期望 1bpp?

坦率地说,我不知道 iOS 是否甚至可以支持 1bpp。如果您不能确定答案是否定的,您可能需要进行试验。

您需要做的是首先渲染现有的 RGBA 图像并访问像素(看起来您已经完成了。然后您需要 malloc 一块内存并根据需要写入图像 - 每个像素 1 位。当你有这些数据,你可以使用以下方法获取 CGImageRef:

CGImageRef 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 。

于 2012-08-06T23:15:43.670 回答