iPhone'da instagram gibi bazı görüntü filtresi özelliklerini denemek isterim. Fotoğraf makinesini rulodan almak için imagePickerController kullanıyorum. ImagePickerController tarafından döndürülen görüntünün belleği kurtarmak için azaltıldığını anlıyorum. Orijinal görüntüyü bir UIImage'a yüklemek akıllıca değildir. Ancak görüntüyü nasıl işleyebilirim ve orijinal piksel olarak nasıl kaydedebilirim? iPhone 4S'yi geliştirme cihazım olarak kullanıyorum.Fotoğraf makinesi rulosundaki kareler nasıl kesilir?
kamera rulo orijinal fotoğraftır 3264 * 2448.
UIImagePickerControllerOriginalImage görüntü dönüş * 1440 1920
UIImagePickerControllerEditedImage görüntü dönüş 640 * 640
imageViewOld (UIImagePickerControllerCropRect [kullanmaktır 80,216,1280,1280] görüntü dönüşünü UIImagePickerControllerOriginalImage ile kırpmak için) 1280 * 1224
imageViewNew (çift boyutlu UIImagePickerControll kullan) erCropRect [80,216,2560,2560]) UIImagePickerControllerOriginalImage görüntü dönüşünü kırpmak için 1840 * 1224.
Ben
Benim sorular * 1280 1280 olan bir instagram tarafından devam aynı fotoğraf kontrol etmektir:
- UIImagePickerControllerOriginalImage neden "Orijinal" fotoğrafı döndürmüyor? Neden 1920 * 1440'a düşürdü?
Neden UIImagePickerControllerEditedImage, resmi 1280 * 1280 ile döndürmez?
UIImagePickerControllerCropRect'in gösterdiği gibi 1280 * 1280 kare kesiliyor mu?2448 * 2448 resmi olmak için orijinal fotoğrafa kare kesimi nasıl yapabilirim?
Şimdiden teşekkürler. Aşağıda benim kodudur:
Eğer UIImagePickerController bazen 640x640 bazen 320x320 (cihaz bağlı) bir küçültülmüş Düzenlenen resim döndürür de gözlemlediği gibi- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:@"public.image"])
{
UIImage *imageEdited = [info objectForKey:UIImagePickerControllerEditedImage];
UIImage *imagePicked = [info objectForKey:UIImagePickerControllerOriginalImage];
CGRect cropRect;
cropRect = [[info valueForKey:@"UIImagePickerControllerCropRect"] CGRectValue];
NSLog(@"Original width = %f height= %f ",imagePicked.size.width, imagePicked.size.height);
//Original width = 1440.000000 height= 1920.000000
NSLog(@"imageEdited width = %f height = %f",imageEdited.size.width, imageEdited.size.height);
//imageEdited width = 640.000000 height = 640.000000
NSLog(@"corpRect %f %f %f %f", cropRect.origin.x, cropRect.origin.y , cropRect.size.width, cropRect.size.height);
//corpRect 80.000000 216.000000 1280.000000 1280.000000
CGRect rectNew = CGRectMake(cropRect.origin.x, cropRect.origin.y , cropRect.size.width*2, cropRect.size.height*2);
CGRect rectOld = CGRectMake(cropRect.origin.x, cropRect.origin.y , cropRect.size.width, cropRect.size.height);
CGImageRef imageRefNew = CGImageCreateWithImageInRect([imagePicked CGImage], rectNew);
CGImageRef imageRefOld = CGImageCreateWithImageInRect([imagePicked CGImage], rectOld);
UIImageView *imageViewNew = [[UIImageView alloc] initWithImage:[UIImage imageWithCGImage:imageRefNew]];
CGImageRelease(imageRefNew);
UIImageView *imageViewOld = [[UIImageView alloc] initWithImage:[UIImage imageWithCGImage:imageRefOld]];
CGImageRelease(imageRefOld);
NSLog(@"imageViewNew width = %f height = %f",imageViewNew.image.size.width, imageViewNew.image.size.height);
//imageViewNew width = 1840.000000 height = 1224.000000
NSLog(@"imageViewOld width = %f height = %f",imageViewOld.image.size.width, imageViewOld.image.size.height);
//imageViewOld width = 1280.000000 height = 1224.000000
UIImageWriteToSavedPhotosAlbum(imageEdited, nil, nil, NULL);
UIImageWriteToSavedPhotosAlbum([imageViewNew.image imageRotatedByDegrees:90.0], nil, nil, NULL);
UIImageWriteToSavedPhotosAlbum([imageViewOld.image imageRotatedByDegrees:90.0], nil, nil, NULL);
//assign the image to an UIImage Control
self.imageV.contentMode = UIViewContentModeScaleAspectFit;
self.imageV.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.width);
self.imageV.image = imageEdited;
}
[self dismissModalViewControllerAnimated:YES];
}
Evet! Çalışıyor! UIImagePickerController'ın neden kamera rulosunda orijinal görüntüyü vermediğini söyler misiniz? – user1486413
Akıl yürütmenin arkasında ne olduğundan emin değilim. Kamera ile fotoğraf çekerken kesinlikle tam çözünürlükte bir versiyon aldığınızı gözlemledim. Eğer tam çözünürlükte sürümü almak gerekiyorsa, bunu almak için 'ALAssetLibrary' sınıflarıyla birlikte' UIImagePickerControllerReferenceURL' kullanabiliriz. Bu çerçeveyi kullanmak, orijinal görseller coğrafi etiketli olacağından kullanıcılarınızın konumlarına erişme izni vermelerini ister. –
Ayrıca .. daha sanely dönüşünü işlemek için kod güncellenir ve kırpma rect kare olmadığı zaman da bile kare görüntü elde kolları. Umarım yardımcı olur. –