2013-05-25 58 views
1

我正在生成圖像,並且我可以將它成功保存到文件。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假設這樣做會更快或更少的內存消耗)。

回答

1

如何

CGImageDestinationCreateWithData 

寫入到一個NSMutableData對象。

NSMutableData:bytes方法獲取字節並用printf或putc或任何你喜歡的東西輸出?

+0

或者,製作一個將字節寫入標準輸出的自定義CGDataConsumer,並[用該消費者創建您的圖像目的地](http://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CGImageDestination/Reference /reference.html#//apple_ref/c/func/CGImageDestinationCreateWithDataConsumer)。 –

+0

(順便說一句,'printf'和'putc'都不是一種從NSData對象寫入字節的好方法,請考慮使用'write'或NSFileHandle來代替。) –

+0

@PeterHosey:在我看來,CGDataConsumer是去實現結果是一個步驟(沒有用CGImageDestinationCreateWithData寫入內存,然後讀取數據併發送到標準輸出)。如果您可以將該方法作爲答案提供更多細節,我會非常感激(並將其標記爲正確答案)。 – Paolo

相關問題