如何把CGImageRef转换为CGContextRef

-(CGContextRef) CreateARGBBitmapContext :(CGImageRef) inImage
{
    CGContextRef    context = NULL;
    void *          bitmapData;
    int             bitmapByteCount;
    int             bitmapBytesPerRow;
	
		// Get image width, height. We'll use the entire image.
    size_t pixelsWide = CGImageGetWidth(inImage);
    size_t pixelsHigh = CGImageGetHeight(inImage);
	
		// Declare the number of bytes per row. Each pixel in the bitmap in this
		// example is represented by 4 bytes; 8 bits each of red, green, blue, and
		// alpha.
    bitmapBytesPerRow   = (pixelsWide * 4);
    bitmapByteCount     = (bitmapBytesPerRow * pixelsHigh);
	
		// Use the generic RGB color space.
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
	
		// Allocate memory for image data. This is the destination in memory
		// where any drawing to the bitmap context will be rendered.
    bitmapData = malloc( bitmapByteCount );
	
		// Create the bitmap context. We want pre-multiplied ARGB, 8-bits 
		// per component. Regardless of what the source image format is 
		// (CMYK, Grayscale, and so on) it will be converted over to the format
		// specified here by CGBitmapContextCreate.
    context = CGBitmapContextCreate (bitmapData,
									 pixelsWide,
									 pixelsHigh,
									 8,      // bits per component
									 bitmapBytesPerRow,
									 colorSpace,
									 kCGImageAlphaPremultipliedFirst);
    if (context == NULL)
		{
        free (bitmapData);
        fprintf (stderr, "Context not created!");
		}
	
		// Make sure and release colorspace before returning
    CGColorSpaceRelease( colorSpace );
	
    return context;
}
调用处代码
UIImage*img =   [UIImage imageWithContentsOfFile:pngfile];
	CGImageRef imageref = img.CGImage;
	CGContextRef context = [self CreateARGBBitmapContext:imageref];
	CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
	
	
    size_t w = CGImageGetWidth(imageref);
    size_t h = CGImageGetHeight(imageref);
    CGRect rect = {{0,0},{w,h}}; 
	
		// Draw the image to the bitmap context. Once we draw, the memory 
		// allocated for the context for rendering will then contain the 
		// raw image data in the specified color space.
    CGContextDrawImage(context, rect, imageref); 
	
		// Now we can get a pointer to the image data associated with the bitmap
		// context.
    void *data = CGBitmapContextGetData (context);
	int  bitmapBytesPerRow   = (w * 4);
    if (data != NULL)
		{
	    CGContextRelease(imp.bitmapContext);
		imp.bitmapContext = CGBitmapContextCreate (data,
												   w,
												   h,
												   8,      // bits per component
												   bitmapBytesPerRow,
												   colorSpace,
												   kCGImageAlphaPremultipliedFirst);
			// **** You have a pointer to the image data ****
		
			// **** Do stuff with the data here ****
		
		}
	
		// When finished, release the context
    CGContextRelease(context); 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值