2012-06-26 3 views
0

나는 UIImagePickerController 클래스를 사용하고 있습니다. 나는 버튼을 가지고 있는데, 그 버튼을 클릭하면, 나는 이미지를 밝게하고 싶다. 온라인으로 검색했지만 검색시 찾은 코드가 작동하지 않습니다. 여기 uiimagepickercontroller에서 캡처 한 uiimage로 밝기를 설정하는 방법

제가 발견 사용한 코드 :

- (UIImage *) brightness:(UIImage *)image 
{ 


int level= 200;//put here an int value that go from -255 to 255; 



CGImageRef inImage = image.CGImage; //Input image cgi 

CGContextRef ctx; 


CFDataRef m_DataRef; 
m_DataRef = CGDataProviderCopyData(CGImageGetDataProvider(inImage)); 
UInt8 * m_PixelBuf = (UInt8 *) CFDataGetBytePtr(m_DataRef); 

int length = CFDataGetLength(m_DataRef); 
CGImageGetBitsPerComponent(inImage), CGImageGetBitsPerPixel(inImage),CGImageGetBytesPerRow(inImage); 


for (int index = 0; index < length; index += 4) 
{ 
    Byte tempR = m_PixelBuf[index + 1]; 
    Byte tempG = m_PixelBuf[index + 2]; 
    Byte tempB = m_PixelBuf[index + 3]; 

    int outputRed = level + tempR; 
    int outputGreen = level + tempG; 
    int outputBlue = level + tempB; 

    if (outputRed>255) outputRed=255; 
    if (outputGreen>255) outputGreen=255; 
    if (outputBlue>255) outputBlue=255; 

    if (outputRed<0) outputRed=0; 
    if (outputGreen<0) outputGreen=0; 
    if (outputBlue<0) outputBlue=0; 


    m_PixelBuf[index + 1] = outputRed; 
    m_PixelBuf[index + 2] = outputGreen; 
    m_PixelBuf[index + 3] = outputBlue; 

} 



ctx = CGBitmapContextCreate(m_PixelBuf, 
          CGImageGetWidth(inImage), 
          CGImageGetHeight(inImage), 
          8, 
          CGImageGetBytesPerRow(inImage), 
          CGImageGetColorSpace(inImage), 
          kCGImageAlphaPremultipliedFirst); 


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

CGContextRelease(ctx); 


CGImageRelease(imageRef); 

CFRelease(m_DataRef); 



return rawImage; 

} 

이미지는 원본 이미지의 밝기에 여전히, 그 변화되지 않는다.

답변

2

일반적으로 아이디어는 좋아 보이지만 픽셀 데이터를 업데이트하는 데 오류가있을 수 있습니다. 하지만 대신에 소프트 처리의있는 CoreGraphics를 사용하는 것이 좋습니다 밝기 변경 :

CGFloat brightness = 0.5; 

UIGraphicsBeginImageContext(image.size); 
CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height); 
CGContextRef context = UIGraphicsGetCurrentContext(); 

// Original image 
[image drawInRect:imageRect]; 

// Brightness overlay 
CGContextSetFillColorWithColor(context, [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:brightness].CGColor); 
CGContextAddRect(context, imageRect); 
CGContextFillPath(context); 

UIImage* resultImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

을 당신은 적절한 결과를 얻기 위해 밝기 오버레이 색상을 변경할 수 있습니다.

+0

이 방법으로 수행해야 할 작업을 알려주십시오. [self drawInRect : imageRect]; –

+0

코드를'[image drawInRect : imageRect];'로 변경했습니다. 그것은 작동하지 않아야합니다. – onegray

관련 문제