を使ってカメラを作りましたAVFoundation
。
AVCaptureStillImageOutput
メソッドが完成したら、captureStillImageAsynchronouslyFromConnection:completionHandler:
次のような NSData オブジェクトを作成します。
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
オブジェクトを取得したらNSData
、に変換せずに画像を回転させたいと思いUIImage
ます。そうするために に変換できることがわかりましたCGImage
。
imageData を取得した後、CGImage への変換プロセスを開始しましたが、オブジェクトの 30CGImageRef
倍の大きさになることがわかりましたNSData
。
CGImage
fromに変換するために使用するコードは次の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
と同じです。length
CGImageRef
画像を保存しようとすると、画像は 30 MB の画像で開くことができません。
私は CGImage の使用にまったく慣れていないので、NSData から CGImage への変換が間違っているのか、または再度解凍するために何らかのメソッドを呼び出す必要があるのかどうかはわかりません。
前もって感謝します、
意思