我正在生成圖像,並且我可以將它成功保存到文件。Mac OS X Core Graphics:將生成的圖像發送到標準輸出而不是保存到文件
urlRef = (CFURLRef)[NSURL fileURLWithPath: filePath];
imgDestRef = CGImageDestinationCreateWithURL(urlRef,
kUTTypeJPEG,
1,
NULL);
/* ... */
CGImageDestinationFinalize(imgDestRef);
現在我需要將生成的圖像發送到標準輸出而是其寫入文件。
我試圖文件路徑設置到的/ dev /標準輸出但CGImageDestinationCreateWithURL失敗。
-
另一種選擇是寫入內存,然後讀取數據,並寫入到標準輸出,這種方式:
jpgDataRef = CFDataCreateMutable(NULL, 0);
imgDestinationRef = CGImageDestinationCreateWithData(jpgDataRef,
kUTTypeJPEG,
1,
NULL);
/* ... */
CGImageDestinationFinalize(imgDestRef); /* STEP 1 */
NSFileHandle *stdoutFH = [NSFileHandle fileHandleWithStandardOutput]; /* STEP 2 */
[stdoutFH writeData:(NSData *)jpgDataRef];
但我寧願一個循序漸進的方式,與CGImageDestinationFinalize直接寫入stdout(假設這樣做會更快或更少的內存消耗)。
或者,製作一個將字節寫入標準輸出的自定義CGDataConsumer,並[用該消費者創建您的圖像目的地](http://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CGImageDestination/Reference /reference.html#//apple_ref/c/func/CGImageDestinationCreateWithDataConsumer)。 –
(順便說一句,'printf'和'putc'都不是一種從NSData對象寫入字節的好方法,請考慮使用'write'或NSFileHandle來代替。) –
@PeterHosey:在我看來,CGDataConsumer是去實現結果是一個步驟(沒有用CGImageDestinationCreateWithData寫入內存,然後讀取數據併發送到標準輸出)。如果您可以將該方法作爲答案提供更多細節,我會非常感激(並將其標記爲正確答案)。 – Paolo