4

我有一个从 CGPathRef 返回 NSData 的方法,就像这样......

+ (NSData *) createPDFDataWithCGPath: (CGPathRef) path mediaBox: (CGRect) mediaBox
{
  CFMutableDataRef data = NULL;
  if (path) {
    CFAllocatorRef allocator = NULL;
    data = CFDataCreateMutable(allocator, 0);
    CGDataConsumerRef consumer = CGDataConsumerCreateWithCFData(data);
    CGContextRef context = CGPDFContextCreate(consumer, &mediaBox, NULL);
    CFTypeRef keys[1] = { kCGPDFContextMediaBox };
    CFTypeRef values[1] = { CFDataCreate(allocator, (const UInt8 *)&mediaBox, sizeof(CGRect)) };
    CFDictionaryRef pageInfo = CFDictionaryCreate(allocator, keys, values, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);

    CGPDFContextBeginPage(context, pageInfo);
    CGContextScaleCTM(context, 1, -1);
    CGContextTranslateCTM(context, 0, -mediaBox.size.height);
    CGContextAddPath(context, path);
    CGContextSetRGBFillColor(context, 0, 0, 0, 1);
    CGContextFillPath(context);
    CGPDFContextEndPage(context);

    CFRelease(pageInfo);
    CFRelease(values[0]);
    CGPDFContextClose(context);
    CGContextRelease(context);
    CGDataConsumerRelease(consumer);
  }
  return (NSData *)data;
}

当我尝试使用它并从数据中写入 PDF 文件时,我得到了正确大小的文件,但路径没有绘制到 PDF 中……它基本上是一个空文档。

像这样写文件就够了吗...

[maskData writeToFile: DOCUMENTS_PATH_WITH_STRING(@"maskData.pdf") atomically: YES];

还是他们更愿意跳起来把它写成PDF?

4

2 回答 2

0

这有点像红鲱鱼。正在绘制路径,但没有描边或填充。我上面问题中的代码是合理的并且可以按预期工作。

于 2012-05-15T09:18:18.213 回答
0

你是对的。如果您在 NSData 对象中有数据,那么您可以将其写入磁盘。但是您应该添加正确的扩展名(在您的情况下为 .pdf)。它适用于所有内容(视频、图片等...)

于 2012-05-15T08:13:52.557 回答