将 ALBUM 与 UIImagePickerController 一起使用时,很容易获得缩略图。
从视频中获取缩略图甚至很容易。
但是当你使用相机时,
self.cameraController.sourceType = UIImagePickerControllerSourceTypeCamera;
然后你回到
-(void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
如何快速获取缩略图?
请注意,我并不是特别想保存图像..我想使用来自相机的图像(想象一下然后在绘图屏幕中使用它,或用于图像处理等)
下面是一个将图像转换为 128.128 图像的天真类别。但它太慢了。
许多应用程序从相机快速移动到下一个屏幕(例如,编辑图像或在其上绘图)。 技术是什么? 干杯
-(UIImage *)squareAndSmall
{
// this category works fine to make a 128.128 thumbnail,
// but it is very slow
CGSize finalsize = CGSizeMake(128,128);
CGFloat scale = MAX(
finalsize.width/self.size.width,
finalsize.height/self.size.height);
CGFloat width = self.size.width * scale;
CGFloat height = self.size.height * scale;
//uses the central area, say....
CGRect imageRect = CGRectMake(
(finalsize.width - width)/2.0f,
(finalsize.height - height)/2.0f,
width, height);
UIGraphicsBeginImageContextWithOptions(finalsize, NO, 0);
[self drawInRect:imageRect];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
尝试使用"AssetLibrary.framework"将图像写入相机胶卷,它将自动为您创建缩略图表示。此外,由于此过程是异步的,因此肯定会提高应用程序的性能。
尝试如下操作:
#import <AssetsLibrary/AssetsLibrary.h>
////.........your code
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
/////.........
UIImage* img = info[UIImagePickerControllerOriginalImage];
ALAssetsLibrary *library = [ALAssetsLibrary new];
[library writeImageToSavedPhotosAlbum:[img CGImage] orientation:(ALAssetOrientation)[img imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error){
if (error) {
NSLog(@"error");
return;
}
[library assetForURL:assetURL resultBlock:^(ALAsset *asset) {
[self.imageViewer setImage:[UIImage imageWithCGImage:[asset aspectRatioThumbnail]]]; //self.imageViewer is a UIImageView to display thumbnail
} failureBlock:^(NSError *error) {
NSLog(@"Failed to load captured image.");
}];
}];
[library release];
//................
}
////......rest of your code
我还没有测试代码,但我希望它应该满足您的目的。请确保在尝试之前将"AssetLibrary.framework"的引用添加到您的项目中,并让我知道它是否适合您。