2010-12-18 13 views
10

Quiero tomar una subimagen de un UIImage. He buscado una pregunta similar en vano.Devolver una subimagen de un UIImage

Conozco el rango de píxeles que quiero capturar: ¿cómo puedo devolver esta subimagen desde una imagen existente?

Respuesta

25

Esto debería ayudar: http://iphonedevelopment.blogspot.com/2010/11/drawing-part-of-uiimage.html

Este fragmento de código es la creación de una categoría de UIImage pero el código debe ser modificado fácilmente para trabajar sin que sea una categoría.

Un camino más corto para hacer la misma cosa es la siguiente:

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

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

Espero que esto ayude!

+0

De esta manera debe funcionar bajo hilo principal, no es un método seguro para subprocesos. – AechoLiu

+0

Esto no funcionará para dispositivos retina, ya que cortará la imagen cruda y no la representación en la pantalla retina (es decir, si 320x480 es la resolución normal y 640x960 retina de la imagen original, el CGRect con (0, 0 , 320, 480) cortaría el cuarto superior izquierdo de la imagen cuando está en la retina) – ohcibi

+4

@ohcibi Para hacer que esta unidad también funcione con la retina, debe obtener el factor de escala de la imagen ('image.scale'), aplicar al rect (multiplique todos los valores numéricos por ese factor) y al crear el 'UIImage' final, use el método' imageWithCGImage: scale: orientation: 'para establecer el factor de escala correcto nuevamente. – Mecki

3

Actualizado respuesta rápida para @donkim 3:

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