`
119568242
  • 浏览: 426823 次
  • 性别: Icon_minigender_1
  • 来自: 深圳/湛江
社区版块
存档分类
最新评论

[转]使用CGContextDrawImage绘制图片上下颠倒

    博客分类:
  • ios
 
阅读更多
  • 转自:http://www.bennychen.cn/tag/cgcontextdrawimage/
  • 使用CGContextDrawImage绘制图片上下颠倒

首先要说的是,在iOS的不同framework中使用着不同的坐标系:

  • UIKit - y轴向下
  • Core Graphics(Quartz) - y轴向上
  • OpenGL ES - y轴向上

UIKit是iPhone SDK的Cocoa Touch层的核心framework,是iPhone应用程序图形界面和事件驱动的基础,它和传统的windows桌面一样,坐标系是y轴向下的; Core Graphics(Quartz)一个基于2D的图形绘制引擎,它的坐标系则是y轴向上的;而OpenGL ES是iPhone SDK的2D和3D绘制引擎,它使用左手坐标系,它的坐标系也是y轴向上的,如果不考虑z轴,在二维下它的坐标系和Quartz是一样的。

现在回到问题,当通过CGContextDrawImage绘制图片到一个context中时,如果传入的是UIImage的CGImageRef,因为UIKit和CG坐标系y轴相反,所以图片绘制将会上下颠倒。解决方法有以下几种,

解决方法一:在绘制到context前通过矩阵垂直翻转坐标系

1 // uiImage是将要绘制的UIImage图片,width和height是它的宽高
2 CGContextTranslateCTM(context, 0, height);
3 CGContextScaleCTM(context, 1.0, -1.0);
4 CGContextDrawImage(context, CGRectMake(0, 0, width, height), uiImage.CGImage);

解决方法二:使用UIImage的drawInRect函数,该函数内部能自动处理图片的正确方向

1 // uiImage是将要绘制的UIImage图片,width和height是它的宽高
2 UIGraphicsPushContext( context );
3 [uiImage drawInRect:CGRectMake(0, 0, width, height)];
4 UIGraphicsPopContext();

解决方法三:垂直翻转投影矩阵
这种方法通过设置上下颠倒的投影矩阵,使得原本y轴向上的GL坐标系看起来变成了y轴向下,并且坐标原点从屏幕左下角移到了屏幕左上角。如果你习惯使用y轴向下的坐标系进行二维操作,可以使用这种方法,同时原本颠倒的图片经过再次颠倒后回到了正确的方向:

1 // uiImage是将要绘制的UIImage图片,width和height是它的宽高
2  
3 // 图片被颠倒的绘制到context
4 CGContextDrawImage(context, CGRectMake(0, 0, width, height), uiImage.CGImage);
5  
6 // 设置上下颠倒的投影矩阵(则原来颠倒的图片回到了正确的方向)
7 glMatrixMode(GL_PROJECTION);
8 glLoadIdentity();
9 glOrthof( 0, framebufferWidth, framebufferHeight, 0, -1, 1 );
分享到:
评论

相关推荐

    iOS 抽奖转盘S

    5. **绘制图片**: 可以使用`CGContextDrawImage`函数将UIImage对象绘制到上下文中。你需要指定图像的位置和大小。 6. **旋转效果**: 在抽奖转盘中,旋转效果是关键。这可以通过`CGContextTranslateCTM`和`...

    图片水印Demo

    4. **绘制水印**:使用CGContextDrawImage方法将原始图片绘制到新创建的位图上下文上。接着,调用Quartz 2D的绘图函数(如CGContextShowTextAtPoint)在合适的位置绘制水印文本或logo。如果水印是图片,可以使用...

    对于图片的处理,包括裁图,缩放等图片的处理

    另一种方法是使用` UIGraphicsGetImageFromCurrentImageContext()`,在指定的上下文中绘制图片的缩小版本。 4. **图片裁剪**: 裁剪图片需要用到Core Graphics。首先,创建一个与目标裁剪区域相同尺寸的新上下文,...

    iOS 图片裁剪 + 旋转

    然后使用 CGContextTranslateCTM 函数来移动图形上下文的原点,然后使用 CGContextRotateCTM 函数来旋转图形上下文,最后使用 CGContextDrawImage 函数来绘制图片。 图片旋转是指将图片旋转一定角度,使得图片的...

    IOS按照路径裁切图片

    - **绘制图片**:接下来,使用`CGContextDrawImage`函数将图片绘制到上下文中。由于上下文已经被设置了剪切区域,所以图片只会在这个区域内显示。 - **获取裁切后的图像**:最后,使用`...

    iOS图片生成PDF,支持单张或者多张

    每张图片可以使用`UIImagePNGRepresentation`或`UIImageJPEGRepresentation`转成数据,然后通过`CGContextDrawImage`绘制到PDF上下文。 3. 多张图片合成: 对于多张图片,我们可以遍历图片数组,逐个进行渲染。...

    iphone ImageView转灰色图片demo

    2. **Core Graphics绘图**:我们可以创建一个CGContext,然后在这个上下文中绘制UIImage,使用上述的灰度转换公式将每个像素转换为灰度,最后从这个新的CGContext中获取结果图像。 以下是实现这个功能的步骤: 1. ...

    swift-iOS图片压缩

    例如,可以使用`CGContextDrawImage`方法将图片绘制到一个更小的上下文中,从而实现图片尺寸的缩小。 2. **Core Image**: Core Image则提供了许多预定义的滤镜和图像处理功能。通过调整滤镜参数,我们可以实现图片...

    iOS 图片拼接

    - 将每个图片加载到CGContext中,通过`CGContextDrawImage`函数绘制图片,设置合适的坐标位置以达到拼接效果。 - 使用`UIGraphicsGetImageFromCurrentImageContext`获取绘制后的图像,最后转换为UIImage对象。 ...

    图片倒影效果.zipIOS应用例子源码下载

    在新创建的图形上下文中,我们将原图片进行翻转并绘制。 3. **裁剪倒影**: 通常,我们不希望整个倒影与原始图片完全相同大小,而是希望它逐渐透明,以模拟真实的倒影效果。这可以通过定义一个渐变区域并裁剪CGImage...

    图片旋转demo

    在iOS开发中,图片旋转是一项常见的操作,尤其在处理用户拍摄的照片或者显示图像时,可能需要根据需求调整图片的方向。本教程将详细讲解如何利用系统框架实现图片旋转的效果,通过提供的"图片旋转demo",我们可以...

    objc透视图片

    具体实现时,可以创建一个自定义的UIView子类,覆写`drawRect:`方法,利用`CGContextDrawImage`函数分块绘制图片,同时使用`CGAffineTransform`来设置每个部分的透视变换。此外,可能还需要结合CALayer的`transform`...

    ios-MGXStitchImage.zip

    在这个项目中,我们可能需要使用CGContextDrawImage方法来绘制CGImage对象到新的CGContext上下文中,从而实现图片的拼接。 2. **CGContext**:这是Core Graphics的核心,代表了绘图表面。开发者可以使用...

    基本图形绘制

    图像绘制可以使用`CGContextDrawImage()`方法,而文字绘制则涉及`CGContextSelectFont()`、`CGContextSetTextPosition()`和`CGContextShowTextAtPoint()`等函数。 总的来说,Quartz 2D为iOS开发者提供了丰富的2D...

    iOS的Object-C中drawRect:的使用

    4. **图像绘制**:加载图片,获取`CGImage`,使用`CGContextDrawImage`将图像绘制到上下文中。 `drawRect:`的正确使用需要注意以下几点: - **性能优化**:避免在`drawRect:`中执行昂贵的操作,因为这个方法可能被...

    图片加水印

    首先创建一个基于原始图片的位图上下文,接着在该上下文中使用`CGContextDrawImage`绘制原图,再利用`CGContextSelectFont`、`CGContextSetFillColorWithColor`、`CGContextSetTextPosition`等方法设置字体、颜色和...

    IOS应用源码——图片倒影.zip

    3. 将原图绘制到上下文中:`CGContextDrawImage(context, CGRectMake(0, 0, originalImage.size.width, originalImage.size.height), originalImage.CGImage);` 4. 反转图片:通过调整CGContext的坐标系统,将图像...

    ios gif图片合成

    c) 对每帧图片,将其转换为`CGImage`,并使用`CGContextDrawImage`绘制到上下文中。 d) 记录每帧的显示时间和透明度信息。 e) 将`CGContext`的数据编码为GIF格式的`NSData`对象。 f) 使用`UIImage+GIF`或`...

    ios-Button_ThroughBlankArea.zip

    接着,获取该视图的`CGContext`,并用`CGContextDrawImage`绘制图片到上下文中,再用`CGContextGetFillColorAtPoint`来获取指定位置的颜色。 其次,不同颜色响应事件是事件处理机制的应用。开发者可以定义一个颜色...

    给图片添加水印

    - 绘制图片:在`CGContext`中使用`CGContextDrawImage`函数绘制图片水印。 5. **混合模式与透明度**:在添加水印时,可以通过设置混合模式(`CGContextSetBlendMode`)来调整水印与底层图像的融合效果,例如使用`...

Global site tag (gtag.js) - Google Analytics