在iOS中使用1bpp UIImage

时间:2012-08-06 21:35:54

标签: ios

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

1 个答案:

答案 0 :(得分:0)

我不知道你提到的那些方法是什么,但第二种方法声称从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。