2013-07-08 2 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

그래,하지만이 남자가 – 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); 

} 
관련 문제