2011-04-11 36 views
1

我想创建一个图像的缩略图,我从图片库或相机使用UIImagePickerController导入使用- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)selectedImage editingInfo:(NSDictionary *)editingInfo当我使用相机时,点击图像的缩略图很容易创建,但是当通过从照片库中选择图像完成相同的操作时,我的应用程序崩溃。当我在应用程序中启用NSZombie时,它显示f- [UIImage drawInRect:]:消息发送到释放实例0x5abc140上myThumbnail变量..在iPhone中创建图像的缩略图?

我可能做错什么?

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)selectedImage editingInfo:(NSDictionary *)editingInfo 
{ 
    [self saveImage:selectedImage]; 
} 
- (void)saveImage:(UIImage *)img 
{ 
    myThumbNail = img; 

    UIGraphicsBeginImageContext(CGSizeMake(60.0,60.0)); 

    [myThumbNail drawInRect:CGRectMake(0.0, 0.0, 60.0, 60.0)];// gets killed here 
} 
+0

这是您正在使用的确切代码? – 2011-04-12 02:49:54

回答

3

什么是您的saveImage中的图像:方法?我认为它应该是img。 希望这有助于

- (void)saveImage:(UIImage *)img 
{ 
    [img retain]; 
    //alloc your myThumbNail before this 
    myThumbNail = img; 
    [img release]; 
    UIGraphicsBeginImageContext(CGSizeMake(60.0,60.0)); 

    [myThumbNail drawInRect:CGRectMake(0.0, 0.0, 60.0, 60.0)];// gets killed here 

} 
+0

看看我更新的答案可以帮助你。 – visakh7 2011-04-11 06:44:18

0

你是否在任何地方调用myThumbNail上的alloc init?这听起来像是你首先没有为它分配内存,或者你已经将它释放到了你不应该拥有的地方。

+0

我也试过,但仍然是应用程序崩溃 – hemant 2011-04-11 06:39:57

1
+ (UIImage *)resizeImage:(UIImage *)image toResolution:(int)resolution 
{ 
    NSData *imageData = UIImagePNGRepresentation(image); 
    CGImageSourceRef src = CGImageSourceCreateWithData((__bridge CFDataRef)imageData, NULL); 
    CFDictionaryRef options = (__bridge CFDictionaryRef) @{ 
                  (id) kCGImageSourceCreateThumbnailWithTransform : @YES, 
                  (id) kCGImageSourceCreateThumbnailFromImageAlways : @YES, 
                  (id) kCGImageSourceThumbnailMaxPixelSize : @(resolution) 
                  }; 
    CGImageRef thumbnail = CGImageSourceCreateThumbnailAtIndex(src, 0, options); 
    CFRelease(src); 
    UIImage *img = [[UIImage alloc]initWithCGImage:thumbnail]; 
    return img; 
} 

这种方法需要一个UIImage和分辨率的参数和返回要求分辨率一个UIImage。

例如:如果要将1024x1024分辨率图像转换为240x240,则在参数1中传递1024x1024 UIImage,在参数2中传递240。作为回报,你会得到240x240的UIImage(或任何你想要的缩略图大小)。