【问题标题】:Draw an UIImage with Core Graphics?使用 Core Graphics 绘制 UIImage?
【发布时间】:2024-01-15 00:21:02
【问题描述】:

我想在屏幕上绘制使用 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();

}

【问题讨论】:

    标签: ios cocoa-touch uikit cocos2d-iphone core-graphics


    【解决方案1】:

    您不会告诉 Cocoa(触摸或其他方式)突然开始绘图。它询问您的应用程序应该如何绘制某些视图,然后您在视图子类的drawRect 方法中告诉它。此时已经创建了图形上下文。

    您的代码正在创建一个图形上下文并对其进行绘图,但此绘图并未在屏幕上完成。

    要在特定位置绘制特定图像,您通常会将图像对象分配给已经知道如何绘制图像的某个视图(如上面代码中的精灵?我不熟悉 cocos2d)。然后您将该视图放在屏幕上(您已注释掉 addChild 调用?)。您可以将必要的转换添加到视图对象,这将被考虑在内。

    简单看一下 cocos2d 文档,CCSprite 继承自 CCNode,可以对其应用变换 - 您可以设置旋转和缩放参数。我建议你调查一下。

    【讨论】:

    • 因为提问者可能会想:UIGraphicsBeginImageContext 用于创建图像,而不是绘制到屏幕上。你已经有了一张图片,所以只需将它交给一个知道如何绘制它的视图(特别是视图层次结构中的那个)。
    • 我完全同意..但它不是一个基于视图的类,它是一个基于 cclayer 的类(所以我猜 drawrect 方法不是一个选项)..我需要执行操作(比如缩放图像) 所以我想在某个图形上下文对象中获取图像,以便我可以在 draw 方法中操作它??
    • 您可以对 CCSprite 应用变换。我已经编辑了我的答案。