标签: cgcontextdrawimage

传递UIImage.CGImage时,CGContextDrawImage将图像上下颠倒

有谁知道为什么CGContextDrawImage会把我的形象颠倒过来?我从我的应用程序加载图像:

UIImage *image = [UIImage imageNamed:@"testImage.png"];
Run Code Online (Sandbox Code Playgroud)

然后简单地要求核心图形将其绘制到我的上下文中:

CGContextDrawImage(context, CGRectMake(0, 0, 145, 15), image.CGImage);
Run Code Online (Sandbox Code Playgroud)

它呈现在正确的位置和尺寸,但图像是颠倒的.我一定错过了一些非常明显的东西吗?

cocoa-touch core-graphics ios cgcontextdrawimage

178
推荐指数
7
解决办法
11万
查看次数

大型UIImage绘制后,CGContextDrawImage非常慢

CGContextDrawImage(CGContextRef,CGRect,CGImageRef)在绘制由CoreGraphics(即使用CGBitmapContextCreateImage)创建的CGImage时,执行MUCH WORSE比绘制支持UIImage的CGImage时要好.看到这个测试方法:

-(void)showStrangePerformanceOfCGContextDrawImage
{
    ///Setup : Load an image and start a context:
    UIImage *theImage = [UIImage imageNamed:@"reallyBigImage.png"];
    UIGraphicsBeginImageContext(theImage.size);
    CGContextRef ctxt = UIGraphicsGetCurrentContext();    
    CGRect imgRec = CGRectMake(0, 0, theImage.size.width, theImage.size.height);


    ///Why is this SO MUCH faster...
    NSDate * startingTimeForUIImageDrawing = [NSDate date];
    CGContextDrawImage(ctxt, imgRec, theImage.CGImage);  //Draw existing image into context Using the UIImage backing    
    NSLog(@"Time was %f", [[NSDate date] timeIntervalSinceDate:startingTimeForUIImageDrawing]);

    /// Create a new image from the context to use this time in CGContextDrawImage:
    CGImageRef theImageConverted = CGBitmapContextCreateImage(ctxt);

    ///This is …
Run Code Online (Sandbox Code Playgroud)

performance core-graphics ios cgcontextdrawimage

28
推荐指数
2
解决办法
1万
查看次数

将边框放在CGContext上绘制的部分透明图像周围

我有一个图像,前景中有一个黄色花瓶,透明背景:

在此输入图像描述

我在CGContext上绘制它:

CGContextDrawImage(context, CGRectMake(0, 0, 100, 100), myImage.CGImage);
Run Code Online (Sandbox Code Playgroud)

我可以使用以下语句在它周围画一个阴影CGContextDrawImage:

CGContextSetShadowWithColor(context, CGSizeMake(0,0), 5, [UIColor blueColor].CGColor);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但我想在图像周围放一个笔画,这样看起来就像是:

在此输入图像描述

如果我这样做:

CGContextSetRGBStrokeColor(shadowContext, 0.0f, 0.0f, 1.0f, 1.0f);
CGContextSetLineWidth(shadowContext, 5);
CGContextStrokeRect(shadowContext, CGRectMake(0, 0, 100, 100));
Run Code Online (Sandbox Code Playgroud)

它(显然)围绕整个iamge绘制一个矩形边框,如下所示:

在此输入图像描述

这不是我需要的.

但是在第三张图片中绘制边框的最佳方法是什么?

请注意,在这种情况下无法使用UIImageView,因此使用UIImageView的CALayer属性不适用.

core-graphics cgcontext ios cgcontextdrawimage

21
推荐指数
1
解决办法
3976
查看次数

使用CGContextDrawImage旋转图像

如何旋转CGContextDrawImage()中心绘制的图像?

drawRect:

CGContextSaveGState(c);

rect = CGRectOffset(rect, -rect.size.width / 2, -rect.size.height / 2);
CGContextRotateCTM(c, angle);
CGContextDrawImage(c, rect, doodad.CGImage);
CGContextRotateCTM(c, -angle);
CGContextTranslateCTM(c, pt.x, pt.y);

prevRect = rect;

CGContextRestoreGState(c);
Run Code Online (Sandbox Code Playgroud)

我在原点绘制图像,然后在中心旋转图像,然后转换到应该绘制的位置.不工作.

core-graphics cgcontext cgaffinetransform ios cgcontextdrawimage

11
推荐指数
2
解决办法
8926
查看次数

放大后MapView叠加层将被切断

我面临着一个奇怪的问题MKMapView.我用了一个MKOverlayRenderer.现在的问题是当我缩小图像显示正确时.但是在放大的情况下,图像的某些部分会被切断.它看起来像MapView覆盖层上方的一部分.以下是我的叠加渲染器代码.

class MapOverlayRenderer: MKOverlayRenderer {
    var overlayImage: UIImage
    var plan: Plan

    init(overlay: MKOverlay, overlayImage: UIImage, plan: Plan) {
        self.overlayImage = overlayImage
        self.plan = plan
        super.init(overlay: overlay)
    }

    override func draw(_ mapRect: MKMapRect, zoomScale: MKZoomScale, in ctx: CGContext) {
        let theMapRect = overlay.boundingMapRect
        let theRect = rect(for: theMapRect)

        // Rotate around top left corner
        ctx.rotate(by: CGFloat(degreesToRadians(plan.bearing)));

        // Draw the image
        UIGraphicsPushContext(ctx)
        overlayImage.draw(in: theRect, blendMode: CGBlendMode.normal, alpha: 1.0)
        UIGraphicsPopContext();
    }

    func degreesToRadians(_ x:Double) -> Double { …
Run Code Online (Sandbox Code Playgroud)

cgcontext mkmapview mkoverlay cgcontextdrawimage swift3

8
推荐指数
1
解决办法
205
查看次数

用UIGraphicsImageRenderer的jpegData替换UIImageJPEGRepresentation

我正在努力当用户需要从相机中的照片添加宽彩色照片在iOS的10支持,我需要使用支持新的色彩空间来保存照片数据的新API - UIGraphicsImageRendererjpegData替代UIImageJPEGRepresentation.

我遇到了一些图像方向的麻烦.在我的iPad上纵向拍照,图像绘制不正确.请参阅以下评论:

旧API:

let image = info[UIImagePickerControllerOriginalImage] as! UIImage
let imageData = UIImageJPEGRepresentation(image, 1)
Run Code Online (Sandbox Code Playgroud)

新API:

let image = info[UIImagePickerControllerOriginalImage] as! UIImage
let cgImage = image.cgImage!
let ciImage = CIImage(cgImage: cgImage)

let format = UIGraphicsImageRendererFormat()
format.scale = 1
format.prefersExtendedRange = true

let renderer = UIGraphicsImageRenderer(bounds: ciImage.extent, format: format)
let imageData = renderer.jpegData(withCompressionQuality: 1, actions: { context in
    context.cgContext.draw(cgImage, in: ciImage.extent) //draws flipped horizontally
    //image.draw(at: .zero) //draws rotated 90 degrees leaving black at bottom
    //image.draw(in: …
Run Code Online (Sandbox Code Playgroud)

uikit cgcontext ios cgcontextdrawimage

6
推荐指数
1
解决办法
1031
查看次数

CGPointZero和CGContextDrawImage不可用

我无法转换CGContextDrawImage为swift 3,我尝试了context.draw,但它不起作用.那里有人可以给我一个反馈

错误截图

码:

import UIKit

public struct Pixel {
public var value: UInt32

public var red: UInt8 {
    get {
        return UInt8(value & 0xFF)
    }
    set {
        value = UInt32(newValue) | (value & 0xFFFFFF00)
    }
}

public var green: UInt8 {
    get {
        return UInt8((value >> 8) & 0xFF)
    }
    set {
        value = (UInt32(newValue) << 8) | (value & 0xFFFF00FF)
    }
}

public var blue: UInt8 {
    get {
        return UInt8((value >> 16) & 0xFF)
    }
    set { …
Run Code Online (Sandbox Code Playgroud)

ios cgcontextdrawimage swift3

4
推荐指数
1
解决办法
2560
查看次数

如何在swift 3中的图像上的两点之间画一条线?

我是swift的新手,我想在我称为mapView的图像上画两条点之间的线,我试图使用CGContext但没有结果,任何想法都有帮助吗?谢谢.

UIGraphicsBeginImageContext(mapView.bounds.size)
    let context : CGContext = UIGraphicsGetCurrentContext()!
    context.addLines(between: [CGPoint(x:oldX,y:oldY), CGPoint(x:newX, y:newY)])
    context.setStrokeColorSpace(CGColorSpaceCreateDeviceRGB())
    context.setStrokeColor(UIColor.blue.cgColor.components!)
    context.setLineWidth(3)
    mapView?.image?.draw(at: CGPoint(x:0, y:0))
    context.strokePath()
    mapView.image = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
Run Code Online (Sandbox Code Playgroud)

cgcontext cgcontextdrawimage swift

4
推荐指数
1
解决办法
4237
查看次数

如何旋转UIImage但不要削减边缘IOS

帮助,我是ios编程的新手,我想旋转可能UIImage但我不希望边缘被切割或松散图像的某些部分.

这是我的代码:

double angle = M_PI * 10/ 180; CGSize s = {image.size.width, image.size.height}; UIGraphicsBeginImageContext(s); CGContextRef ctx = UIGraphicsGetCurrentContext();

CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, image.size.width/2, image.size.height/2);

transform = CGAffineTransformRotate(transform, angle);
transform = CGAffineTransformScale(transform, 1.0, -1.0);

CGContextConcatCTM(ctx, transform);

CGContextDrawImage(ctx,CGRectMake(-[image size].width/2,-[image size].height/2,image.size.width, image.size.height),image.CGImage);
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

UIImageWriteToSavedPhotosAlbum(newImage, nil, nil, nil);
Run Code Online (Sandbox Code Playgroud)

图像正在旋转,但框架的大小不会因为某些图像被切割而改变.

输出:https://fbcdn-sphotos-ea.akamaihd.net/hphotos-ak-xpf1/t1.0-9/1555286_761679470521535_1800180000235265553_n.jpg

预期产出:https://fbcdn-photos-ga.akamaihd.net/hphotos-ak-xfa1/t1.0-0/10314770_761675840521898_6536715783383115855_a.jpg

请帮我谢谢.

objective-c uiimage ios cgcontextdrawimage

3
推荐指数
1
解决办法
1085
查看次数

如何在Swift 3中使用CGContextDrawImage?

我有一个UIImage使用的扩展CGContextDrawImage.它只是旋转一个UIImage.我更新到Xcode8和Swift3,无法弄清楚如何使用CGContextDrawImage.

我在CGContextDrawImage上遇到错误.

"无法将类型"CGImage.Type的值转换为预期的参数类型'CGImage?'"

我的代码是:

CGContextDrawImage(bitmap, CGRectMake(-size.width / 2, -size.height / 2, size.width, size.height), CGImage)
Run Code Online (Sandbox Code Playgroud)

整个扩展:

extension UIImage {
public func imageRotatedByDegrees(degrees: CGFloat, flip: Bool) -> UIImage {
    let radiansToDegrees: (CGFloat) -> CGFloat = {
        return $0 * (180.0 / CGFloat(M_PI))
    }
    let degreesToRadians: (CGFloat) -> CGFloat = {
        return $0 / 180.0 * CGFloat(M_PI)
    }

    // calculate the size of the rotated view's containing box for our drawing space
    let rectZero = …
Run Code Online (Sandbox Code Playgroud)

ios cgcontextdrawimage swift swift3

1
推荐指数
1
解决办法
6441
查看次数