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:

  1. Nehmen Sie ein Foto mit UIImagePickerController
  2. Die resultierende Foto-und Kulturpflanzen aus der Ober-und Unterseite, so dass es zu einem Quadrat (ähnlich wie Instagram)
  3. 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.

UIImage Größenänderung nicht richtig funktioniert

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.

InformationsquelleAutor Nick ONeill | 2012-05-08
Schreibe einen Kommentar