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

あなたが参照しているこれらの方法が何であるかはわかりませんが、2番目はRGBAデータセットから画像を生成すると主張しているので、なぜ1bppを期待するのですか?

率直に言って、iOSが1bppをサポートできるかどうかはわかりません。答えがノーであると確信できない場合は、おそらく実験する必要があります。

あなたがする必要があるのは、最初に既存のRGBA画像をレンダリングし、ピクセルにアクセスすることです(あなたが行ったように見えます。次に、メモリのチャンクをmallocし、必要に応じて画像を書き込む必要があります-1ピクセルあたり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 に答える