gpt4 book ai didi

iphone - 使用CGImageCreateWithImageInRect、UIImage和UIImagePickerController的好方法问题

转载 作者:行者123 更新时间:2023-12-03 19:02:15 30 4
gpt4 key购买 nike

我正在尝试做一些理论上应该很简单的事情,但我已经追了好几天了。我正在尝试从屏幕覆盖层获取触摸事件,捕获图像,然后在手指触摸的位置周围裁剪图像的一部分。

现在我的所有代码都工作正常,覆盖、事件、裁剪等......但是我似乎无法让触摸事件的坐标系统与 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);
}

所以,问题是我的裁剪区域(如我的相册中所示)永远不会与我按下的实际区域相匹配(它总是照片的其他随机部分),这让我认为我的坐标系统已关闭。

任何指针都将不胜感激,即使只是指向我尚未找到的一些文档。

干杯亚当

最佳答案

您必须始终记住,CoreGraphics 和 UIKit 之间的默认坐标系是不同的。 UIKit 的原点位于窗口的左上角,而 CoreGraphics 则将此点设置在左下角。我认为这可能足以让您走上正轨,但只是重申一下:

您可以使用此代码来反转或翻转坐标系。

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

另请参阅 Drawing and Printing Guide for iOS 中的翻转默认坐标系统

关于iphone - 使用CGImageCreateWithImageInRect、UIImage和UIImagePickerController的好方法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3870839/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com