Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 量化图像,保存剩余颜色列表_Iphone_Ios_Image Processing_Core Graphics - Fatal编程技术网

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

Iphone 量化图像,保存剩余颜色列表,iphone,ios,image-processing,core-graphics,Iphone,Ios,Image Processing,Core Graphics,有没有一个库可以让我在iPhone上量化图像 我想将图像量化到8种颜色,并为量化后剩余的每种颜色记录十六进制或rgb值。自己这样做应该不会太难。获取像素数据,然后迭代并量化。以下是如何获取像素数据: (我相信这段代码来自埃里卡·萨顿的食谱样本) RequestImagePixelData将返回一个数组,其中每个像素被描述为8位alpha、8位红色、8位绿色和8位蓝色。您自己应该不难做到这一点。获取像素数据,然后迭代并量化。以下是如何获取像素数据: (我相信这段代码来自埃里卡·萨顿的食谱样本) R

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


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

自己这样做应该不会太难。获取像素数据,然后迭代并量化。以下是如何获取像素数据:

(我相信这段代码来自埃里卡·萨顿的食谱样本)


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

您自己应该不难做到这一点。获取像素数据,然后迭代并量化。以下是如何获取像素数据:

(我相信这段代码来自埃里卡·萨顿的食谱样本)


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

您可以使用ImageMagick执行此任务:
MagickQuantizeImage和相关功能将对您有所帮助。

您可以使用ImageMagick执行此任务: MagickQuantizeImage和相关函数将对您有所帮助。

另一个问题引用了此答案,并对进行差异和调色板选择有一些想法。另一个问题引用了此答案,并对进行差异和调色板选择有一些想法。
// 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;
}