0

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オブジェクトのデータは問題ないようです。しかし、バイトを正しく取得するにはどうすればよいですか?

アドバイスありがとうございます。

4

1 に答える 1

0

fflush()ファイルを書き込んだ後、ファイルをed またはfclose()d しましたか? データはメモリにバッファリングされているだけかもしれません。

于 2012-04-21T19:29:10.800 に答える