4

を使ってカメラを作りましたAVFoundation

AVCaptureStillImageOutputメソッドが完成したら、captureStillImageAsynchronouslyFromConnection:completionHandler:次のような NSData オブジェクトを作成します。

         NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];

オブジェクトを取得したらNSData、に変換せずに画像を回転させたいと思いUIImageます。そうするために に変換できることがわかりましたCGImage

imageData を取得した後、CGImage への変換プロセスを開始しましたが、オブジェクトの 30CGImageRef倍の大きさになることがわかりましたNSData

CGImagefromに変換するために使用するコードは次のNSDataとおりです。

CGDataProviderRef imgDataProvider = CGDataProviderCreateWithCFData((__bridge CFDataRef)(imageData));
CGImageRef imageRef = CGImageCreateWithJPEGDataProvider(imgDataProvider, NULL, true, kCGRenderingIntentDefault);

NSLog画像のサイズを出してみるとNSData、1.5~2メガバイトの画像が30メガバイトに!

size_t imageSize = CGImageGetBytesPerRow(imageRef) * CGImageGetHeight(imageRef);

    NSLog(@"cgimage size = %zu",imageSize);

NSData から CGImage に移動すると、画像が解凍され、NSData に戻すと、適切なファイル サイズに戻るのではないかと考えました。

imageData = (NSData *) CFBridgingRelease(CGDataProviderCopyData(CGImageGetDataProvider(imageRef)));

上記はオブジェクトNSDataと同じです。lengthCGImageRef

画像を保存しようとすると、画像は 30 MB の画像で開くことができません。

私は CGImage の使用にまったく慣れていないので、NSData から CGImage への変換が間違っているのか、または再度解凍するために何らかのメソッドを呼び出す必要があるのか​​どうかはわかりません。

前もって感謝します、

意思

4

1 に答える 1