2010-06-30 17 views
19

Görüntüyü hareketli grafikten almak için aşağıdaki kodu kullanıyorum. Ve iPhone 4 (HD sürümü) dışında her yerde iyi çalışıyor.iPhone 4 (HD) için CGImageCreateWithImageInRect nasıl kullanılır?

- (UIImage *)croppedImage:(CGRect)rect { 
    CGImageRef image = CGImageCreateWithImageInRect([self CGImage], rect); 
    UIImage *result = [UIImage imageWithCGImage:image]; 
    CGImageRelease(image); 
    return result; 
} 

iPhone 4 otomatik görüntü ([email protected]) HD sürümünü yerine sprite.png yükleyin. Orijinal görüntünün 2 ölçeği vardır, ancak ortaya çıkan görüntünün 1 ölçek ve yanlış boyutu vardır.

Bu davranış, iPhone 3G [s] ve iPhone 4 için farklı ölçekler dikkate alınarak nasıl ele alınır?

Bu document okudum ama kullanım CGImageCreateWithImageInRect hakkında burada hiçbir şey söylüyor.

+0

Cevabıma bakabilirseniz çok ilgilenirim. Eminim istediğimizi elde etmenin daha iyi bir yolu vardır. Ama buradaki doğru cevap bana göre değil. Rect çevirisinin üstündeki kodu + ile kullanabilir ve işe yarayıp yaramadığını görebilir misiniz? – Daniel

cevap

32

CGImageCreateWithImageInRect öğesinden doğru şeyi yapacağımı söyleyebilirim. Ne değiştirmek gerekir

http://developer.apple.com/iphone/library/documentation/uikit/reference/UIImage_Class/Reference/Reference.html#//apple_ref/occ/clm/UIImage/imageWithCGImage:scale:orientation initilization UIImage geçerli:

Değişim o [UIImage imageWithCGImage:image scale:self.scale orientation:self. imageOrientation] için ve sadece iyi çalışması gerekir. (bunun, göründüğü gibi UIImage üzerinde bir kategori olduğu varsayılmaktadır)

+3

Teşekkür ederim. Bu işlevi özledim. Ayrıca, kaynak görüntü rekt'ını self.scale ile çarpmam gerekiyor. – Victor

+2

Teşekkürler. Bu beni saatlerce kurtardı :-) Ayrıca: Sonuçların düzgün görünmesi için ölçek faktörünü kırpma doğrultusu boyutlarına çarptırmam gerekiyordu. – esbenr

+1

Evet, rect ile çarpmak sadece "doğru şeyi yapmalı" bir şey için garip bir çözüm gibi görünüyor. Anahtar ölçek, cevapta sözü edilen bu yöntem değildir. – Daniel

14

Kırpma rectini görüntü ölçeği ile çarpmalısınız. Deneyimlerime göre, farklı bir görsel başlatmayı kullanmak gereksizdir.

- (UIImage *)_cropImage:(UIImage *)image withRect:(CGRect)cropRect 
{ 
    cropRect = CGRectMake(cropRect.origin.x * image.scale, 
          cropRect.origin.y * image.scale, 
          cropRect.size.width * image.scale, 
          cropRect.size.height * image.scale); 

    CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], cropRect); 

    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef]; 

    CGImageRelease(imageRef); 

    return croppedImage; 
} 
+0

Bu eserleri buluyorum ve yukarıda yok. Muhtemelen Apple uygulamaları değiştiriyor ... –

+0

Eylül 2016 itibariyle çalışmıyor – joey

İlgili konular