OC 修改图片亮度

留下日后学习

	
	- (UIImage*) applyFilter:(FilterCallback)filter context:(void*)context
	{
    CGImageRef inImage = self.CGImage;
 
    size_t width = CGImageGetWidth(inImage);
    size_t height = CGImageGetHeight(inImage);
    size_t bits = CGImageGetBitsPerComponent(inImage);
    size_t bitsPerRow = CGImageGetBytesPerRow(inImage);
    CGColorSpaceRef colorSpace = CGImageGetColorSpace(inImage);
    int alphaInfo = CGImageGetAlphaInfo(inImage);
 
    if (alphaInfo != kCGImageAlphaPremultipliedLast &&
        alphaInfo != kCGImageAlphaNoneSkipLast) {
        if (alphaInfo == kCGImageAlphaNone ||
            alphaInfo == kCGImageAlphaNoneSkipFirst) {
            alphaInfo = kCGImageAlphaNoneSkipLast;
        }else {
            alphaInfo = kCGImageAlphaPremultipliedLast;
        }
        CGContextRef context = CGBitmapContextCreate(NULL,
                                                     width,
                                                     height,
                                                     bits,
                                                     bitsPerRow,
                                                     colorSpace,
                                                     alphaInfo);
        CGContextDrawImage(context, CGRectMake(0, 0, width, height), inImage);
        inImage = CGBitmapContextCreateImage(context);
        CGContextRelease(context);
    }else {
        CGImageRetain(inImage);
    }
 
    CFDataRef m_DataRef = CGDataProviderCopyData(CGImageGetDataProvider(inImage));
    int length = CFDataGetLength(m_DataRef);
    CFMutableDataRef m_DataRefEdit = CFDataCreateMutableCopy(NULL,length,m_DataRef);
    CFRelease(m_DataRef);
    UInt8 * m_PixelBuf = (UInt8 *) CFDataGetMutableBytePtr(m_DataRefEdit);
 
    for (int i=0; i<length; i+=4)
    {
        filter(m_PixelBuf,i,context);
    }
    CGImageRelease(inImage);
 
    CGContextRef ctx = CGBitmapContextCreate(m_PixelBuf,
                                             width,
                                             height,
                                             bits,
                                             bitsPerRow,
                                             colorSpace,
                                             alphaInfo
                                             );
 
    CGImageRef imageRef = CGBitmapContextCreateImage(ctx);
    CGContextRelease(ctx);
    UIImage *finalImage = [UIImage imageWithCGImage:imageRef
                                              scale:self.scale
                                        orientation:self.imageOrientation];
    CGImageRelease(imageRef);
    CFRelease(m_DataRefEdit);
    return finalImage;
 
	}
 
	void filterBrightness(UInt8 *pixelBuf, UInt32 offset, void *context)
	{
    double t = *((double*)context);
 
    int r = offset;
    int g = offset+1;
    int b = offset+2;
 
    int red = pixelBuf[r];
    int green = pixelBuf[g];
    int blue = pixelBuf[b];
 
    pixelBuf[r] = SAFECOLOR(red*t);
    pixelBuf[g] = SAFECOLOR(green*t);
    pixelBuf[b] = SAFECOLOR(blue*t);
	}
	- (UIImage*)brightness:(double)value
	{
    return [self applyFilter:filterBrightness context:&value];
	}

iOSObjective-C

201 字

2015-04-07 18:08 +0900

2015-04-07 18:08 +0900

comments powered by Disqus