如何将 CorePlot 创建的图形保存为 jpg 文件
Posted
技术标签:
【中文标题】如何将 CorePlot 创建的图形保存为 jpg 文件【英文标题】:How to save a graphic created by CorePlot to a jpg file 【发布时间】:2010-11-19 16:20:24 【问题描述】:我正在使用 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");
【问题讨论】:
附带说明,您是否考虑过使用 png 而不是 jpg?对于计算机生成的图形(如图表)可能会更好。 【参考方案1】:实际上,用于 Core Plot 中所有绘图元素的 CPLayer 基类有一个名为 -imageOfLayer
的类别方法,它返回您调用它的任何层的 UIImage 实例。如果您想了解这是如何实现的,请参阅框架中的 CPPlatformSpecificCategories.h
和 CPPlatformSpecificCategories.m
文件。
只需在您的 CPGraph 实例上使用 -imageOfLayer
,然后使用 UIImageJPEGRepresentation()
创建该图像的 JPEG 版本。然后,您可以使用正常方式上传该图像。
同样,有一个 -dataForPDFRepresentationOfLayer
方法返回一个 NSData 实例,其中包含层及其子层的 PDF 表示。
【讨论】:
嗨..这是可能的全图图像..我只有 320 X 460 ..可见图图像..我想要全图图像..?我怎样才能得到它...?【参考方案2】:我对 CorePlot 了解不多。但我假设 CorePlot 提供了一个将图形呈现给自身的视图。如果 CorePlot 没有提供获取图形的UIImage
的机制,那么您可能会欺骗 CorePlot 将其绘制到您自己的位图图形上下文中,您可以从中创建一个图像对象进行保存。
这是基本方法:
1) 使用UIGraphicsBeginImageContext()
创建位图图形上下文。这也将使上下文成为“当前”上下文。您也可以使用CGBitmapContextCreate()
,但您还必须使用UIGraphicsPushContext()
使其成为最新版本。
2) 调用 CorePlot 视图的 drawRect:
方法。
3) 使用UIGraphicsGetImageFromCurrentImageContext()
从图形上下文中获取图像
4) 用UIGraphicsEndImageContext()
清理
5) 使用 UIImageJPEGRepresentation()
将您的 Jpeg 位转换为 NSData
对象。
6) 使用 NSData
方法(或其他..)保存/上传您的 jpeg
【讨论】:
以上是关于如何将 CorePlot 创建的图形保存为 jpg 文件的主要内容,如果未能解决你的问题,请参考以下文章