'dan bir UIImage resmini nasıl yansıtabilirim Bir görüntüyü yansıtmanın herhangi bir yolu olup olmadığını anlamaya çalışıyorum. Örneğin, birisinin yüzünün resmini çek ve sonra ikiye böldü ve her bir tarafın aynalanmış yüzüyle nasıl göründüğünü göster. CGAffineTransform işlevlerinde böyle bir hile yok gibi görünüyor. Grafik uzmanları lütfen yardım edin!UIImagePickerController
cevap
Buradaki temel "hile", X veya Y ekseni hakkında -1 katsayısı ile bir ölçekleme dönüşümü kullanmaktır.
CGAffineTransform transform = CGAffineTransformScale(transform, -1, 1);
Sonra atanan resmi çevirmek için UIImageView
üzerinde transform
özelliğini ayarlayabilir veya yapmak dönüşümü başka bir ile bitiştirmek: Örneğin, bir "yatay eksen etrafında çevrilmesi" oluşturmak için bu kullanabilirsiniz dönüşümü daha sofistike efektler. Tanımladığınız tam etkiyi elde etmek için, orijinal görüntünüzü bir içeriğe çekmek için bazı özel çizim kodları yazmanız, ardından üstündeki ters yüzün üzerine gelmeniz gerekebilir. Bu Çekirdek Grafikte nispeten basittir.
sadece outrageously uzun switch deyimi ile neden rahatsız 4.0+
UIImageOrientation flippedOrientation = UIImageOrientationUpMirrored;
switch (image.imageOrientation) {
case UIImageOrientationUp: break;
case UIImageOrientationDown: flippedOrientation = UIImageOrientationDownMirrored; break;
// ...
}
UIImage * flippedImage = [UIImage imageWithCGImage:image.CGImage scale:image.scale orientation:flippedOrientation];
Sen düşünebilir, destekleme planlıyorsanız?
? UIImage *flip = [UIImage imageWithCGImage:image.CGImage
? scale:image.scale
? orientation:(image.imageOrientation + 4) % 8];
Ve numaralama bakmak eğer modüler aritmetik yapacağını görebilirsiniz:
typedef NS_ENUM(NSInteger, UIImageOrientation) {
UIImageOrientationUp, // default orientation
UIImageOrientationDown, // 180 deg rotation
UIImageOrientationLeft, // 90 deg CCW
UIImageOrientationRight, // 90 deg CW
UIImageOrientationUpMirrored, // as above but image mirrored along other axis. horizontal flip
UIImageOrientationDownMirrored, // horizontal flip
UIImageOrientationLeftMirrored, // vertical flip
UIImageOrientationRightMirrored, // vertical flip
};
Ama bu kodu çok zeki. Bunun yerine açık bir anahtar deyimiyle bir işlev yazmalısınız. Örneğin.
UIImageOrientation mirroredImageOrientation(UIImageOrientation orientation) {
switch(orientation) {
case UIImageOrientationUp: return UIImageOrientationUpMirrored;
case UIImageOrientationDown: return UIImageOrientationDownMirrored;
case UIImageOrientationLeft: return UIImageOrientationLeftMirrored;
case UIImageOrientationRight: return UIImageOrientationRightMirrored;
case UIImageOrientationUpMirrored: return UIImageOrientationUp;
case UIImageOrientationDownMirrored: return UIImageOrientationDown;
case UIImageOrientationLeftMirrored: return UIImageOrientationLeft;
case UIImageOrientationRightMirrored: return UIImageOrientationRight;
default: return orientation;
}
}
Ve böyle işlevini kullanın: Ben şüpheli, kötü kokulu kodunu belirtmek için soru işaretleri ekledik
UIImage *flip = [UIImage imageWithCGImage:image.CGImage
scale:image.scale
orientation:mirroredImageOrientation(image.imageOrientation)];
kullanıyorum. Cevabınız iyi görünüyorsa, aslında her durumda değil. , ör. Yatay çevirme yapmak istiyorsanız ancak görüntü yöneliminiz doğruysa, LeftMirrored yapmalısınız, çünkü RightMirrored dikey çevirme yapacaktır. – AncAinu
Yansıtılmamış yansıtılmış görünümden yansıtmak, görüntüyü yatay olarak yansıtır, koltuğunuzda oturduğunuz bakış açısıyla. (Doğru görüyorsunuz ki, görüntünün perspektifinden enumdaki ek açıklamalara göre dönecektir.) Yüzler doğru yönde (görüntünün başının tepesine) yönlendiriliyorsa, tüm dönüşümler yansıtılmamış olarak aynen bu yüzü yatay olarak çevirecektir (yani dikey eksende). UIImageOrientation belgeleri: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIImage_Class/#//apple_ref/c/tdef/UIImageOrientation. – sabalaba
Açık bir anahtar ifadesi kullanmanızı önermek için cevabımı düzenledim. Yolda ne olacağını kim bilebilir? Belki Apple, enumun sırasını değiştirir, bu durumda modüler aritmetik versiyon yanlış olur. – sabalaba
'a benzer. Yukarıdaki cevapların hiçbiri, görüntünün yarısını yansıtmayan, resmin tamamını yansıtmayan soruya cevap vermez.
(UIImage *) horizontalMirror {
UIImageOrientation flippedOrientation = UIImageOrientationUpMirrored;
switch (self.imageOrientation) {
case UIImageOrientationUp: break;
case UIImageOrientationDown: flippedOrientation = UIImageOrientationDownMirrored; break;
}
UIImage * flippedImage = [UIImage imageWithCGImage:self.CGImage scale:1.0 orientation:flippedOrientation];
CGImageRef inImage = self.CGImage;
CGContextRef ctx = CGBitmapContextCreate(NULL,
CGImageGetWidth(inImage),
CGImageGetHeight(inImage),
CGImageGetBitsPerComponent(inImage),
CGImageGetBytesPerRow(inImage),
CGImageGetColorSpace(inImage),
CGImageGetBitmapInfo(inImage)
);
CGRect cropRect = CGRectMake(flippedImage.size.width/2, 0, flippedImage.size.width/2, flippedImage.size.height);
CGImageRef TheOtherHalf = CGImageCreateWithImageInRect(flippedImage.CGImage, cropRect);
CGContextDrawImage(ctx, CGRectMake(0, 0, CGImageGetWidth(inImage), CGImageGetHeight(inImage)), inImage);
CGAffineTransform transform = CGAffineTransformMakeTranslation(flippedImage.size.width, 0.0);
transform = CGAffineTransformScale(transform, -1.0, 1.0);
CGContextConcatCTM(ctx, transform);
CGContextDrawImage(ctx, cropRect, TheOtherHalf);
CGImageRef imageRef = CGBitmapContextCreateImage(ctx);
CGContextRelease(ctx);
UIImage *finalImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return finalImage;
}
Teşekkür etti – ChanWarde
- 1. UIImagePickerController
- 2. Fotoğrafların UIImagePickerController
- 3. Neden UIImagePickerController
- 4. UIImagePickerController multiple select
- 5. dismissviewcontrolleranimated tamamlama UIImagePickerController
- 6. Film için UIImagePickerController Öğe
- 7. UIImagePickerController, Apple Dokümantasyonundan didFinishPickingMediaWithInfo
- 8. UIImagePickerController temsilci uyarısı
- 9. Swift - UIImagePickerController Camera
- 10. UIImagePickerController bazen kamera görüntüsünü başlatmayacak
- 11. UIImage öğesinin URL'sini alma UIImagePickerController
- 12. UIImagePickerController, Video sıkıştırılıyor sıkıştı Video
- 13. UIImagePickerController Önizleme durumu nasıl belirlenir?
- 14. UIImagePickerController için HDR Seçeneğini Etkinleştir
- 15. UIImagePickerController - Maksimum video süresinin ayarlanması
- 16. UIImagePickerController Fotoğraf Makinesinden Fotoğraf Çekmek - Varsayılan - kare
- 17. Özel iPhone kamera denetimleri (UIImagePickerController kullanılmıyor)
- 18. UIImagePickerController her zaman pics 640x640 image
- 19. iOS7 UIImagePickerController allowsEditing someViewController olarak doğru
- 20. iPhone - UIImagePickerController -> görüntüyü uygulama klasörüne kaydet
- 21. UIImagePickerController bana bir siyah önizleme veriyor
- 22. UIImagePickerController kütüphaneden alınan videonun küçük resmi
- 23. UIImagePickerController özel durumu: "Kaynak türü UIImagePickerControllerSourceTypeCamera" olmalıdır
- 24. Kuvvet UIImagePickerController Kare Görüntü Kırpmak İçin
- 25. Video çekimi nasıl devre dışı bırakılır UIImagePickerController
- 26. UIImagePickerController kamerada kütüphane düğmesini göstermenin kolay yolu
- 27. Video sıkıştırmayı kullanarak video sıkıştırmayı engelleyin uiimagepickercontroller
- 28. UIImagePickerController:> 1 fotoğraf nasıl çekilir?
- 29. UIImagePickerController kırpması için minimum yakınlaştırma düzeyini ayarlama
- 30. UIImagePickerController ile video boyutları nasıl ayarlanır?
veya CGAffineTransformMakeScale yani picker.cameraViewTransform = CGAffineTransformMakeScale kullanımı (-1, 1) // hızlı – khunshan
Mükemmel: çözüm karıştırma Örneğin UIImage + Yansıtma gibi bir kategori olarak kullanabilir, aşağıdaki örnek fonksiyonuna yol açar! Ben myImageView.transform = CGAffineTransformMakeScale (-1, 1); ' –