即使在应用了我提到的所有内容之后,我仍然有带有图像的戏剧。最后,我刚刚使用 Gimp 为我的所有图像创建了一个“垂直翻转”版本。现在我不需要使用任何变换。希望这不会导致进一步的问题。
有谁知道为什么 CGContextDrawImage 会颠倒我的图像?我正在从我的应用程序中加载图像:
Quartz2d 使用不同的坐标系,原点在左下角。因此,当 Quartz 绘制 100 * 100 图像的像素 x[5]、y[10] 时,该像素被绘制在左下角而不是左上角。从而导致“翻转”图像。
x 坐标系匹配,因此您需要翻转 y 坐标。
CGContextTranslateCTM(context, 0, image.size.height);
这意味着我们将图像在 x 轴上平移了 0 个单位,在 y 轴上平移了图像高度。但是,仅此一项就意味着我们的图像仍然是颠倒的,只是在我们希望绘制的位置下方绘制“image.size.height”。
Quartz2D 编程指南建议使用 ScaleCTM 并传递负值来翻转图像。您可以使用以下代码来执行此操作 -
CGContextScaleCTM(context, 1.0, -1.0);
在您打电话之前将两者结合起来CGContextDrawImage
,您应该可以正确绘制图像。
UIImage *image = [UIImage imageNamed:@"testImage.png"];
CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);
CGContextTranslateCTM(context, 0, image.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, imageRect, image.CGImage);
如果您的 imageRect 坐标与您的图像的坐标不匹配,请小心,因为您可能会得到意想不到的结果。
要转换回坐标:
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0, -imageRect.size.height);