2010-12-18 10 views
10

Ich möchte ein Unterbild von einem UIImage greifen. Ich habe mich nach einer ähnlichen Frage umgesehen, ohne Erfolg.Zurückgeben eines Unterbilds von einem UIImage

Ich kenne die Pixelanzahl, die ich erfassen möchte - wie kann ich dieses Unterbild von einem vorhandenen Bild zurückgeben?

Antwort

25

sollten Diese helfen: http://iphonedevelopment.blogspot.com/2010/11/drawing-part-of-uiimage.html

Dieser Codeausschnitt ist eine Kategorie von UIImage zu schaffen, sondern der Code einfach eine Kategorie, ohne sie arbeiten zu geändert werden sollte.

Ein kürzerer Weg, um die gleiche Sache zu tun ist, um den folgend:

CGRect fromRect = CGRectMake(0, 0, 320, 480); // or whatever rectangle 

CGImageRef drawImage = CGImageCreateWithImageInRect(image.CGImage, fromRect); 
UIImage *newImage = [UIImage imageWithCGImage:drawImage]; 
CGImageRelease(drawImage); 

hoffte, das hilft!

+0

Auf diese Weise unter Haupt-Thread ausgeführt werden soll, ist es kein Thread-sichere Methode. – AechoLiu

+0

Dies funktioniert nicht für Retina - Geräte, da es das Rohbild und nicht die Darstellung im Retina - Bildschirm schneidet (dh wenn 320x480 das normale und 640x960 die Retina - Auflösung des Originalbildes ist, ist das CGRect mit (0, 0 , 320, 480) würde das obere linke Viertel des Bildes ausschneiden, wenn es sich auf der Netzhaut befindet) – ohcibi

+4

@ohcibi Um dies auch mit der Netzhaut zu tunen, müssen Sie den Skalierungsfaktor des Bildes ('image.scale') anwenden es auf das rect (multiplizieren Sie alle numerischen Werte mit diesem Faktor) und verwenden Sie beim Erstellen des endgültigen 'UIImage' die Methode' imageWithCGImage: scale: orientation: ', um den korrekten Skalierungsfaktor erneut einzustellen. – Mecki

3

Aktualisiert @donkim Antwort für eine schnelle 3:

let fromRect=CGRect(x:0,y:0,width:320,height:480) 
    let drawImage = image.cgImage!.cropping(to: fromRect) 
    let bimage = UIImage(cgImage: drawImage!) 
Verwandte Themen