2013-07-08 3 views
0

Я хочу применить отрицательное значение RGB к изображению.Отрицательный цвет значения применяется к изображению

R: -8 
G: -89 
B: -76 

Я знаю, что значение RGB в диапазоне от 0 до 255, но я хочу, чтобы применить минус значение и офсетным что-то подобное, но не знают, как это сделать.

Я использую следующую ссылку для справки.

http://blog.swishzone.com/?p=9606

Я использую

red value = (original red value * redMultiplier) + redOffset 
green value = (original green value * greenMultiplier) + greenOffset 
blue value = (original blue value * blueMultiplier) + blueOffset 

Но это не работает, как я хочу.

+0

не являющиеся положительные значения не будут работать – vladkras

+0

Да я знаю, но, основываясь на ссылку, которую я в прошлом на размещаю свой выбор между ними -255 до 255, что я не знаю, как использовать. –

+0

yep, но кажется, что этот парень делает число в диапазоне от 0 до 255, прежде чем использовать – vladkras

ответ

0

Нашел одно решение для изменения цвета изображения с использованием отрицательных значений RGB. Ниже приведен метод, не затрагивающий альфа изображения.

-(void)ColorChangeProcessing :(int)redvalue greenValue:(int)greenvalue blueValue:(int)bluevalue imageUsed : (UIImageView *)image 
{ 

    CGContextRef ctx; 
    CGImageRef imageRef = [image.image CGImage]; 
    NSUInteger width = CGImageGetWidth(imageRef); 
    NSUInteger height = CGImageGetHeight(imageRef); 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    unsigned char *rawData = malloc(height * width * 4); 
    NSUInteger bytesPerPixel = 4; 
    NSUInteger bytesPerRow = bytesPerPixel * width; 
    NSUInteger bitsPerComponent = 8; 
    CGContextRef context = CGBitmapContextCreate(rawData, width, height, 
               bitsPerComponent, bytesPerRow, colorSpace, 
               kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 
    CGColorSpaceRelease(colorSpace); 

    CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef); 
    CGContextRelease(context); 

    int byteIndex = (bytesPerRow * 0) + 0 * bytesPerPixel,RED = redvalue,GREEN=greenvalue,BLUE = bluevalue; 


    for (int ii = 0 ; ii < width * height ; ++ii) 
    { 
     if(rawData[byteIndex+3] != 0 && (rawData[byteIndex] != '/0' || rawData[byteIndex+1] != '/0' || rawData[byteIndex+2] != '/0' )) 
     { 


      if ((((rawData[byteIndex])+RED)) > 255) 
      { 
       rawData[byteIndex] = (char)255; 
      } 
      else if((((rawData[byteIndex])+RED)) >0) 
      { 
       rawData[byteIndex] = (char) (((rawData[byteIndex] * 1.0) + RED)); 
      } 
      else 
      { 
       rawData[byteIndex] = (char)0; 
      } 


      if ((((rawData[byteIndex+1])+GREEN)) > 255) 
      { 
       rawData[byteIndex+1] = (char)255; 
      } 
      else if((((rawData[byteIndex+1])+GREEN))>0) 
      { 
       rawData[byteIndex+1] = (char) (((rawData[byteIndex+1] * 1.0) + GREEN)); 


      } 
      else 
      { 
       rawData[byteIndex+1] = (char)0; 
      } 



      if ((((rawData[byteIndex+2])+BLUE)) > 255) 
      { 
       rawData[byteIndex+2] = (char)255; 
      } 
      else if((((rawData[byteIndex+2])+BLUE))>0) 
      { 
       rawData[byteIndex+2] = (char) (((rawData[byteIndex+2] * 1.0) + BLUE)); 


      } 
      else 
      { 
       rawData[byteIndex+2] = (char)0; 
      } 
     } 
     byteIndex += 4; 
    } 

    ctx = CGBitmapContextCreate(rawData, 
           CGImageGetWidth(imageRef), 
           CGImageGetHeight(imageRef), 
           8, 
           CGImageGetBytesPerRow(imageRef), 
           CGImageGetColorSpace(imageRef), 
           kCGImageAlphaPremultipliedLast); 

    CGImageRef NewimageRef = CGBitmapContextCreateImage (ctx); 
    UIImage* rawImage = [UIImage imageWithCGImage:NewimageRef]; 



    tempViewForProcessingColors = [[UIImageView alloc] init]; 
    tempViewForProcessingColors = [[arrayWithDictionary objectAtIndex:ImageCount]valueForKey:@"imageView"]; 

// NSLog(@"Name: %@ --- Red: %d --- Green: %d --- Blue: %d",tempViewForProcessingColors.accessibilityLabel,RED,GREEN,BLUE); 
    tempViewForProcessingColors.image = rawImage; 
    //ImageCount++; 
    CGContextRelease(ctx); 
    free(rawData); 
    CGImageRelease(NewimageRef); 

}