2012-05-25 20 views
5

Próbuję przyciąć obraz przez moją niestandardową przycinarkę. Nie z poziomu UIImagePickerController. Teraz za to jestem przedstawiający obraz przechwycony z obrazka Picker w UIImgeView przez obsługę delegata UIImagePicker za:Konwersja UIImage na CGImage powoduje obrót obrazu Image

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo { 
    imvOriginalImage.image = image; 
} 

ucięcie muszę konwertować ten obraz do CGImageRef. Obraz zostanie przechwycony w trybie portretu. Teraz, kiedy konwertuję ten obraz w orientacji obrazu CGImageRef, zmieniaj się. Nawet jeśli mogę użyć następujących:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo { 
    //imvOriginalImage.image = image; 
    CGImageRef imgRef = [image CGImage]; 
    UIImage *img = [UIImage imageWithCGImage:imgRef]; 
    [imvOriginalImage setImage:img]; 

}

Orientacja obrazu ulegają zmianie. Dzieje się tak tylko w przypadku obrazów wykonanych w trybie portretu. Obrazy krajobrazowe nie mają tego problemu.

  1. Dlaczego tak się dzieje?
  2. Jak rozwiązać ten problem?

Dzięki Wcześniej.

+1

To dlatego, że '' UIImage' ma właściwość imageOrientation', który wie o obracanie obrazów, ale 'CGImageRef' nie wie o tym. –

Odpowiedz

4

Jest to, że kamera iPhone obraca obraz w porównaniu z przyciskiem Home. Używa ona EXIF, czyli meta danych obrazu. Zobacz ten wątek:

iPhone image rotation