B-Sides / ELCImagePickerController

A clone of the UIImagePickerController using the Assets Library Framework allowing for multiple asset selection
http://www.icodeblog.com
1.65k stars 469 forks source link

Retina display problem #23

Closed abiaad closed 11 years ago

abiaad commented 12 years ago

I'm using ELCImagePickerController for my application. This is great but compared to the original picker controller it seems that the image saved is not retina ready. I compared two images and the one from ELCImagePicker is a bit pixeled ...

Here's the code that is getting the UIImage :

for(ALAsset *asset in _assets) {

        NSMutableDictionary *workingDictionary = [[NSMutableDictionary alloc] init];
        [workingDictionary setObject:[asset valueForProperty:ALAssetPropertyType] forKey:@"UIImagePickerControllerMediaType"];
        [workingDictionary setObject:[UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]] forKey:@"UIImagePickerControllerOriginalImage"];
        [workingDictionary setObject:[[asset valueForProperty:ALAssetPropertyURLs] valueForKey:[[[asset valueForProperty:ALAssetPropertyURLs] allKeys] objectAtIndex:0]] forKey:@"UIImagePickerControllerReferenceURL"];

        [returnArray addObject:workingDictionary];

        [workingDictionary release];    
    }

Do you know how can I do to correctly render my images (for retina) ? I tried to change - fullScreenImage property to - fullResolutionImage but the result is insanely huge (400 ko to 1 Mo for a photo). Thanks for your help !

brutella commented 11 years ago

Be sure that when you scale down the image in your code to use the dimension * 2 on retina devices.

Eg. When you want to show an image in a 40x40 view, you should scale the image down to 80x80 on retina devices and add it to a 40x40 sized image view.

jvanmetre commented 11 years ago

Changing the scale part of the following to [UIScreen mainScreen].scale should fix this. This is also done in commit: 3894cf283e6e114e080ad5ed5bb3e8fd8d0962a1 Change: UIImage *img = [UIImage imageWithCGImage:imgRef scale:assetRep.scale orientation:(UIImageOrientation)assetRep.orientation];

To be: UIImage *img = [UIImage imageWithCGImage:imgRef scale:[UIScreen mainScreen].scale orientation:(UIImageOrientation)assetRep.orientation];