我正在尝试做一些理论上应该很简单的事情,但我已经困扰了好几天。我正在尝试从屏幕叠加层中获取触摸事件,捕获图像,并在手指触摸的周围裁剪图像的一部分。
现在我的所有代码都很好,叠加层、事件、裁剪等都没问题... 但是,我似乎无法让触摸事件的坐标系统与UIImage的坐标系统匹配。我已经阅读了所有可以找到的文档,但似乎无法解决这个问题。
我的主要问题是,在使用CGImageCreateWithImageInRect时,我需要考虑UIImageOrientation吗?还是Quartz会自动处理?我之所以问这个问题,是因为我有一个非常简单的例程,可以很好地裁剪图像,但裁剪后的图像似乎永远不在我按下手指的位置?
大部分程序如下:
现在我的所有代码都很好,叠加层、事件、裁剪等都没问题... 但是,我似乎无法让触摸事件的坐标系统与UIImage的坐标系统匹配。我已经阅读了所有可以找到的文档,但似乎无法解决这个问题。
我的主要问题是,在使用CGImageCreateWithImageInRect时,我需要考虑UIImageOrientation吗?还是Quartz会自动处理?我之所以问这个问题,是因为我有一个非常简单的例程,可以很好地裁剪图像,但裁剪后的图像似乎永远不在我按下手指的位置?
大部分程序如下:
-(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);
}
所以问题在于,我的裁剪区域(在照片相册中查看)从未与我按下的实际区域相匹配(总是照片的其他随机部分),这让我认为我的坐标系统出了问题。
即使只是指向一些我尚未发现的文档,任何提示都将不胜感激。
谢谢 Adam