CGImageRefから圧縮データを取得して、ネットワーク接続を介して送信したいと思います。そのために、CGImageDestinationRef(CGImageDestinationCreateWithData)を使用します。
CFDataRefオブジェクトからデータを引き出した後、画像の下部にある2行が欠落しています。
これが私がすることです(読書目的のために掃除されました...):
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オブジェクトのデータは問題ないようです。しかし、バイトを正しく取得するにはどうすればよいですか?
アドバイスありがとうございます。