2010-10-06 6 views
5

Estoy tratando de hacer algo que, en teoría, debería ser bastante simple, pero he estado persiguiendo mi cola durante días. Intento tomar un evento táctil de una superposición de pantalla, capturar una imagen y recortar una sección de la imagen alrededor de donde tocó el dedo.Una buena manera de usar preguntas de CGImageCreateWithImageInRect, UIImage y UIImagePickerController

Ahora todo mi código funciona bien, la superposición, los eventos, el recorte, etc. ... sin embargo, parece que el sistema de coordenadas del evento táctil no parece coincidir con el sistema de coordenadas del UIImage. He leído todos los documentos que puedo tener, no puedo entenderlo.

Mi pregunta principal es, ¿necesito tener en cuenta UIImageOrientation cuando uso CGImageCreateWithImageInRect, o el cuarzo se da cuenta? La razón por la que pregunto es que tengo una rutina muy simple que es recortar imágenes muy bien, pero la imagen recortada nunca parece estar donde se presionó mi dedo ??

La mayor parte de la rutina es:

-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
UIImage *image = =[info objectForKey:@"UIImagePickerControllerOriginalImage"]; 
float scaleX = image.size.width/SCREEN_WIDTH; 
float scaleY = image.size.height/SCREEN_HEIGHT; 
     //lastTouch is saved from touchesBegan method 
float x = (lastTouch.x * scaleX) - (CROP_WIDTH/2); 
float y = (lastTouch.y * scaleY) - (CROP_WIDTH/2); 
if(x < 0) x = 0.0; 
if(y < 0) y = 0.0; 
     CGRect cropArea = CGRectMake(x, y, CROP_WIDTH, CROP_WIDTH); 
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], cropArea); 
UIImage *swatch = [UIImage imageWithCGImage:imageRef]; 

     //at this point I'm just writing the images to the photo album to see if 
     //my crop is lining up with my touch 
     UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); 
     UIImageWriteToSavedPhotosAlbum(swatch, nil, nil, nil); 
} 

Por lo tanto, el problema es que mi superficie cultivada (tal como se ve en mi álbum de fotos) no coincide con el área real que presiono (que siempre es alguna otra parte aleatoria de la foto), lo que me hace pensar que mi sistema de coordenadas está apagado.

Cualquier puntero sería muy apreciado, incluso si solo hay punteros a algunos documentos que aún no he encontrado.

Saludos Adam

Respuesta

0

Siempre se debe recordar que coordinan el sistema por defecto es diferente entre CoreGraphics y UIKit. Mientras que UIKit comienza con su origen en la esquina superior izquierda de la ventana, CoreGraphics tiene este punto en la parte inferior izquierda. Creo que esto podría ser información suficiente para ponerlo en el camino correcto, pero solo para volver a iterar:

Puede usar este código para invertir, o voltear, su sistema de coordenadas.

CGContextTranslateCTM(graphicsContext, 0.0, drawingRect.size.height); 
CGContextScaleCTM(graphicsContext, 1.0, -1.0); 

comentario También Accionar el coordenadas predeterminado Sytem en el Drawing and Printing Guide for iOS

Cuestiones relacionadas