首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >量化图像,保存剩余颜色列表

量化图像,保存剩余颜色列表
EN

Stack Overflow用户
提问于 2011-09-20 01:17:16
回答 2查看 1.3K关注 0票数 2

有没有库可以让我在iPhone上量化图像?

我想量化图像到8种颜色,并记录量化后剩余的每种颜色的十六进制或RGB值。

EN

回答 2

Stack Overflow用户

发布于 2011-09-20 02:24:11

自己做这件事应该不会太难。获取像素数据,然后迭代和量化。下面是如何获取像素数据的方法:

(我相信这段代码来自Erica Sadun的Cookbook示例)

代码语言:javascript
复制
// Courtesy of Apple, Create Bitmap with Alpha/RGB values
CGContextRef CreateARGBBitmapContext (CGImageRef inImage, CGSize size)
{
    CGContextRef    context = NULL;
    CGColorSpaceRef colorSpace;
    void *          bitmapData;
    int             bitmapByteCount;
    int             bitmapBytesPerRow;

    size_t pixelsWide = size.width;
    size_t pixelsHigh = size.height;
    bitmapBytesPerRow   = (pixelsWide * 4);
    bitmapByteCount     = (bitmapBytesPerRow * pixelsHigh);
    colorSpace = CGColorSpaceCreateDeviceRGB();

    if (colorSpace == NULL)
    {
        fprintf(stderr, "Error allocating color space\n");
        return NULL;
    }

    // allocate the bitmap & create context
    bitmapData = malloc( bitmapByteCount );
    if (bitmapData == NULL)
    {
        fprintf (stderr, "Memory not allocated!");
        CGColorSpaceRelease( colorSpace );
        return NULL;
    }

    context = CGBitmapContextCreate (bitmapData, pixelsWide, pixelsHigh, 8,
                                     bitmapBytesPerRow, colorSpace,
                                     kCGImageAlphaPremultipliedFirst);
    if (context == NULL)
    {
        free (bitmapData);
        fprintf (stderr, "Context not created!");
    }

    CGColorSpaceRelease( colorSpace );
    return context;
}

// Return a C-based bitmap of the image data inside an image
unsigned char *RequestImagePixelData(UIImage *inImage)
{
    CGImageRef img = [inImage CGImage];
    CGSize size = [inImage size];

    CGContextRef cgctx = CreateARGBBitmapContext(img, size);
    if (cgctx == NULL) return NULL;

    CGRect rect = {{0,0},{size.width, size.height}};
    CGContextDrawImage(cgctx, rect, img);
    unsigned char *data = CGBitmapContextGetData (cgctx);
    CGContextRelease(cgctx);

    return data;
}

RequestImagePixelData将返回一个数组,其中每个像素被描述为8位alpha、8位红色、8位绿色和8位蓝色。

票数 0
EN

Stack Overflow用户

发布于 2012-04-11 02:22:02

您可以使用ImageMagick来完成此任务:https://github.com/marforic/imagemagick_lib_iphone MagickQuantizeImage和相关函数将为您提供帮助。

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

https://stackoverflow.com/questions/7474732

复制
相关文章

相似问题

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