2010-11-19 59 views
12

我正在使用CorePlot在我的应用程序中绘制不同的图形。然后,我想将此图保存为jpg文件并发布到某个社交网站(例如Twitter)。如何将由CorePlot创建的图形保存到jpg文件

我做了一些文档的阅读和理解,下面的方法可以为我是有用的:

  • CGBitmapContextCreateImage:创建一个CGImage从位图图形上下文的副本(即认为在我的图是情境或整个屏幕 - 有我理解右)

  • CGImageCreateWithImageInRect:如果需要,我可以剪辑出的图像的一些部分

  • [UIImage的imageWithCGImage? ]:转换CGImage到UIImage对象

  • UIImageJPEGRepresentation:我UIImage对象转换为JPG NSData对象,然后我可以分享到我的社交网络

    1. 的第一个问题是:有我的理解正确的为了完成我的任务,我必须执行哪些操作?我会尝试过了自己,但我有这导致了第二个问题一个问题:

    2. 从哪儿可以得到图形上下文的信息传递到CGBitmapContextCreateImage如果我使用CorePlot?对不起,如果这是一个愚蠢的问题,但我不是真的在家里与图形上下文。

非常感谢提前任何帮助!如果我能在这里找到所有这些,我保证会在这里发布我的代码示例。

好,多亏了布拉德,这是很容易,但我promissed,我必须张贴线路:

CPXYGraph *graph=[[CPXYGraph alloc]initWithFrame:CGRectMake(0, 0, 100, 100)]; 

// setting up the graph 
// ... 

UIImage *newImage=[graph imageOfLayer]; 
NSData *newPNG=UIImagePNGRepresentation(newImage); // or you can use JPG or PDF 

// For test purposes I write the file to the Documents directory, but you can do whatever you want with your new .png file 
NSString *filePath=[NSString stringWithFormat:@"%@/graph.png", [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]]; 

if([newPNG writeToFile:filePath atomically:YES]) 
    NSLog(@"Created new file successfully"); 
+1

作为一个附注,你认为PNG而不是JPG?计算机生成的图形如图表可能会更好。 – ustun 2010-11-19 18:15:55

回答

20

实际上,用于在核心剧情所有绘图元素CPLayer基类有称为-imageOfLayer一个类中的方法,它返回一个UIImage实例无论你怎么称呼它。如果您想了解如何实现这一点,请参阅框架中的CPPlatformSpecificCategories.hCPPlatformSpecificCategories.m文件。

只需在您的CPGraph实例上使用-imageOfLayer,然后使用UIImageJPEGRepresentation()创建该图像的JPEG版本。然后您可以使用常规方式上传该图像。

同样,有一个-dataForPDFRepresentationOfLayer方法返回一个包含该图层及其子图层的PDF表示的NSData实例。

+0

是的!!!非常简单,谢谢! – Arts 2010-11-19 20:55:42

+0

嗨..这是可能的整个图形图像..我只有320×460 ..可见的图形图像..我想全图形图像..?我怎么才能得到它...? – 2012-02-22 09:14:44

2

我不知道很多关于CorePlot。但我认为CorePlot提供了一个视图,它自己呈现一个图。如果CorePlot没有提供获取图形的UIImage的机制,那么您可能会欺骗CorePlot绘制到您自己的位图图形上下文中,从中您可以创建要保存的图像对象。

这里的基本方法:

1)创建使用UIGraphicsBeginImageContext()位图图形上下文。这也将使背景成为“当前”背景。您也可以使用CGBitmapContextCreate(),但您也必须使用UIGraphicsPushContext()才能使其成为最新版本。 2)调用CorePlot视图的方法drawRect:

3)使用UIGraphicsGetImageFromCurrentImageContext()

4图形上下文获取图像)UIGraphicsEndImageContext()

5清理)获得您的JPEG位转换成使用UIImageJPEGRepresentation()NSData一个对象。

6)保存/上传使用NSData方法您的JPEG(或其他..)

相关问题