How change the white skin face to dark skin face in iOS?

笑着哭i 提交于 2019-12-12 01:32:45

问题


I need to change the white skin face to dark skin face... For example American white face to African face(i.e color tone)...

I pick the color value of the pixel by digital color meter it gives the RGB value[red=101,green=63 and blue=43] for dark skin and for white skin it gives the RGB value as [red=253,green=210 and blue=176]...

Then i am setting that value in my code it gives the false result...

Here is my code...

   -(UIImage*)customBlackFilterOriginal
{
    CGImageRef imgSource=self.duplicateImage.image.CGImage;
    CFDataRef m_DataRef1 = CGDataProviderCopyData(CGImageGetDataProvider(imgSource)); 
    UInt8 *dataOriginal=(UInt8 *)CFDataGetBytePtr(m_DataRef1);
    double lengthSource=CFDataGetLength(m_DataRef1);
    NSLog(@"length::%f",lengthSource);
    int redPixel;
    int greenPixel;
    int bluePixel;

    for(int index=0;index<lengthSource;index+=4)
    {

        dataOriginal[index]=dataOriginal[index];
        dataOriginal[index+1]= 101;
        dataOriginal[index+2]= 63;
        dataOriginal[index+3]=43;      

    } 

    NSUInteger width =CGImageGetWidth(imgSource);
    size_t height=CGImageGetHeight(imgSource);
    size_t bitsPerComponent=CGImageGetBitsPerComponent(imgSource);
    size_t bitsPerPixel=CGImageGetBitsPerPixel(imgSource);
    size_t bytesPerRow=CGImageGetBytesPerRow(imgSource);

    NSLog(@"the w:%u H:%lu",width,height);

    CGColorSpaceRef colorspace=CGImageGetColorSpace(imgSource);
    CGBitmapInfo bitmapInfo=CGImageGetBitmapInfo(imgSource);
    CFDataRef newData=CFDataCreate(NULL,dataOriginal,lengthSource);
    CGDataProviderRef provider=CGDataProviderCreateWithCFData(newData);
    CGImageRef newImg=CGImageCreate(width,height,bitsPerComponent,bitsPerPixel,bytesPerRow,colorspace,bitmapInfo,provider,NULL,true,kCGRenderingIntentDefault);

    return [UIImage imageWithCGImage:newImg];

}

please share any idea about the above color changing.... what mistake i did in the code?..


回答1:


I am not an IPhone programmer so I can't test anything but some things are odd in your code:

Pixel size When reading your data, you seem to assume you have a 32bits ARGB picture, did you validate it's the case?

CFDataGetBytePtr According to the docs, it Returns a read-only pointer to the bytes of a CFData object., are you sure you're not looking for CFDataGetBytes which Copies the byte contents of a CFData object to an external buffer. In which case you'll have to allocate your buffer to contain width * height * bpp. Once you have this copy, you can manipulate it anyway you want to create the new picture.

Pixel Selection According to your question, I seem to understand that you want to change skin color from White to Black. Your current code iterates over every pixel to change its color. You should evaluate the "distance" between the pixel color and what you're looking for, and if it's below a certain threshold process it. It might be easier to perform the operation in HSV than by dealing with RGB colors.



来源:https://stackoverflow.com/questions/11478833/how-change-the-white-skin-face-to-dark-skin-face-in-ios

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!