1

我正在生成图像,并且可以成功地将其保存到文件中。

urlRef = (CFURLRef)[NSURL fileURLWithPath: filePath];

imgDestRef = CGImageDestinationCreateWithURL(urlRef,
                                             kUTTypeJPEG, 
                                             1, 
                                             NULL);

/* ... */

CGImageDestinationFinalize(imgDestRef);

现在我需要将生成的图像发送到标准输出,而不是将其写入文件。

我尝试将filePath设置为/dev/stdout但 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直接写入标准输出假设采用这种方式会更快或占用更少的内存)。

4

2 回答 2

2

创建一个自定义 CGDataConsumer,其put bytes 回调使用 NSFileHandle 或 NSFileHandle 写入字节write,然后使用该数据使用者创建一个图像目标

您可以将它包装在一个接受 NSFileHandle 的对象中,围绕它创建一个数据使用者,并公开一两个用于添加图像的方法。

于 2013-05-26T17:44:45.230 回答
1

怎么样

 CGImageDestinationCreateWithData 

写入 NSMutableData 对象。

使用方法获取字节NSMutableData:bytes并使用 printf 或 putc 或任何你喜欢的输出?

于 2013-05-25T20:54:12.243 回答