將我的應用創建的圖像保存到iPhone圖庫並嘗試恢復後出現問題。圖像數據是不同的。將圖片保存爲照片後獲取UIImage數據iOS中的圖庫
創建圖像
1.Code
我不使用阿爾法創建一個圖像(事實上,我得到了相同的結果,如果我使用阿爾法)
+ (UIImage *)createImageFromData:(NSData *)data {
uint8_t *imageData = (uint8_t *) calloc(WIDTH * HEIGHT * 3, sizeof(uint8_t));
[data getBytes:imageData];
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGDataProviderRef provider = CGDataProviderCreateWithData(NULL,
imageData,
WIDTH * HEIGHT * 3,
NULL);
CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;
CGImageRef imageRef = CGImageCreate(WIDTH,
HEIGHT,
8, // Bits per color component
3 * 8, // Bits per pixel : 1 pixel => 3 component
3 * WIDTH, // bytes per lign (1 byte = 1 component)
colorSpace,
bitmapInfo,
provider,
NULL,
NO,
renderingIntent);
UIImage *resultImage = [UIImage imageWithCGImage:imageRef];
return resultImage;
}
2.Debug
在這裏,當我在方法結尾處打破時,我得到了lldb
(lldb) p (int)imageData[0]
(uint8_t) $0 = 102
(lldb) p (int)imageData[1]
(uint8_t) $1 = 116
(lldb) p (int)imageData[2]
(uint8_t) $2 = 121
(lldb) p (int)imageData[3]
(uint8_t) $3 = 112
保存圖像
- (IBAction)saveImage:(id)sender {
UIImageWriteToSavedPhotosAlbum(_image, self,
@selector(image:didFinishSavingWithError:contextInfo:), nil);
}
編輯:我嘗試的另一種方式來保存圖像:
CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(self.generatedImageView.image.CGImage));
uint8_t *data = (uint8_t *)CFDataGetBytePtr(pixelData);
NSData *dataToSave = [NSData dataWithBytesNoCopy:data length:CFDataGetLength(pixelData) freeWhenDone:NO];
ALAssetsLibrary *assetLib = [[ALAssetsLibrary alloc] init];
[assetLib writeImageDataToSavedPhotosAlbum:dataToSave metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
NSLog(@"%@", error);
}];
DataToSave
得到字節的正確數量,既error
和assetURL
是零在完成塊中,並且我看不到任何新照片在相冊
從圖書館
這是一個委託方法
找回圖像從以前的圖像再回到數據
1.Code
+ (NSData *)createDataFromImage:(UIImage *)image {
CGImageRef imageRef = [image CGImage];
CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
uint8_t *data = (uint8_t *)CFDataGetBytePtr(pixelData);
return [NSData dataWithBytesNoCopy:data length:SIZE freeWhenDone:YES];;
}
2.Debug
現在我有什麼
(lldb) p (int)data[0]
(int) $4 = 35
(lldb) p (int)data[1]
(int) $5 = 72
(lldb) p (int)data[2]
(int) $6 = 100
(lldb) p (int)data[3]
(int) $7 = 255
alpha分量似乎與255的值......這不應該是一個問題嗎?但所有其他價值都發生了變化。在這一點上,我真的不知道如何獲得以前的價值!
編輯:它似乎是一個壓縮(當保存圖像)和解壓縮(當它回來)問題。 但是,我需要將相同的數據保存到照片相冊後。
在這種情況下,有沒有辦法救它不壓縮? – KIDdAe
是的,我已經更新了我的答案。 – Avt
@KIDdAe是我的回答有用嗎?你應該只要我試試看知道在這種情況下做:) – Avt