我試圖找出這個問題,但做了每件事情後,我發現在操作系統或谷歌失敗。問題是,當我使用UIImageJPEGRepresentation
或UIImagePNGRepresentation
轉換UIImage
到NSData
它增加內存大小爲30MB(相信我與否)。
這是我的代碼UIImageJPEGRepresentation以巨大的內存
myImage= image;
LoginSinglton*loginObj = [LoginSinglton sharedInstance];
NSError *error;
NSData *pngData = UIImageJPEGRepresentation(image, scaleValue); //scaleVale is 1.
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory
self.imageCurrentDateAndTime =[self getTimeAndDate];
self.filePathAndDirectory = [documentsPath stringByAppendingPathComponent:@"Photos Dir"];
NSLog(@"Documents path %@",self.filePathAndDirectory);
if (![[NSFileManager defaultManager] createDirectoryAtPath:self.filePathAndDirectory
withIntermediateDirectories:NO
attributes:nil
error:&error])
{
NSLog(@"Create directory error: %@", error);
}
self.imageName= [NSString stringWithFormat:@"photo-%@-%@.jpg",loginObj.userWebID,self.imageCurrentDateAndTime];
NSString *filePath = [self.filePathAndDirectory stringByAppendingPathComponent:self.imageName];
[pngData writeToFile:filePath atomically:YES]; //Write the file
[self writeImageThumbnailToFolder:image];
[self writeImageHomeViewThumbnailToFolder:image];
以下解決方案,以及 UIImageJPEGRepresentation - memory release issue
1-二手@autoreleasepool我試圖
2-完成pngData =零;
但仍然面臨內存問題。
編輯我覺得我無法表達我的問題。沒關係,如果UIImageJPEGRepresentation
佔用大量內存,但內存應該在保存該映像後回到它的較早位置。希望這會幫助你詳細。
什麼是你的圖片的分辨率?讓我猜猜...... 8兆像素,即3264 x 2448或3264 x 2448 x 4字節,每個位圖加載到內存中大約30 Mo ...也許這是您的問題,如果縮小壓縮比例不夠,調整大小? – Vinzzz
當然你會得到大量的數據。您正在壓縮圖像並將其解壓縮爲純數據表示形式,這將是巨大的。 – MZimmerman6
@Vinzzz我不知道尺寸但分辨率接近你所提到的,因爲我使用「AVCaptureSessionPresetPhoto」 – iEngineer