调整图像大小后检测公差颜色

时间:2015-03-03 16:15:57

标签: ios uiimage cgimage

我有一个图像,我尝试循环找到像素位置。

因此,如果它是1000px x 1000px的图层,那么我看到这个图像(我只是显示图像的片段,我希望它足以理解):

enter image description here

但是,如果我将我的图像调整为300px x 300px,它看起来像这样(也只显示图像片段):

enter image description here

因此,您可以在缩小尺寸后看到我们有一个额外的像素,不仅仅是紫色和绿色,而是两种颜色之间的渐变。但我编写程序试图找出绿色和紫色的像素位置,所以我只使用2种颜色来找到合适的位置。如果没有调整我的程序大小,可以很好地检测它,但是在调整大小之后是检测适当的颜色位置的问题。

在photoshop中,如果使用例如公差100并取消选中抗锯齿复选标记,则表示效果良好,即使使用渐变也能找到正确的位置。

如何在我的代码中实现容差。所以例如我有绿色,我需要与所有公差颜色进行比较。如果像素100百分比容忍绿色,程序应该假设像素连接到绿色。

我的意思。例如,我有RGB(0,255,0)颜色,我想找到它的所有容忍度。在这种情况下为绿色。

或者例如,如果我有RGB(100,255,50),那么我需要找到它的所有公差颜色。

我想这里应该是我可以设置的范围和颜色来检查容差颜色。

另外,我使用原始数据来循环所有像素。所以我可以得到RGBA:

            float red   = (rawData[byteIndex]     * 1.0) / 255.0;
            float green = (rawData[byteIndex + 1] * 1.0) / 255.0;
            float blue  = (rawData[byteIndex + 2] * 1.0) / 255.0;
            float alpha = (rawData[byteIndex + 3] * 1.0) / 255.0;

因此检测纯色工作完美但我有问题如何识别渐变并决定颜色是连接到绿色还是紫色。

Here is also我之前的问题是如何循环像素。

1 个答案:

答案 0 :(得分:3)

听起来你在调整大小时遇到​​插值问题。如果关闭插值,则不会在图像中获得任何新颜色。

UIGraphicsBeginImageContext(newSize);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetInterpolationQuality(context, kCGInterpolationNone);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();