2011-04-11 59 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(或任何你想要的縮略圖大小)。