如何将CorePlot创建的图形保存为jpg文件

时间:2010-11-19 16:20:24

标签: iphone core-plot

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

我做了一些文档阅读并理解以下方法对我有用:

  • CGBitmapContextCreateImage:从位图图形上下文(即我的图形所在的视图或整个屏幕)创建CGImage副本 - 我理解对了吗?

  • CGImageCreateWithImageInRect:如果需要,我可以剪掉图像的某些部分

  • [UIImage imageWithCGImage]:将CGImage转换为UIImage对象

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

    1. 第一个问题是:我是否理解了为完成任务必须执行的操作顺序?我会自己尝试一下,但是我遇到了第二个问题:

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

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

好吧,多亏布拉德,这真的很容易,但正如我所承认的那样,我必须发布这些内容:

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");

2 个答案:

答案 0 :(得分:20)

实际上,用于Core Plot中所有绘图元素的CPLayer基类都有一个名为-imageOfLayer的类别方法,它返回您调用它的任何层的UIImage实例。如果您想了解如何完成此操作,请参阅框架中的CPPlatformSpecificCategories.hCPPlatformSpecificCategories.m文件。

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

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

答案 1 :(得分:2)

我对CorePlot了解不多。但我假设CorePlot提供了一个向自己呈现图形的视图。如果CorePlot没有提供获取图形UIImage的机制,那么您可以将CorePlot绘制到您自己的位图图形上下文中,您可以从中创建要保存的图像对象。

这是基本方法:

1)使用UIGraphicsBeginImageContext()创建位图图形上下文。这也将使上下文成为“当前”上下文。您也可以使用CGBitmapContextCreate(),但之后您还必须使用UIGraphicsPushContext()将其设为最新。

2)调用CorePlot视图的drawRect:方法。

3)使用UIGraphicsGetImageFromCurrentImageContext()

从图形上下文中获取图像

4)使用UIGraphicsEndImageContext()

进行清理

5)使用NSData将您的Jpeg位转换为UIImageJPEGRepresentation()对象。

6)使用NSData方法(或其他..)

保存/上传您的jpeg