我正在尝试做一些理论上应该很简单的事情,但我现在已经追了好几天了。我正试图从屏幕叠加中拍摄触摸事件,拍摄图像,然后在手指触摸的位置裁剪出一部分图像。
现在我所有的代码都运行正常,覆盖,事件,裁剪等......但是我似乎无法获得触摸事件的坐标系来匹配UIImage的坐标系。我已经阅读了所有可以获得的文档,我似乎无法弄明白。
我的主要问题是,在使用CGImageCreateWithImageInRect时,我是否需要考虑UIImageOrientation,或者石英算出来了吗?我问的原因是我有一个非常简单的例程,裁剪图像很好,但裁剪后的图像似乎永远不会被我的手指按压?
大部分例行程序是:
-(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);
}
所以,问题是我的裁剪区域(在我的相册中看到)从不匹配我按下的实际区域(它总是照片的其他随机部分),这让我觉得我的坐标系统已关闭。
任何指针都会非常感激,即使只是指向我尚未找到的某些文档的指针。
干杯 亚当
答案 0 :(得分:0)
您必须始终记住CoreGraphics和UIKit之间的默认坐标系不同。虽然UIKit的起源位于窗口的左上角,但CoreGraphics将此点设置在左下角。我认为这可能足以让您走上正确的轨道,但只是为了重新迭代:
您可以使用此代码反转或翻转您的坐标系。
CGContextTranslateCTM(graphicsContext, 0.0, drawingRect.size.height);
CGContextScaleCTM(graphicsContext, 1.0, -1.0);
中查看翻转默认坐标系