我想从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 Object中的数据似乎没问题。 但是如何正确获取字节?
感谢您的任何建议。
答案 0 :(得分:0)
写完文件后,您是fflush()
编辑还是fclose()
?您的数据可能只是缓存在内存中。