SORU
2 Mart 2009, PAZARTESİ


Uİİmage: yeniden Boyutlandırma, Kırpma sonra

Kelimenin tam anlamıyla gün için bu bir yüzüm şimdi dayak oldum ve vahiy kenarında haklı olduğumu sürekli hissediyorum rağmen, ben sadece benim hedefe ulaşmak olamaz.

Düşündüm, ileride zaman içinde kavramsal aşamadan tasarımım, bu önemsiz bir konu için kapmak bir görüntüden iPhone kamera veya kütüphane, ölçek için belirtilen yükseklik, kullanarak bir fonksiyon eşittirYönü DoldurunUİİmageView (tamamen kod) seçeneğini ve sonraürün kapalıher şey geçti bir CGRect sığmadı.

Kamera veya kitaplıktan orijinal görüntü almak, önemsiz. Diğer iki adımı olduğunu kanıtladı ne kadar şok oldum.

Ekteki görüntü elde etmeye çalışıyorum ne olduğunu gösterir. Birisi elimi tutmak için yeterince nazik olabilir misiniz? Bulduğum her kod örneği, şu ana kadar resmi şut, ters, berbat görünüyorsun, sınırları çizmek, ya da aksi takdirde sadece düzgün çalışmıyor gibi görünüyor.

CEVAP
3 Mart 2009, Salı


Bir kez tırmandı, ve her bir son ürün o zaman uyan, aynı şey benim durumumda, boyut almaya genişliği gerisini uyum için gerekli. (Yatay çalışıyorum, bu yüzden portre modunda herhangi bir eksiklik fark etmiş olabilir.) Burada benim kanunum - Uİİmage bir categeory bir parçası. Şifremi hedef boyutu her zaman cihazın tam ekran boyutu ayarlanır.

@implementation UIImage (Extras)

#pragma mark -
#pragma mark Scale and crop image

- (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize
{
    UIImage *sourceImage = self;
    UIImage *newImage = nil;    
    CGSize imageSize = sourceImage.size;
    CGFloat width = imageSize.width;
    CGFloat height = imageSize.height;
    CGFloat targetWidth = targetSize.width;
    CGFloat targetHeight = targetSize.height;
    CGFloat scaleFactor = 0.0;
    CGFloat scaledWidth = targetWidth;
    CGFloat scaledHeight = targetHeight;
    CGPoint thumbnailPoint = CGPointMake(0.0,0.0);

    if (CGSizeEqualToSize(imageSize, targetSize) == NO) 
    {
        CGFloat widthFactor = targetWidth / width;
        CGFloat heightFactor = targetHeight / height;

        if (widthFactor > heightFactor) 
        {
            scaleFactor = widthFactor; // scale to fit height
        }
        else
        {
            scaleFactor = heightFactor; // scale to fit width
        }

        scaledWidth  = width * scaleFactor;
        scaledHeight = height * scaleFactor;

        // center the image
        if (widthFactor > heightFactor)
        {
            thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; 
        }
        else
        {
            if (widthFactor < heightFactor)
            {
                thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
            }
        }
    }   

    UIGraphicsBeginImageContext(targetSize); // this will crop

    CGRect thumbnailRect = CGRectZero;
    thumbnailRect.origin = thumbnailPoint;
    thumbnailRect.size.width  = scaledWidth;
    thumbnailRect.size.height = scaledHeight;

    [sourceImage drawInRect:thumbnailRect];

    newImage = UIGraphicsGetImageFromCurrentImageContext();

    if(newImage == nil)
    {
        NSLog(@"could not scale image");
    }

    //pop the context to get back to the default
    UIGraphicsEndImageContext();

    return newImage;
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • cosmicrocketman

    cosmicrocket

    17 NİSAN 2006
  • karneson

    karneson

    23 Temmuz 2006
  • Kevin Bruckert

    Kevin Brucke

    30 Aralık 2006