2012-09-05 14 views
5
- (UIImage *)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect 
{ 
    CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], rect); 
    UIImage *cropped = [UIImage imageWithCGImage:imageRef]; 
    CGImageRelease(imageRef); 
    return cropped; 
} 

Używam tego kodu. Proszę podać kilka rozwiązań. Dzięki za toWykadrowanie obrazu nieprawidłowo działa w systemie iOS 6.0. Dobrze działa w symulatorze.

+0

przykładowe kody i samouczki .... http://developer.apple.com/library/mac/#/legacy/mac/library/samplecode/Cropped_Image/Introduction/Intro.html http: //www.icodeblog. com/2010/10/14/working-with-uigesturerecognizers/http://stackoverflow.com/questions/7950719/how-to-crop-the-image-in-iphone http://www.samwirch.com/blog/cropping-and-resizing-images-camera-ios-and-objective-c http://mobiledevelopertips.com/graphics/how-to-crop-an-image.html – Ayaz

Odpowiedz

4

nie obsługuje poprawnie orientacji obrazu. Istnieje wiele dziwnych i wspaniałych technik uprawy w sieci, w tym gigantyczne instrukcje switch/case (zobacz linki w odpowiedzi Ayaza), ale jeśli pozostaniesz na poziomie UIKit i użyjesz tylko metod na samym UIImage, aby zrobić rysunek, wszystkie najważniejsze szczegóły są dla ciebie zadbane.

Poniższa metoda jest tak proste, jak można dostać się i działa we wszystkich przypadkach, że mam napotkanych:

- (UIImage *)imageByCropping:(UIImage *)image toRect:(CGRect)rect 
{ 
    if (UIGraphicsBeginImageContextWithOptions) { 
     UIGraphicsBeginImageContextWithOptions(rect.size, 
               /* opaque */ NO, 
               /* scaling factor */ 0.0); 
    } else { 
     UIGraphicsBeginImageContext(rect.size); 
    } 

    // stick to methods on UIImage so that orientation etc. are automatically 
    // dealt with for us 
    [image drawAtPoint:CGPointMake(-rect.origin.x, -rect.origin.y)]; 

    UIImage *result = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return result; 
} 

Możesz zmienić wartość opaque argumentu jeśli nie trzeba przejrzystość.

+0

Dziękujemy za odpowiedź. Działa to również dla mojego starego kodu źródłowego. Mój problem polega na tym, że obraz przycinania jest o wiele bardziej przybliżony i niewyraźny, problem ten wystąpił tylko na urządzeniu. Każdy inny pomysł, życzliwie mi pomoże. – Mani

+0

To brzmi jak problem ze skalą siatkówki. Wysłany przeze mnie kod będzie wykorzystywał skalę ekranu w wynikowym obrazie, ale musisz uważać, aby prostokąt przycinający był w punktach, a nie pikselach. –

+0

Jak przekazywać piksele. czy możesz wyjaśnić, proszę, nie rozumiejąc swojej odpowiedzi. Jak radzić sobie z problemem przycinania ekranu siatkówki. – Mani

Powiązane problemy