MY-Code: Wie RGB-Wert für verschiedene Schattierungen von Gesicht zu verwalten, und wie Sie anwenden? dieser code wird die farbe des gesichts mit haare ändern, aber ich möchte 1.nicht gesicht gefärbt werden ausschließlich haare.Wie ändere ich die Hautfarbe von Gesicht aus dem Quellbild in ios?
-(void)changeSkinColorValue:(float)value WithImage:(UIImage*)needToModified
{
CGContextRef ctx;
CGImageRef imageRef = needToModified.CGImage;
NSUInteger width = CGImageGetWidth(imageRef);
NSUInteger height = CGImageGetHeight(imageRef);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
//unsigned char *rawData = malloc(firstImageV.image.size.height * firstImageV.image.size.width * 10);
CFMutableDataRef m_DataRef = CFDataCreateMutableCopy(0, 0,CGDataProviderCopyData(CGImageGetDataProvider(firstImageV.image.CGImage)));
UInt8 *rawData = (UInt8 *) CFDataGetMutableBytePtr(m_DataRef);
int length = CFDataGetLength(m_DataRef);
NSUInteger bytesPerPixel = 4;
NSUInteger bytesPerRow = bytesPerPixel * firstImageV.image.size.width;
NSUInteger bitsPerComponent = 8;
CGContextRef context1 = CGBitmapContextCreate(rawData, firstImageV.image.size.width, firstImageV.image.size.height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(context1, CGRectMake(0, 0, firstImageV.image.size.width, firstImageV.image.size.height), imageRef);
NSLog(@"%d::%d",width,height);
// for(int ii = 0 ; ii < 250 ; ii+=4)
//{
for(int ii = 0 ; ii < length ; ii+=4)
{
//NSLog(@"Raw data %s",rawData);
int R = rawData[ii];
int G = rawData[ii+1];
int B = rawData[ii+2];
// NSLog(@"%d %d %d", R, G, B);
//if(((R>60)&&(R<237)) || ((G>10)&&(G<120))||((B>4) && (B<120)))
// if(((R>100)&&(R<186)) || ((G>56)&&(G<130))||((B>30) && (B<120)))
// if(((R>188)&&(R<228)) || ((G>123)&&(G<163))||((B>85) && (B<125)))
// if(((R>95)&&(R<260)) || ((G>40)&&(G<210))||((B>20) && (B<170)))
//new code......
if(((R>0)&&(R<260)) || ((G>0)&&(G<210))||((B>0) && (B<170)))
{
rawData[ii+1]=R;//13;
rawData[ii+2]=G;//43;
rawData[ii+3]=value;//63
}
}
ctx = CGBitmapContextCreate(rawData,
CGImageGetWidth(imageRef),
CGImageGetHeight(imageRef),
8,
CGImageGetBytesPerRow(imageRef),
CGImageGetColorSpace(imageRef),
kCGImageAlphaPremultipliedLast);
imageRef = CGBitmapContextCreateImage(ctx);
UIImage* rawImage = [UIImage imageWithCGImage:imageRef];
//UIImageView *ty=[[UIImageView alloc]initWithFrame:CGRectMake(100, 200, 400, 400)];
//ty.image=rawImage;
//[self.view addSubview:ty];
[secondImageV setImage:rawImage];
CGContextRelease(context1);
CGContextRelease(ctx);
free(rawData);
}
Dieser Code ändert nicht nur Gesicht und Haare, sondern das ganze Bild, oder? –
@SAMIR RATHOD können Sie mir in der gleichen Frage der Bildgesichtsfarbänderung helfen? http://stackoverflow.com/questions/37113740/change-face-color-from-main-color-in-xcode?noredirect=1#comment61769372_37113740 –