0

UIImagePickerControllerクラスを使用しています。ボタンがあります。そのボタンをクリックすると、画像が明るくなります。オンラインで検索しましたが、検索で見つけたコードが機能していません。

これが私が見つけて使用したコードです:

- (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; 

}

画像は元の画像の明るさのままで、変化していません。

4

1 に答える 1

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();

明るさオーバーレイの色を変更して、適切な結果を得ることができます。

于 2012-06-26T13:50:32.183 に答える