2010-10-06 4 views
5

Sto provando a fare qualcosa che in teoria dovrebbe essere abbastanza semplice, ma da qualche giorno mi sto dando da fare per scappare. Sto provando a riprendere un evento touch da una sovrapposizione dello schermo, a catturare un'immagine e ritagliare una sezione dell'immagine attorno al punto in cui il dito è stato toccato.Un buon modo di utilizzare le domande CGImageCreateWithImageInRect, UIImage e UIImagePickerController

Ora tutto il mio codice funziona correttamente, la sovrapposizione, gli eventi, il ritaglio ecc .... tuttavia non riesco a ottenere il sistema di coordinate dell'evento di tocco per abbinare il sistema di coordinate di UIImage. Ho letto tutti i documenti su cui riesco a mettere le mani, non riesco a capirlo.

La mia domanda principale è, devo prendere in considerazione UIImageOrientation quando si utilizza CGImageCreateWithImageInRect o quartz lo calcola? Il motivo per cui lo chiedo è che ho una procedura molto semplice che ritaglia le immagini bene, ma l'immagine ritagliata non sembra mai dove viene premuto il mio dito?

La maggior parte della routine è:

-(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); 
} 

Quindi, il problema è che la mia zona ritagliata (come visto nel mio album fotografico) non corrisponde l'area effettiva che premo (è sempre qualche altra parte a caso della foto), il che mi fa pensare che il mio sistema di coordinate sia disattivato.

Qualsiasi suggerimento sarebbe molto apprezzato, anche se ci sono solo indicazioni su alcuni documenti che non ho ancora trovato.

Acclamazioni Adam

risposta

0

si deve sempre ricordare che la coordinata di default del sistema è diverso tra CoreGraphics e UIKit. Mentre UIKit inizia con la sua origine nell'angolo in alto a sinistra della finestra, CoreGraphics ha questo punto impostato in basso a sinistra. Penso che questo potrebbe essere abbastanza informazioni per metterti sulla strada giusta, ma solo per ripetere:

Puoi usare questo codice per invertire o capovolgere il tuo sistema di coordinate.

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

rivedere anche Flipping the coordinate predefinito Sytem nel Drawing and Printing Guide for iOS

Problemi correlati