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

あなたが正しい。NSDataオブジェクトにデータがある場合は、それをディスクに書き込むことができます。ただし、正しい拡張子(この場合は.pdf)を追加する必要があります。それはすべて(ビデオ、写真など...)で機能します

于 2012-05-15T08:13:52.557 に答える
0

これは少し赤いニシンでした。パスは描画されていましたが、ストロークや塗りつぶしはありませんでした。上記の私の質問のコードは健全で、期待どおりに機能します。

于 2012-05-15T09:18:18.213 に答える