NSArray Image doesn't show in ScrollView - ios

NSArray image have:
2012-08-15 10:12:39.687 test[4200:11103] (
"http://192.168.1.165/Images/Demo/1.jpg",
"http://192.168.1.165/Images/Demo/0.jpg",
"http://192.168.1.165/Images/Demo/0.jpg",
"http://192.168.1.165/Images/Demo/2.jpg",
"http://192.168.1.165/Images/Demo/2.jpg",
"http://192.168.1.165/Images/Demo/2.jpg",
"http://192.168.1.165/Images/Demo/2.jpg",
"http://192.168.1.165/Images/Demo/1.jpg",
"http://192.168.1.165/Images/Demo/1.jpg",
"http://192.168.1.165/Images/Demo/1.jpg" )
And code .m:
dispatch_async(htvque, ^{
NSData* data = [NSData dataWithContentsOfURL: tophotfilm];
NSError* error;
json = [NSJSONSerialization JSONObjectWithData:data
options:kNilOptions
error:&error];
NSDictionary *list = [json objectForKey:#"List"];
NSMutableArray *arrPoster =[[NSMutableArray alloc]init];
for(NSString *po in list)
{
NSString *poster = [po valueForKey:#"Poster"];
[arrPoster addObject:poster];
}
myArray = [NSArray arrayWithArray:arrPoster];
NSArray *colors = [[NSArray alloc] initWithObjects:[UIColor redColor],
[UIColor greenColor], [UIColor magentaColor],
[UIColor blueColor], [UIColor orangeColor],
[UIColor brownColor], [UIColor grayColor], nil];
//NSLog(#"%#",colors);
NSLog(#"%#",myArray);
for (int i = 0; i < myArray.count; i++) {
//NSLog(#"%#",myArray.count);
NSString *imageName = [NSString stringWithFormat:#"%#", i];
UIImage *image = [UIImage imageNamed:imageName];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
CGRect rect = imageView.frame;
rect.origin.x = self.scrollView.frame.size.width * i;
rect.origin.y = 0;
rect.size = scrollView.frame.size;
[self.scrollView addSubview:imageView];
}
scrollView.pagingEnabled = YES;
scrollView.showsHorizontalScrollIndicator = NO;
scrollView.showsVerticalScrollIndicator = NO;
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width *
myArray.count,scrollView.frame.size.height);
pageControl.currentPage = 0;
pageControl.numberOfPages = myArray.count;
[super viewDidLoad];
});
With NSArray colors, it's working ok, but NSArray image has some error.
scrollview don't display listimage, it show first image, anybody know why...
dispatch_async(dispatch_get_main_queue(), ^{
for (int i = 0; i < myArray.count; i++)
{
//NSString *imageName = [NSString stringWithFormat:#"%#",[myArray objectAtIndex:i]];
NSURL *urlImage = [NSURL URLWithString:[NSString stringWithFormat:#"%#",[myArray objectAtIndex:i]]];
//NSLog(#"%#",urlImage);
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:urlImage]];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
CGRect rect = imageView.frame;
rect.size.height = imgHeight;
rect.size.width = imgWidth;
imageView.frame = rect;
imageView.tag = i;
//rect.size = scrollView.frame.size;
[scrollView addSubview:imageView];
}
scrollView.pagingEnabled = YES;
scrollView.showsHorizontalScrollIndicator = NO;
scrollView.showsVerticalScrollIndicator = NO;
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width *
myArray.count,scrollView.frame.size.height);
pageControl.currentPage = 0;
pageControl.numberOfPages = myArray.count;
});

Check this line of code
NSString *imageName = [NSString stringWithFormat:#"%#", i];
You image name would be just 1, 2 etc., not the image names printed in the log,
It should be something like
[myArray objectATIndex:i];

You are using imageNamed: which can only be used for images inside your project, and if I understood your question you are trying to access them from a server. Try this UIImage method: imageWithData:
NSURL *url = [NSURL URLWithString:[myArray objectAtIndex:i]];
UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];

Related

UITableView, Its jerking while scrolling

/Problem is that, I created my own contentviews in UITableview and showing. While scrolling the table view is giving Jerking. How to resolve this issue./
[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
/ImageDetails, I am receiving from server and loading using lazy loading./
UIImageView *lblImage = [[UIImageView alloc]initWithFrame:CGRectMake(10, 10, 60, 60)];
lblImage.contentMode = UIViewContentModeScaleAspectFill;
[cell.contentView addSubview:lblImage];
if([[[lArray objectAtIndex:indexPath.row] objectForKey:#"Foto"] length] > 0){
NSURL *imageURL = [NSURL URLWithString:[[lMovikidListArray objectAtIndex:indexPath.row] objectForKey:#"MovikitFoto"]];
NSString *key = [[[lArray objectAtIndex:indexPath.row] objectForKey:#"Foto"] MD5Hash];
NSData *data = [FTWCache objectForKey:key];
if (data) {
UIImage *image = [UIImage imageWithData:data];
lblImage.image = image;
} else {
lblImage.image = [UIImage imageNamed:#"defaultprofile.png"];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
NSData *data = [NSData dataWithContentsOfURL:imageURL];
[FTWCache setObject:data forKey:key];
UIImage *image = [UIImage imageWithData:data];
dispatch_sync(dispatch_get_main_queue(), ^{
lblImage.image = image;
});
});
}
CALayer *imageLayer = lblImage.layer;
[imageLayer setCornerRadius:lblImage.frame.size.width/2];
[imageLayer setMasksToBounds:YES];
}
else{
lblImage.image = [UIImage imageNamed:#"defaultprofile.png"];
}
UILabel *lblTitle = [[UILabel alloc]initWithFrame:CGRectMake(75, 10, 220, 25)];
lblTitle.text = [NSString stringWithFormat:#"%# - %#", [[lArray objectAtIndex:indexPath.row] objectForKey:#"Name"], [[lArray objectAtIndex:indexPath.row] objectForKey:#"SimNo"]];
lblTitle.font = [UIFont boldSystemFontOfSize:14.0f];
[cell.contentView addSubview:lblTitle];
UILabel *lblSubTitle = [[UILabel alloc]initWithFrame:CGRectMake(100, 40, 195, 35)];
if([[[lArray objectAtIndex:indexPath.row] objectForKey:#"Location"] length] <= 1){
lblSubTitle.text = LOCATION_NOT_AVAILABLE;
lImageName = #"caution_icon.png";
}
else{
lblSubTitle.text = [self calculateDistance:<some data>];
}
lblSubTitle.textColor = [UIColor darkGrayColor];
lblSubTitle.numberOfLines = 2;
lblSubTitle.font = [UIFont italicSystemFontOfSize:12.0f];
[cell.contentView addSubview:lblSubTitle];
/This image is a small image to show some indicators./
UIImageView *lblIndicatorImage = [[UIImageView alloc]initWithFrame:CGRectMake(75, 45, 20, 20)];
lblIndicatorImage.image = [UIImage imageNamed:lImageName];
[cell.contentView addSubview:lblIndicatorImage];
[cell setNeedsDisplay];
You cant do any UIKit operation on background thread. So just remove your graphical operation from background thread and it will be fine.
else {
lblImage.image = [UIImage imageNamed:#"defaultprofile.png"];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
NSData *data = [NSData dataWithContentsOfURL:imageURL];
[FTWCache setObject:data forKey:key];
dispatch_async(dispatch_get_main_queue(), ^{
UIImage *image = [UIImage imageWithData:data];
lblImage.image = image;
});
});

Convert NSData To UIImage

First of all I am selecting some images in one listingstep1view and passing those UIImages other View Controller by using sharedInstance.
ListingStep1Viewcontroller:
- (void)elcImagePickerController:(ELCImagePickerController *)picker didFinishPickingMediaWithInfo:(NSArray *)info
{
[self dismissViewControllerAnimated:YES completion:nil];
for (UIView *v in [_scrollView subviews]) {
[v removeFromSuperview];
}
NSLog(#"info :%#", info);
CGRect workingFrame = _scrollView.frame;
workingFrame.origin.x = 0;
NSMutableArray *tempArray =[[NSMutableArray alloc] init];
NSMutableArray *images = [NSMutableArray arrayWithCapacity:[info count]];
for (int i =0; i<info.count; i++) {
NSDictionary *dict = [info objectAtIndex:i];
if ([dict objectForKey:UIImagePickerControllerMediaType] == ALAssetTypePhoto){
if ([dict objectForKey:UIImagePickerControllerOriginalImage])
{
UIImage* image = [dict objectForKey:UIImagePickerControllerOriginalImage];
[iPhoneXMPPAppDelegate load_uploadingImage:[image fixOrientation]];
NSData* data = UIImageJPEGRepresentation([iPhoneXMPPAppDelegate get_upload_image], 1.0f);
//NSString *encodedImage = [data base64Encoding];
[Base64 initialize];
self.convertedImage=[[UIImage alloc]initWithData:data];
//self.convertedImage=[UIImage imageWithData:data];
NSLog(#"converted Data To Image= %#",self.convertedImage);
NSString *strEncoded = [Base64 encode:data];
strEncoded = [strEncoded stringByReplacingOccurrencesOfString:#"+" withString:#"%2B"];
[tempArray addObject:strEncoded];
[images addObject:image];
UIImageView *imageview = [[UIImageView alloc] initWithImage:image];
[imageview setContentMode:UIViewContentModeScaleAspectFit];
imageview.frame = workingFrame;
[_scrollView addSubview:imageview];
workingFrame.origin.x = workingFrame.origin.x + workingFrame.size.width;
} else {
NSLog(#"UIImagePickerControllerReferenceURL = %#", dict);
}
}
else if ([dict objectForKey:UIImagePickerControllerMediaType] == ALAssetTypeVideo){
if ([dict objectForKey:UIImagePickerControllerOriginalImage]){
UIImage* image=[dict objectForKey:UIImagePickerControllerOriginalImage];
[images addObject:image];
UIImageView *imageview = [[UIImageView alloc] initWithImage:image];
[imageview setContentMode:UIViewContentModeScaleAspectFit];
imageview.frame = workingFrame;
[_scrollView addSubview:imageview];
workingFrame.origin.x = workingFrame.origin.x + workingFrame.size.width;
} else {
NSLog(#"UIImagePickerControllerReferenceURL = %#", dict);
}
} else {
NSLog(#"Uknown asset type");
}
}
self.chosenImages = images;
[[ListingStep2Model sharedInstance]setImagesAssetArray:tempArray];
//[[ListingStep2Model sharedInstance]setConvertedImage:self.convertedImage.image];
[_scrollView setPagingEnabled:YES];
[_scrollView setContentSize:CGSizeMake(workingFrame.origin.x, workingFrame.size.height)];
}
ListingStep5viewcontoller:
for (int i = 0; i < [[[ListingStep2Model sharedInstance] imagesAssetArray]count]; i++) {
NSMutableArray *images = [NSMutableArray arrayWithCapacity:[[[ListingStep2Model sharedInstance] imagesAssetArray]count]];
//UIImage*imageTodata=[[ListingStep2Model sharedInstance] convertedImage];
NSLog(#"Data Imges:%#", [[[ListingStep2Model sharedInstance] imagesAssetArray] objectAtIndex:i]);
//NSLog(#"Data Imges:%#", imageTodata);
NSDictionary *dict;
if ([dict objectForKey:UIImagePickerControllerMediaType] == ALAssetTypePhoto){
if ([dict objectForKey:UIImagePickerControllerOriginalImage])
{
{
UIImage* image = [dict objectForKey:UIImagePickerControllerOriginalImage];
[iPhoneXMPPAppDelegate load_uploadingImage:[image fixOrientation]];
NSData* data = UIImageJPEGRepresentation([iPhoneXMPPAppDelegate get_upload_image], 1.0f);
//UIImageView *imgv = [[UIImageView alloc]init];
[Base64 initialize];
NSString *strEncoded = [Base64 encode:data];
strEncoded = [strEncoded stringByReplacingOccurrencesOfString:#"+" withString:#"%2B"];
NSMutableDictionary *param = [NSMutableDictionary dictionary];
[param setObject:strEncoded forKey:[NSString stringWithFormat:#"image%d",i]];
}
} else {
NSLog(#"UIImagePickerControllerReferenceURL = %#", dict);
}
}
}
[iPhoneXMPPAppDelegate startIndicator];
NSMutableArray *totalrequest = [[NSMutableArray alloc] init];
[totalrequest addObject:param];
[RequestAndResponseHandlers helparucommonRequestAndResponseHandlerWithParam:[NSDictionary dictionaryWithObjectsAndKeys:totalrequest,#"request",nil] methodName:methodName completionHandler:^(NSDictionary *response) {
NSLog(#"Response :%#", response);
if ([[response valueForKeyPath:#"response.httpCode"] integerValue]==200) {
[[iPhoneXMPPAppDelegate appdelegate] navigateTo:[iPhoneXMPPAppDelegate publicView ]];
}
else {
[iPhoneXMPPAppDelegate alertWithTitle:#"Alert" message:#"Please try again!"];
}
[iPhoneXMPPAppDelegate stopIndicator];
[self.containerTbl reloadData];
}];
}
Output is in NSData Format:
4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAEcKADAAQAAAABAAAC9gAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs%2BEJ%2B/8AAEQgC9gRwAwERAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5%2Bv/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZ
First you need to change the Base64string to NSData and then you can easily convert to UIImage. Here are the steps:
(1) Convert Base64String to NSData using the NSData+Base64 files.
NSData *imageData = [NSData dataFromBase64String:originalString];
(2) Now you can convert the NSData to Image as follows:
UIImage *newImage = [UIImage imageWithData:imageData];

Slow for loop, loading images from a Parse query into an array

Here is my code, I am having issues with it. It works, however it takes a very long time to load. I have the code within viewDidLoad. Also the self.playedGames and self.messages are NSArrays I got from querying two other classes.
newArray = [[NSMutableArray alloc]initWithCapacity:[self.playedGames count]];
messagesArray = [[NSMutableArray alloc]initWithCapacity:[self.messages count]];
ImageArray = [[NSMutableArray alloc]initWithCapacity:[self.playedGames count]];
PFQuery *query = [PFUser query];
[query orderByDescending:#"username"];
NSArray *Userarray1 = [query findObjects];
//NSLog(#"Userarray1 = %#",Userarray1);
PFFile *imageFile = [[PFFile alloc]init];
NSURL *imageFileUrl = [[NSURL alloc]init];
NSData *imageData = [[NSData alloc]init];
for(id i in Userarray1){
userPerson = [i valueForKey:#"username"];
for(id object in self.messages){
if([[object objectForKey:#"senderName"]isEqualToString:userPerson]){
imageFile = [i objectForKey:#"profilePic"];
if(imageFile !=nil){
imageFileUrl = [[NSURL alloc] initWithString:imageFile.url];
imageData = [NSData dataWithContentsOfURL:imageFileUrl];
newImageset = [UIImage imageWithData:imageData];
PFImageView *imgVew = [[PFImageView alloc] initWithFrame:CGRectMake(4, 5, 50, 50)];
imgVew.image = newImageset;
imgVew.opaque = YES;
[messagesArray addObject:imgVew];
}
else{
UIImage *NoPP = [UIImage imageNamed:#"friends_tab.png"];
NoPP = [self imageScaledToSize:CGSizeMake(50, 50)];
PFImageView *NoPPView = [[PFImageView alloc]initWithFrame:CGRectMake(4, 5, 50, 50)];
NoPPView.image = NoPP;
NoPPView.opaque = YES;
[messagesArray addObject:NoPPView];
}
}
}
//step two
for(id object in self.playedGames){
if([[object objectForKey:#"yourName"] isEqualToString:userPerson]){
imageFile = [i objectForKey:#"profilePic"];
if(imageFile !=nil){
imageFileUrl = [[NSURL alloc] initWithString:imageFile.url];
imageData = [NSData dataWithContentsOfURL:imageFileUrl];
newImageset = [UIImage imageWithData:imageData];
PFImageView *imgVew = [[PFImageView alloc] initWithFrame:CGRectMake(4, 5, 50, 50)];
imgVew.image = newImageset;
imgVew.opaque = YES;
[ImageArray addObject:imgVew];
//NSLog(#"ImageArray = %#",ImageArray);
}
else{
UIImage *NoPP = [UIImage imageNamed:#"friends_tab.png"];
NoPP = [self imageScaledToSize:CGSizeMake(50, 50)];
PFImageView *NoPPView = [[PFImageView alloc]initWithFrame:CGRectMake(4, 5, 50, 50)];
NoPPView.image = NoPP;
NoPPView.opaque = YES;
[ImageArray addObject:NoPPView];
}
}
}
}
Two really big problems.
The [query findObjects]; is synchronous, meaning that it does not return until complete. This needs to happen in the background. Take a look at one of the findInBackground methods offered by Parse.
Within your loop, you are loading image resource from a URL by calling imageData = [NSData dataWithContentsOfURL:imageFileUrl];. Again, this is synchronous and will wait until one image is loaded before moving on to the next. These image loads need to be made asynchronous as well.
worked around it and added this
NSURL *imageFileUrl = [[NSURL alloc] initWithString:imageFile.url];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void) {
NSData *imageData = [NSData dataWithContentsOfURL:imageFileUrl];
newImageset = [UIImage imageWithData:imageData];
dispatch_sync(dispatch_get_main_queue(), ^(void) {
PFImageView *imgVew = [[PFImageView alloc] initWithFrame:CGRectMake(4, 5, 50, 50)];
imgVew.image = newImageset;
imgVew.opaque = YES;
[messagesArray addObject:imgVew];
});
loadingthesearches1 = YES;
[self ReloadTheData];
});
and it worked 90% faster

NSOperationQueue Issue

I have a code that i used as a image downloder in ios 6 but when i use same code in different application that used ios 5 it gives me error NSInvalidArgumentException', reason: '-[NSNull length]: unrecognized selector sent to instance hear is the code that i am using
[self.imageDownloadingQueue addOperationWithBlock:^{
NSURL *imageUrl = [NSURL URLWithString:ImageURL];
NSData *imageData = [NSData dataWithContentsOfURL:imageUrl];
UIImage *images = nil;
if (imageData)
images = [UIImage imageWithData:imageData];
if (images){
[self.imageCache setObject:images forKey:ImageURL];
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
// make sure the cell is still visible
imageV.image = images;
}];
}
}];
Can anybody tell me what i am doing wrong coz this code is help me a lot when downloading image separately. Thank you
PS Whole function that i am using
-(void) setScrollView:(UIScrollView *)scrollview :(NSArray *)contentArray{
int x = 0;
int i = 0;
NSString *ImageURL=#"http://www.online-image-editor.com/styles/2013/images/example_image.png";
for(NSDictionary *str in contentArray){
UIImageView *imageV = [[UIImageView alloc ] initWithFrame:CGRectMake(x, 0, 200,125)];
#try {
ImageURL = [str objectForKey:#"image"];
}
#catch (NSException * e) {
NSLog(#"Exception: %#", [e description]);
}
imageV.userInteractionEnabled = YES;
ImageTapGesture *singleTap = [[ImageTapGesture alloc] initWithTarget:self action:#selector(tapDetectedMain:)];
singleTap.newItem = str;
singleTap.currentItem = i ;
singleTap.numberOfTapsRequired = 1;
[imageV addGestureRecognizer:singleTap];
UILabel *title = [[UILabel alloc] initWithFrame:CGRectMake(x,125,200,20)];
[title setFont:[UIFont systemFontOfSize:11]];
title.numberOfLines = 2;
title.autoresizingMask = UIViewAutoresizingFlexibleHeight;
[title setBackgroundColor:[UIColor blackColor]];
[title setTextColor:[UIColor whiteColor]];
title.text = [NSString stringWithFormat:#" %#",[str objectForKey:#"title"]];
x += title.frame.size.width+2;
UIImage *cachedImage = [self.imageCache objectForKey:ImageURL];
if (cachedImage){
imageV.image = cachedImage;
}
else{
imageV.image = [UIImage imageNamed:#"vdo.png"];
[self.imageDownloadingQueue addOperationWithBlock:^{
NSURL *imageUrl = [NSURL URLWithString:ImageURL];
NSData *imageData = [NSData dataWithContentsOfURL:imageUrl];
UIImage *images = nil;
if (imageData)
images = [UIImage imageWithData:imageData];
if (images){
[self.imageCache setObject:images forKey:ImageURL];
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
// make sure the cell is still visible
imageV.image = images;
}];
}
}];
}
[scrollview addSubview:imageV];
[scrollview addSubview:title];
}
scrollview.contentSize = CGSizeMake(x, scrollview.frame.size.height);
i++;
}
You should definitely check the ImageURL you are sending into the operation. It seems, this ImageURL is [NSNull null].
If it is a local variable, is it declared as __block NSString *ImageUrl?
pls try this code:
[self.imageDownloadingQueue addOperationWithBlock:^{
NSURL *imageUrl ;
if((ImageURL!=nil)&&(![ImageURL isKindOfClass:[NSNull class]]))
{
imageUrl= [NSURL URLWithString:ImageURL];
}
NSData *imageData;
if((imageUrl!=nil)&&(![imageUrl isKindOfClass:[NSNull class]]))
{
imageData = [NSData dataWithContentsOfURL:imageUrl];
}
UIImage *images = nil;
if((imageData!=nil)&&(![imageData isKindOfClass:[NSNull class]]))
images = [UIImage imageWithData:imageData];
if((images!=nil)&&(![images isKindOfClass:[NSNull class]]))
{
[self.imageCache setObject:images forKey:ImageURL];
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
// make sure the cell is still visible
imageV.image = images;
}];
}
}];
Hope this will help you.

array of images in document directory

I have select multiple images from iPhone through ELC controller. The images are stored in array now I want to store this array of images in document directory so please help me someone..
- (void)elcImagePickerController:(ELCImagePickerController *)picker didFinishPickingMediaWithInfo:(NSArray *)info
{
if ([self respondsToSelector:#selector(dismissViewControllerAnimated:completion:)]){
[self dismissViewControllerAnimated:YES completion:nil];
} else {
[self dismissModalViewControllerAnimated:YES];
}
for (UIView *v in [_scrollView subviews]) {
[v removeFromSuperview];
}
CGRect workingFrame = _scrollView.frame;
workingFrame.origin.x = 0;
NSMutableArray *images = [NSMutableArray arrayWithCapacity:[info count]];
for(NSDictionary *dict in info) {
UIImage *image = [dict objectForKey:UIImagePickerControllerOriginalImage];
[images addObject:image];
UIImageView *imageview = [[UIImageView alloc] initWithImage:image];
[imageview setContentMode:UIViewContentModeScaleAspectFit];
imageview.frame = workingFrame;
[_scrollView addSubview:imageview];
[imageview release];
workingFrame.origin.x = workingFrame.origin.x + workingFrame.size.width;
}
self.chosenImages = images;
NSLog(#"values=%#",_chosenImages);
[_scrollView setPagingEnabled:YES];
[_scrollView setContentSize:CGSizeMake(workingFrame.origin.x, workingFrame.size.height)];
}
For each of the images in the images array, write to the file file one by one.
NSString *aDocumentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSInteger anIndex = 0;
for (UIImage *anImage in images) {
NSString *anImageName = [NSString stringWithFormat:#"%d.png", anIndex++];
NSString *anImagePath = [NSString stringWithFormat:#"%#/%#", aDocumentsDirectory, anImageName];
NSData *anImageData = UIImagePNGRepresentation(anImage);
[anImageData writeToFile:anImagePath atomically:YES];
}
2.. When you extract the Original Image, save image to file right there.
NSString *aDocumentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSInteger anIndex = 0;
for(NSDictionary *dict in info) {
UIImage *image = [dict objectForKey:UIImagePickerControllerOriginalImage];
[images addObject:image];
UIImageView *imageview = [[UIImageView alloc] initWithImage:image];
[imageview setContentMode:UIViewContentModeScaleAspectFit];
imageview.frame = workingFrame;
[_scrollView addSubview:imageview];
[imageview release];
workingFrame.origin.x = workingFrame.origin.x + workingFrame.size.width;
// Save Image
NSString *anImageName = [NSString stringWithFormat:#"%d.png", anIndex++];
NSString *anImagePath = [NSString stringWithFormat:#"%#/%#", aDocumentsDirectory, anImageName];
NSData *anImageData = UIImagePNGRepresentation(image);
[anImageData writeToFile:anImagePath atomically:YES];
}

Resources