gpt4 book ai didi

iphone - 在 UIImage (或其衍生物)中,如何用一种颜色替换另一种颜色?

转载 作者:行者123 更新时间:2023-12-03 20:22:42 26 4
gpt4 key购买 nike

例如,我有一个 UIImage(如果需要,我可以从中获取 CGImage、CGLayer 等),并且我想将所有红色像素 (1, 0, 0) 替换为蓝色 (0, 0, 1)。

我有代码可以确定哪些像素是目标颜色(请参阅 this SO question & answer ),并且我可以替换 rawData 中的适当值,但是(a)我不确定如何从 rawData 缓冲区中获取 UIImage (b) 看来我可能缺少一个内置程序,它可以自动为我完成所有这些工作,从而节省我大量的悲伤。

谢谢!

最佳答案

好的,所以我们将 UIImage 放入 rawBits 缓冲区中(请参阅原始问题中的链接),然后根据自己的喜好调整缓冲区中的数据(即将所有红色分量(每第 4 个字节)设置为 0,作为测试),现在需要获取一个新的 UIImage 来表示旋转的数据。

我在 Erica Sudan's iPhone Cookbook 中找到了答案,第 7 章(图像),示例 12(位图)。相关调用为CGBitmapContextCreate(),相关代码为:

+ (UIImage *) imageWithBits: (unsigned char *) bits withSize: (CGSize)  
size
{
// Create a color space
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
if (colorSpace == NULL)
{
fprintf(stderr, "Error allocating color space\n");
free(bits);
return nil;
}

CGContextRef context = CGBitmapContextCreate (bits, size.width,
size.height, 8, size.width * 4, colorSpace,
kCGImageAlphaPremultipliedFirst);
if (context == NULL)
{
fprintf (stderr, "Error: Context not created!");
free (bits);
CGColorSpaceRelease(colorSpace );
return nil;
}

CGColorSpaceRelease(colorSpace );
CGImageRef ref = CGBitmapContextCreateImage(context);
free(CGBitmapContextGetData(context));
CGContextRelease(context);

UIImage *img = [UIImage imageWithCGImage:ref];
CFRelease(ref);
return img;
}

希望这对 future 的洞穴探险者有用!

关于iphone - 在 UIImage (或其衍生物)中,如何用一种颜色替换另一种颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1263119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com