UIImage Größenänderung nicht richtig funktioniert
So, ich habe versucht, herauszufinden, was ich falsch mache für eine Weile jetzt, und ich kann ' T es herausfinden. Was ich versuche zu erreichen, ist diese:
- Nehmen Sie ein Foto mit
UIImagePickerController
- Die resultierende Foto-und Kulturpflanzen aus der Ober-und Unterseite, so dass es zu einem Quadrat (ähnlich wie Instagram)
- Display, das Bild innerhalb einer
UIButton
Aus irgendeinem Grund, jedes mal, wenn ich das Foto landet es verzerrt in die UIButton
und es scheint, als ob der Film nicht richtig funktioniert hat. Hier ist, was ich Tue. Innerhalb der didFinishPickingMediaWithInfo
Methode habe ich den folgenden code:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
//Copy the image to the userImage variable
[picker dismissModalViewControllerAnimated:YES];
userImage = nil;
//Rotate & resize image
userImage = [self resizeAndRotatePhoto:(UIImage *)[info objectForKey:UIImagePickerControllerOriginalImage]];
NSLog(@"Userimage size, width: %f , height: %f", userImage.size.width , userImage.size.height);
//Update the image form field with the image and set the image in the controller
NSLog(@"Button size is height: %f , width: %f" , userImageAvatarButton.frame.size.height , userImageAvatarButton.frame.size.width);
[userImageAvatarButton.layer setMasksToBounds:YES];
[userImageAvatarButton.layer setCornerRadius:3.0];
[userImageAvatarButton setImage:userImage forState:UIControlStateNormal];
}
Ist, werde ich die resizeAndRotatePhoto Methode momentan, aber das Ergebnis ist unten. Auch in den obigen code @property (strong) (UIImage *)userImage;
definiert wird, in der ViewController header-Datei. Die log-Ausgabe auch Ergebnisse, in:
2012-05-07 17:38:07.995 NewApp[10666:707] Userimage size, width: 1936.000000 , height: 1936.000000
2012-05-07 17:38:08.000 NewApp[10666:707] Button size is height: 60.000000 , width: 60.000000
Wie Sie sehen im Bild unten, landet es verzerrt.
Als für die resizeAndRotate Methode, hier ist er:
- (UIImage *)resizeAndRotatePhoto:(UIImage *)source
{
if( source.imageOrientation == UIImageOrientationRight )
{
source = [self rotateImage:source byDegrees:90];
}
if( userImage.imageOrientation == UIImageOrientationLeft)
{
source = [self rotateImage:source byDegrees:-90];
}
CGFloat x,y;
CGFloat size;
if( source.size.width > source.size.height ){
size = source.size.height;
x = (source.size.width - source.size.height)/2;
y = 0;
}
else {
size = source.size.width;
x = 0;
y = (source.size.height - source.size.width)/2;
}
CGImageRef imageRef = CGImageCreateWithImageInRect([source CGImage], CGRectMake(x,y,size,size) );
return [UIImage imageWithCGImage:imageRef];
}
In diesem Punkt habe ich keine Idee, wie man dieses Bild zu zeigen, bis unverzerrt. Es scheint zu beschneiden, das ist falsch und die Anzeige falsch, obwohl das system sagt, dass das Bild ist in der Tat ein Quadrat.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hab ich aufgegeben, die vocaro.com Lösung aus anderen Gründen (diese Lösung würde Abstürzen, wenn verwendet mit atypischen Bild-Formate, wie z.B. CMYK).
Sowieso, ich verwende jetzt die
imageByScalingAspectFillSize
- Methode der folgendenUIImage
Kategorie zu machen, meine quadratischen thumbnails.Durch die Art und Weise, diese gilt automatisch der Maßstab der Hauptbildschirm des Geräts (z.B.
UIButton
- Taste, die ist 60x60 Punkte auf einem Retina-Gerät, das wird gelten, dass die Skala von 2x (oder 3x), D. H. ein 120x120 oder 180x180 Bild).UIImage+SimpleResize.h:
UIImage+SimpleResize.m: