如何在ios上正确创建没有alpha通道的灰度位图

时间:2017-01-21 17:09:52

标签: ios objective-c uiimage core-graphics

我正在尝试创建一个简单的UIImage,8x1,灰色色彩空间,没有alpha通道。我的代码:

- (UIImage *)createImage {
    size_t w = 8;
    size_t h = 1;

    size_t size = w * h;
    uint8_t * buf = calloc(size, sizeof(uint8_t));

    for(int x = 0; x < size; x++) {
        buf[x] = (uint8_t) (x * 32);
    }

    CGColorSpaceRef space = CGColorSpaceCreateDeviceGray();
    CGContextRef context = CGBitmapContextCreate(buf, w, h, 8, w * sizeof(uint8_t), space, kCGBitmapByteOrderDefault | kCGImageAlphaNone);
    CGImageRef img = CGBitmapContextCreateImage(context);

    CGContextRelease(context);
    CGColorSpaceRelease(space);
    UIImage * ret = [UIImage imageWithCGImage: img];
    CGImageRelease(img);

    free(buf);

    return ret;
}

当我显示此图像时,它看起来像这样:

result

无论图像的大小如何,第(N-4)像素的颜色都被复制到像素N-3,N-2和N-1。 (最后一个应该是白色的)

当我添加alpha通道(每像素16位)或使用RGB或索引颜色模型时,没问题,但是使用此位图设置,我无法设置最后3个像素的颜色。有些幽灵正在弄乱我的像素。有任何想法吗? :)

0 个答案:

没有答案