我有一个“房间”图像。

现在,用户将单击任何特定的颜色(假设图像中为蓝色)。

并且用户还将选择替换的颜色,例如“黑色”颜色。

因此,图像内的所有“蓝色”颜色将被“黑色”颜色替换。

有人知道如何在iPhone中实现这一点吗?

感谢您的帮助。

最佳答案

  • 您必须遍历图像中的每个像素并获取其rgb
  • 检查其rgb值是否与fromColor rgb值匹配(如果是)
    将像素值更改为您的toColor rgb值。如果没有,请离开
    该像素,然后转到下一个像素。.

  • 从内存中写了一个函数..可能的错误..纠正自己
    -(UIImage*)changeColor:(UIImage*)myImage fromColor:(UIColor*)fromColor toColor:(UIColor*)toColor{
        CGImageRef originalImage    = [myImage CGImage];
        CGColorSpaceRef colorSpace  = CGColorSpaceCreateDeviceRGB();
        CGContextRef bitmapContext  =
    CGBitmapContextCreate(NULL,CGImageGetWidth(originalImage),CGImageGetHeight(originalImage),
     8,CGImageGetWidth(originalImage)*4,colorSpace,kCGImageAlphaPremultipliedLast);
        CGColorSpaceRelease(colorSpace);
        CGContextDrawImage(bitmapContext, CGRectMake(0, 0,
    CGBitmapContextGetWidth(bitmapContext),CGBitmapContextGetHeight(bitmapContext)),
    originalImage);
        UInt8 *data          = CGBitmapContextGetData(bitmapContext);
        int numComponents    = 4;
        int bytesInContext   = CGBitmapContextGetHeight(bitmapContext) *
        CGBitmapContextGetBytesPerRow(bitmapContext);
        double redIn, greenIn, blueIn,alphaIn;
        CGFloat fromRed,fromGreen,fromBlue,fromAlpha;
        CGFloat toRed,toGreen,toBlue,toAlpha;
    
        //Get RGB values of fromColor
        int fromCountComponents = CGColorGetNumberOfComponents([fromColor CGColor]);
        if (fromCountComponents == 4) {
         const CGFloat *_components = CGColorGetComponents([fromColor CGColor]);
         fromRed = _components[0];
         fromGreen = _components[1];
         fromBlue = _components[2];
         fromAlpha = _components[3];
        }
    
    
        //Get RGB values for toColor
        int toCountComponents = CGColorGetNumberOfComponents([toColor CGColor]);
        if (toCountComponents == 4) {
          const CGFloat *_components = CGColorGetComponents([toColor CGColor]);
          toRed   = _components[0];
          toGreen = _components[1];
          toBlue  = _components[2];
          toAlpha = _components[3];
        }
    
    
        //Now iterate through each pixel in the image..
        for (int i = 0; i < bytesInContext; i += numComponents) {
            //rgba value of current pixel..
            redIn    =   (double)data[i]/255.0;
            greenIn  =   (double)data[i+1]/255.0;
            blueIn   =   (double)data[i+2]/255.0;
            alphaIn  =   (double)data[i+3]/255.0;
    
            //now you got current pixel rgb values...check it curresponds with your fromColor
            if( redIn == fromRed && greenIn == fromGreen && blueIn == fromBlue ){
                //image color matches fromColor, then change current pixel color to toColor
                data[i]    =   toRed;
                data[i+1]  =   toGreen;
                data[i+2]  =   toBlue;
                data[i+3]  = toAlpha;
            }
        }
        CGImageRef outImage =   CGBitmapContextCreateImage(bitmapContext);
        myImage             =   [UIImage imageWithCGImage:outImage];
        CGImageRelease(outImage);
        return myImage;
    }
    

    我希望您不要每次都调用此函数...这会增加处理器的负担。如果我是您的处理器,我不会对您感到满意.. :)

    10-08 05:29
    查看更多