使用 Core Graphics 绘制 UIImage?

Posted

技术标签:

【中文标题】使用 Core Graphics 绘制 UIImage?【英文标题】:Draw an UIImage with Core Graphics? 【发布时间】:2012-01-09 13:17:51 【问题描述】:

我想在屏幕上绘制使用 CGContextRefUIGraphicsBeginImageContext 从 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 绘制箭头?

使用 Core Graphics 在 UIImage 上绘制矩形

使用 Core Graphics 绘制圆弧时绘制的额外线

使用 Core Graphics 在 UIImageView 上绘制一个矩形

在 iOS 中使用 Core Graphics 绘制 VU 表

使用 Core Graphics 绘制带有减去文本的路径