2011-07-18 7 views
1

カメラから写真をキャプチャしてフォルダに保存する必要があります。フォルダから複数の画像を表示しようとすると、それは、読み込まれていないメモリの警告をスローし、アプリケーションを閉じます。私は写真ライブラリから画像を選択した場合、このプロセスは正常に動作しています。私が逃したところでアドバイスをしてください。私はあなたの参照のための私のソースコードを添付しているどのようにiphoneでカメラの画像ファイルサイズを減らすには?

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 

    [self dismissModalViewControllerAnimated:YES]; 
    isPrivacyPhoto = NO; 
    UIImage *pickedImage = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 
    NSData *jpegData = UIImageJPEGRepresentation(pickedImage,1.0); 
     [jpegData writeToFile:fileDirectory atomically:NO]; 


} 


thumnail = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@%@",photo.Path,photo.PhotoName]]; 

thumnail=[appDelegate thumnail scaledToSize:CGSizeMake(75.0, 104.0)]; 



-(UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize 
{ 

    UIGraphicsBeginImageContextWithOptions(newSize, YES, [UIScreen mainScreen].scale); 
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; 
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return newImage; 

} 

for (int Count = 0; Count < [listData count] ; Count ++) 
{ 
    Photo *photo = [listData objectAtIndex: Count]; 

    if([FileUtils fileExistsAtPath:photo.Path fileName:photo.PhotoName]) 
    { 

     PhotoView *photoView = [[PhotoView alloc] initWithFrame: CGRectMake(ThumbnailSizeWidth * (PhotoViewCount % THUMBNAIL_COLS) + PADDING * (PhotoViewCount % THUMBNAIL_COLS) + PADDING, 
                      ThumbnailSizeHeight * (PhotoViewCount/THUMBNAIL_COLS) + PADDING * (PhotoViewCount/THUMBNAIL_COLS) + PADDING + PADDING_TOP, 
                      ThumbnailSizeWidth, 
                      ThumbnailSizeHeight)]; 
     [photoView setDelegate:self]; 
     [photoView setPhoto:photo]; 
     [photoView setTagIndexID:OrginalCounter]; 
     //NSLog(@"TagIndexID:%d",Count); 
     PhotoViewCount ++ ; 


     if(photo.isPrivacy) 
     { 
      UIImage *tImage = [UIImage imageNamed:@"locked.png"]; 
      [photoView setPhotoViewImage:tImage]; 
     } 
     else 
     { 
      [photoView setTag:OrginalCounter]; 

      NSData *imgData = [NSData dataWithContentsOfFile:[NSString stringWithFormat:@"%@%@",photo.Path,photo.PhotoName]]; 
      UIImage *thumnail = [UIImage imageWithData:imgData]; 


      //UIImage *thumnail = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@%@",photo.Path,photo.PhotoName]]; 
      //UIImage *thumnail = [[UIImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@%@",photo.Path,photo.PhotoName]]; 

      MyPhoto *photo = [[MyPhoto alloc] initWithImage:thumnail]; 
      [photos addObject:photo]; 
      [photo release]; 
      //[thumnail release]; 


      OrginalCounter++; 

      [photoView performSelectorInBackground:@selector(setPhotoViewImage:) withObject:thumnail]; 

     } 

     [scrollViewer addSubview:photoView]; 
     [photoView release]; 


    } 
} 




-(void) setPhotoViewImage:(UIImage*)image 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 


    PrivacyPixAppDelegate *appDelegate = [PrivacyPixAppDelegate appDelegate]; 

    image=[appDelegate imageWithImage:image scaledToSize:CGSizeMake(75.0, 104.0)]; 
    //image = [image scaleAndCropToSize:CGSizeMake(69.0, 104.0) onlyIfNeeded:YES]; 
    //image = [image scaleAndCropToSize:CGSizeMake(75, 100)]; 

    //image=[image ScaleImageToRect:image displaySize:CGSizeMake(40,40)]; 


    if(!btnPhoto) 
     btnPhoto = [[UIImageView alloc] init]; 
     [btnPhoto setFrame:CGRectMake(2, 2, 75, 75)]; 
    //[btnPhoto setContentMode:UIViewContentModeTop]; 
    btnPhoto.image = image; 
    [self addSubview:btnPhoto]; 
    //[btnPhoto release]; 


    if(!txtPhotoName) 
     txtPhotoName = [[UITextField alloc] init]; 

     [txtPhotoName setDelegate:self]; 
    [txtPhotoName setFrame:CGRectMake(2, btnPhoto.frame.size.height + 2, self.frame.size.width, 20)]; 
    txtPhotoName.font = [UIFont boldSystemFontOfSize:12.0]; 
    txtPhotoName.backgroundColor = [UIColor whiteColor]; 
    txtPhotoName.textAlignment = UITextAlignmentCenter; 
    txtPhotoName.borderStyle = UITextBorderStyleLine; 
    txtPhotoName.text = photo.PhotoCaption; 
    txtPhotoName.returnKeyType = UIReturnKeyDone; 
    txtPhotoName.hidden = YES; 
    [self addSubview:txtPhotoName]; 


    if(!lblPhotoName) 
     lblPhotoName = [[UILabel alloc] init]; 

     [lblPhotoName setFrame:CGRectMake(0, btnPhoto.frame.size.height, self.frame.size.width, 25)]; 
    lblPhotoName.backgroundColor = [UIColor clearColor]; 
    lblPhotoName.font = [UIFont systemFontOfSize:9.0]; 
    lblPhotoName.userInteractionEnabled = NO; 
    lblPhotoName.text = photo.PhotoCaption; 
    lblPhotoName.numberOfLines = 2; 
    lblPhotoName.hidden = NO; 
    lblPhotoName.textAlignment = UITextAlignmentCenter; 
    [self addSubview:lblPhotoName]; 



    //[lblPhotoName release]; 

    [pool release]; 
} 


-(UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize 
{ 
    // Create a bitmap context. 
    UIGraphicsBeginImageContext(newSize); 
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; 
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return newImage; 

} 

これは私のコードで、メモリワーリングやアプリのクラッシュを取得しています。どこで変更しなければならないのですか? 注:Appクラッシュはカメラ画像でのみ発生します。

:受信メモリ警告。レベル= 2

+0

画像を切り抜きたいですか? – Maulik

答えて

1

がこの記事から撮影:How do I reduce Image quality/size in iPhone objective-c?

あなたは、グラフィックスコンテキストを作成したいスケールでそれに画像を描画し、返された画像を使用することができます。例:

UIGraphicsBeginImageContext(CGSizeMake(480,320)); 
CGContextRef   context = UIGraphicsGetCurrentContext(); 
[image drawInRect: CGRectMake(0, 0, 480, 320)]; 
UIImage  *smallImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

イメージを縮小して好きなように変更するだけです。

+0

私の完全なソースを参照してください私を – Gnanavadivelu

+3

確かめてください。私の時間割は90ドルです。 – PengOne

関連する問題