2010-10-06 15 views
5

Teoride çok basit olması gereken bir şey yapmaya çalışıyorum ama günler boyunca kuyruğumu takip ediyorum. Ekran kaplamasından bir dokunma olayı almaya çalışıyorum, bir görüntü yakalayın ve parmağınızın dokunduğu bir resmin çevresini kırpıyorum.CGImageCreateWithImageInRect, UIImage ve UIImagePickerController sorularının kullanılması için iyi bir yol

Artık tüm kodum düzgün çalışıyor, kaplama, olaylar, kırpma vb. .... ancak UIImage'ın koordinat sistemi ile eşleşmesi için dokunma olayının koordinat sistemini göremiyorum. Ellerimi açabileceğim tüm belgeleri okudum, anlayamıyorum.

Ana sorum şu, CGImageCreateWithImageInRect'i kullanırken UIImageOrientation'ı dikkate almam gerekir mi, yoksa quartz bunu çözüyor mu? Sormamın nedeni, görüntüleri kırpmak için çok basit bir rutine sahibim, ancak kırpılmış görüntü parmağımın basıldığı yer değil midir?

rutin toplu geçerli:

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

Peki, sorun (benim fotoğraf albümü görüldüğü gibi) benim kırpılmış alan asla ben basın fiili alanını (her zaman diğer bazı rasgele parçası maçları olmasıdır (fotoğrafın), bu da bana koordinat sistemimin kapalı olduğunu gösteriyor.

Henüz bulunmadığım bazı dokümanlar için işaretçiler olsa bile, herhangi bir işaretçi çok memnun olur.

Alkış Adam

cevap

0

Hep varsayılan sistem CoreGraphics ve UIKit arasında farklı koordinat unutmamalıyız. UIKit, pencerenin sol üst köşesindeki kökeni ile başlarken, CoreGraphics bu noktayı sol altta ayarladı. Bu, doğru yolda sizi koymak için yeterli bilgi olabilir, ancak sadece yeniden yineleme için yeterli olabilir:

Bu kodu koordinat sisteminizi ters çevirmek veya ters çevirmek için kullanabilirsiniz.

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

Ayrıca Standart Drawing and Printing Guide for iOS

yılında Sytem Koordinat Lanetleme gözden