使用 Core Graphics 绘制 UIImage?
Posted
技术标签:
【中文标题】使用 Core Graphics 绘制 UIImage?【英文标题】:Draw an UIImage with Core Graphics? 【发布时间】:2012-01-09 13:17:51 【问题描述】:我想在屏幕上绘制使用 CGContextRef 或 UIGraphicsBeginImageContext 从 PhotoLibrary 检索到的图像。
我尝试了以下代码,但它没有在屏幕上绘制任何内容。我目前正在使用 cocos2d 和 box2d。怎么了?
-(void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
newImage = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
// Dismiss UIImagePickerController and release it
[picker dismissModalViewControllerAnimated:YES];
[picker.view removeFromSuperview];
[picker release];
// Let's create a sprite now that we have an image
//CCSprite *imageFromPicker = [CCSprite spriteWithCGImage:newImage.CGImage key:@"ImageFromPicker"];
//[self addChild:imageFromPicker];
UIGraphicsBeginImageContext(CGSizeMake(320,480));
CGContextRef context = UIGraphicsGetCurrentContext();
[newImage drawAtPoint:CGPointZero];
CGContextTranslateCTM(context, 70, 370 );
CGContextScaleCTM(context, 1.0, -1.0);
//CGContextDrawImage(context, CGRectMake(0, 0, 40, 40), newImage.CGImage);
//CGImageRelease(newImage);
UIGraphicsEndImageContext();
【问题讨论】:
【参考方案1】:您不会告诉 Cocoa(触摸或其他方式)突然开始绘图。它询问您的应用程序应该如何绘制某些视图,然后您在视图子类的drawRect
方法中告诉它。此时已经创建了图形上下文。
您的代码正在创建一个图形上下文并对其进行绘图,但此绘图并未在屏幕上完成。
要在特定位置绘制特定图像,您通常会将图像对象分配给已经知道如何绘制图像的某个视图(如上面代码中的精灵?我不熟悉 cocos2d)。然后您将该视图放在屏幕上(您已注释掉 addChild 调用?)。您可以将必要的转换添加到视图对象,这将被考虑在内。
简单看一下 cocos2d 文档,CCSprite 继承自 CCNode,可以对其应用变换 - 您可以设置旋转和缩放参数。我建议你调查一下。
【讨论】:
因为提问者可能会想:UIGraphicsBeginImageContext
用于创建图像,而不是绘制到屏幕上。你已经有了一张图片,所以只需将它交给一个知道如何绘制它的视图(特别是视图层次结构中的那个)。
我完全同意..但它不是一个基于视图的类,它是一个基于 cclayer 的类(所以我猜 drawrect 方法不是一个选项)..我需要执行操作(比如缩放图像) 所以我想在某个图形上下文对象中获取图像,以便我可以在 draw 方法中操作它??
您可以对 CCSprite 应用变换。我已经编辑了我的答案。以上是关于使用 Core Graphics 绘制 UIImage?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Core Graphics 在 UIImage 上绘制矩形
使用 Core Graphics 在 UIImageView 上绘制一个矩形