首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将UIImage转换为8位

将UIImage转换为8位
EN

Stack Overflow用户
提问于 2013-06-22 05:14:41
回答 1查看 2.8K关注 0票数 2

我希望将UIImage转换为8位。我尝试过这样做,但我不确定我是否做对了,因为稍后当我尝试使用图像处理库轻子卡时,我会收到一条消息,该库声明它不是8位。有人能告诉我,我是否做得对,或如何做它的代码?

谢谢!

代码语言:javascript
复制
 CGImageRef myCGImage = image.CGImage;
 CFDataRef data = CGDataProviderCopyData(CGImageGetDataProvider(myCGImage));
 const UInt8 *imageData = CFDataGetBytePtr(data);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-22 06:25:59

下面的代码将适用于没有alpha通道的图像:

代码语言:javascript
复制
    CGImageRef c = [[UIImage imageNamed:@"100_3077"] CGImage];

    size_t bitsPerPixel = CGImageGetBitsPerPixel(c);
    size_t bitsPerComponent = CGImageGetBitsPerComponent(c);
    size_t width = CGImageGetWidth(c);
    size_t height = CGImageGetHeight(c);

    CGImageAlphaInfo a = CGImageGetAlphaInfo(c);

    NSAssert(bitsPerPixel == 32 && bitsPerComponent == 8 && a == kCGImageAlphaNoneSkipLast, @"unsupported image type supplied");

    CGContextRef targetImage = CGBitmapContextCreate(NULL, width, height, 8, 1 * CGImageGetWidth(c), CGColorSpaceCreateDeviceGray(), kCGImageAlphaNone);

    UInt32 *sourceData = (UInt32*)[((__bridge_transfer NSData*) CGDataProviderCopyData(CGImageGetDataProvider(c))) bytes];
    UInt32 *sourceDataPtr;

    UInt8 *targetData = CGBitmapContextGetData(targetImage);

    UInt8 r,g,b;
    uint offset;
    for (uint y = 0; y < height; y++)
    {
        for (uint x = 0; x < width; x++)
        {
            offset = y * width + x;

            if (offset+2 < width * height)
            {
                sourceDataPtr = &sourceData[y * width + x];

                r = sourceDataPtr[0+0];
                g = sourceDataPtr[0+1];
                b = sourceDataPtr[0+2];

                targetData[y * width + x] = (r+g+b) / 3;
            }
        }
    }

    CGImageRef newImageRef = CGBitmapContextCreateImage(targetImage);
    UIImage *newImage = [UIImage imageWithCGImage:newImageRef];

    CGContextRelease(targetImage);
    CGImageRelease(newImageRef);

使用此代码,我将rgb图像转换为灰度图像:

希望这能有所帮助

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17247542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档