2012-08-06 43 views
1

我想創建一個黑白圖像,因此它是1bpp。現在,這是我的代碼,基於閾值將圖像轉換爲黑白圖像:iOS中的1bpp UIImage

- (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

我不知道你指的是那些方法,但第二個聲明從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