Reputation: 293
I need to capture photo from camera and save it in folder.If i tried to display multiple images from folder. It is not loading, throwing memory warning and close the app.If i choose image from Photo Library , this process is working properly. Where i missed out Please advice.
- (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;
}
I have attached my source code for your reference:
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;
}
This is my code, am getting memory waring and app crash. Where i have to change it. Note: App crash happens only the Camera image.
: Received memory warning. Level=2
Upvotes: 1
Views: 1477
Reputation: 48398
Taken from this post: How do I reduce Image quality/size in iPhone objective-c?
You can create a graphics context, draw the image into that at the desired scale, and use the returned image. For example:
UIGraphicsBeginImageContext(CGSizeMake(480,320));
CGContextRef context = UIGraphicsGetCurrentContext();
[image drawInRect: CGRectMake(0, 0, 480, 320)];
UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Just modify the size above to reduce the image to whatever you like.
Upvotes: 1