我正在使用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");
答案 0 :(得分:20)
实际上,用于Core Plot中所有绘图元素的CPLayer基类都有一个名为-imageOfLayer
的类别方法,它返回您调用它的任何层的UIImage实例。如果您想了解如何完成此操作,请参阅框架中的CPPlatformSpecificCategories.h
和CPPlatformSpecificCategories.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
方法(或其他..)