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

Iphone 如何将CorePlot创建的图形保存到jpg文件,iphone,core-plot,Iphone,Core Plot,我在应用程序中使用CorePlot绘制不同的图形。然后,我想把这个图保存到一个jpg文件中,并发布到一些社交网站(比如Twitter) 我阅读了一些文档,了解到以下方法可能对我有用: CGBitmapContextCreateImage:从位图图形上下文(即图形所在的视图或整个屏幕-我理解对了吗?)创建CGImage作为副本 CGImageCreateWithImageInRect:如果需要,我可以剪裁图像的某些部分 [UIImage imageWithCGImage]:将CGImage转换为

我在应用程序中使用CorePlot绘制不同的图形。然后,我想把这个图保存到一个jpg文件中,并发布到一些社交网站(比如Twitter)

我阅读了一些文档,了解到以下方法可能对我有用:

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

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

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

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

  • 第一个问题是:我是否正确理解了为完成任务而必须执行的操作顺序?我本想自己尝试一下,但我有一个问题导致了第二个问题:

  • 如果我使用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");

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

以下是基本方法:

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

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

3) 使用
UIGraphicsGetImageFromCurrentImageContext()从图形上下文获取图像

4) 使用
UIGraphicsEndImageContext()清理

5) 使用
uiimagejpegresentation()
将Jpeg位放入
NSData
对象中


6) 使用
NSData
方法(或其他方法)保存/上载jpeg

实际上,用于Core Plot中所有绘图元素的CPLayer基类有一个名为
-imageOfLayer
的分类方法,该方法返回您调用它的任何层的UIImage实例。如果您想了解如何实现这一点,请参阅框架中的
cpplatformspecificategories.h
cpplatformspecificategories.m
文件

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


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

作为旁注,您考虑过png而不是jpg吗?它可能更适合计算机生成的图形,如图表。嗨。。这可能是整个图形图像。。我只得到了320 X 460..可见的图形图像。。我想要完整的图形图像。。?我怎样才能得到它。。。?