0

我想从 CGImageRef 获取压缩数据以通过网络连接发送它。为此,我使用 CGImageDestinationRef (CGImageDestinationCreateWithData)。

将数据从 CFDataRef 对象中拉出后,图像在底部丢失了几行。

这是我所做的(为阅读目的而清理......):

CFImageRef image = getTheImageRefIWant();

CFMutableDataRef pngData = CFDataCreateMutable (kCFAllocatorDefault, 0);    

CGImageDestinationRef dataDest = CGImageDestinationCreateWithData (pngData, kUTTypePNG, 1, NULL);

CGImageDestinationAddImage (dataDest, image, NULL); //also tried this with options...

CGImageDestinationFinalize (dataDest);

CFIndex len = CFDataGetLength(pngData);

//copy data
unsigned char* m_image = malloc(len);
CFDataGetBytes (pngData, CFRangeMake(0,len), m_image);

//save data - for testing purpose
FILE *file = fopen("/path/test.png", "wb");
fwrite(m_image, 1, len, file);

//adding header and stuff - skipped here...

//send data
send(sockfd, m_image, len, 0);

如果我使用 CFData 对象作为 NSData 对象并将其保存到磁盘,它确实可以工作:

NSData *data = [(NSData *)pngData autorelease];
[data writeToFile:@"/path/test.png" atomically:YES];

但如果是使用 NSDatas 字节方法,它是相同的(截断图像):

NSUInteger len = [data length];
m_image = malloc(len);
memcpy(m_image, (unsigned char*)[data bytes], len);

似乎 CFData 对象中的数据似乎没问题。但是如何正确获取字节?

感谢您的任何建议。

4

1 回答 1

0

写完文件后你有fflush()ed 或d 吗?fclose()您的数据可能只是缓冲在内存中。

于 2012-04-21T19:29:10.800 回答