标签: cgcontext

在CGContext中使用渐变填充形状

我想用线性CGGradient填充我通过Core Graphics绘制的多边形形状.CGContextDrawLinearGradient函数从一个点到另一个点绘制渐变,但它填充整个视图.如何仅在我绘制的多边形内部显示渐变?

cocoa objective-c cgcontext

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

绘制成CGImageRef

我想创建一个CGImageRef并为它绘制点.

用于创建空CGImageRef并能够绘制到其上的上下文.CGContextRef还是CGBitmapContextRef?

如果你可以提供代码来创建一个空的CGImageRef图像并绘制它,我将不胜感激.

iphone graphics cgcontext

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

将CALayer绘制成CGContext

我有以下代码:

CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSaveGState(context);

CALayer *sublayer = [CALayer layer];
sublayer.backgroundColor = [UIColor orangeColor].CGColor;
sublayer.cornerRadius = 20.0;
sublayer.frame = CGRectMake(20, 0, 300, 20);

[sublayer setNeedsDisplay];
[sublayer drawInContext:context];

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return newImage;
Run Code Online (Sandbox Code Playgroud)

但是当我查看返回的newImage时,只有一个空图像.当我将drawInContext更改为renderInContext时,我得到了上面的子图层,但似乎坐标系统搞得一团糟.

知道为什么上面的drawInContext不起作用?

calayer cgcontext

7
推荐指数
2
解决办法
6773
查看次数

使用CGContext绘制线条

我想用CGContext绘制一条线,到目前为止我是:

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
CGContextSetLineWidth(context, 1.0f);
CGContextMoveToPoint(context, 10, 10); 
CGContextAddLineToPoint(context, 100, 50);
CGContextStrokePath(context);
Run Code Online (Sandbox Code Playgroud)

它总是从左上角到右下角的顶部.如何调整此线的起点和终点?如何调整线的长度?

iphone objective-c cgcontext ipad ios

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

使用CGContextSetLineDash绘制一条虚线

我正在尝试画一条虚线CGContextSetLineDash.

这是我的代码:

float dashPhase = 0.0;
float dashLengths[] = {30, 30};
CGContextSetLineDash(context, dashPhase, dashLengths, 20.0);
self.previousPoint2 = self.previousPoint1;
self.previousPoint1 = previous;
self.currentPoint = current;

self.mid1 = [self pointBetween:self.previousPoint1 andPoint:self.previousPoint2];
self.mid2 = [self pointBetween:self.currentPoint andPoint:self.previousPoint1];

UIBezierPath* newPath = [UIBezierPath bezierPath];

[newPath moveToPoint:self.mid1];
[newPath addLineToPoint:self.mid2];
[newPath setLineWidth:self.brushSize];
Run Code Online (Sandbox Code Playgroud)

但是,如果我画得很慢,它们的虚线就不会出现(见下图的顶部),但如果我快速绘制,它们会出现(见下图底部).

在此输入图像描述

为什么会这样?

iphone objective-c cgcontext ios

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

Quartz2D:如何在运行时将剪切矩形转换为反转掩码?

鉴于:

  1. ctx带框架的CGContextRef(){0,0,100,100}
  2. 和一个r带框架的rect(){25,25,50,50}

将上下文剪辑到该矩形很容易:

CGContextClipToRect(ctx, r);
Run Code Online (Sandbox Code Playgroud)

掩盖下面的红色区域(红色==掩码):

在此输入图像描述

但是我想反转这个剪切矩形以将其转换为剪贴蒙版.期望的结果是掩盖下面的红色部分(红色==掩码):

在此输入图像描述

我想在运行时以编程方式执行此操作.

希望手动准备一个位图图像与我的应用程序静态发货.

鉴于ctx并且r,如何在运行时最容易/直接地完成?

macos cgcontext quartz-2d ios

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

CGContextAddArc逆时针而不是顺时针方向

在CALayer子类内部绘制函数内部绘制弧时,我遇到了问题.该绘图功能的实现如下:

-(void)drawInContext:(CGContextRef)ctx
{
    CGPoint center = CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2);
    CGFloat radius = MIN(center.x, center.y);

    CGContextBeginPath(ctx);

    CGContextAddArc(ctx, center.x, center.y, radius, DEG2RAD(0), DEG2RAD(90), YES);

    CGContextSetStrokeColorWithColor(ctx, [UIColor whiteColor].CGColor);
    CGContextSetLineWidth(ctx, 5);

    CGContextDrawPath(ctx, kCGPathStroke);
}
Run Code Online (Sandbox Code Playgroud)

这里没有什么太开创性的,但奇怪的是它是逆时针绘制弧形,即使我指定它是顺时针方向.相反,当我为顺时针参数指定NO时,它顺时针绘制圆弧.我对翻转坐标系进行了一些研究,并认为可能是这里的问题,但我不想只是硬编码我所说的相反的bool参数.对于如何解决这个问题,有任何的建议吗?

谢谢!

calayer quartz-graphics cgcontext ios

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

IOS:如何计算要创建上下文的文本大小?

我需要创建一个包含一行文本的图像.但问题是,我首先需要创建上下文(CGBitmapContextCreate),要求图像的宽度和高度有可能以后计算文本的边界(通过CTLineGetImageBounds).但我想要图像的大小=文本的边界:(我该怎么办?

实际上我用

CGBitmapContextCreate
CTLineGetImageBounds
CTLineDraw
Run Code Online (Sandbox Code Playgroud)

也许可以在没有上下文的情况下调用CTLineGetImageBounds?

注意:我在delphi上,这不是一个真正的问题,因为我可以访问所有的API,我只需要函数名称

objective-c cgcontext ios swift

7
推荐指数
2
解决办法
2319
查看次数

如何以编程方式使用 UIGraphicsImageRenderer 获取高质量屏幕截图?

问题:截取屏幕截图后,通过缩放检查时图像模糊。缩放时图像内的文字似乎变得模糊。

我知道这个问题已经被多次提出,但没有一个人想要得到解决。我已经检查了很多像这样的帖子

到目前为止,该论坛上共享的所有解决方案都是重复的或以任何其他方式相同,但没有一个解决方案可以解决该问题。

这是我正在做的事情:

extension UIView {

  func asImage() -> UIImage? {
    let format = UIGraphicsImageRendererFormat()
    format.opaque = self.isOpaque
    let renderer = UIGraphicsImageRenderer(bounds: bounds,format: format)
    return renderer.image(actions: { rendererContext in
        layer.render(in: rendererContext.cgContext)
    })
}

//The other option using UIGraphicsEndImageContext

func asImage() -> UIImage? {
    UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.isOpaque, 0.0)
    defer { UIGraphicsEndImageContext() }
    if let context = UIGraphicsGetCurrentContext() {
        self.layer.render(in: context)
        return UIGraphicsGetImageFromCurrentImageContext()
    }
    return nil
}
}
Run Code Online (Sandbox Code Playgroud)

上面的函数将UIView转换为图像,但是返回的图像质量不合格。

uiimage cgcontext ios swift uigraphicsimagerenderer

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

将UIViews子视图展平为UIImage iPhone 3.0

我有一个UIView,它有几个UIImageViews作为子视图.这些子视图中的每一个都应用了不同的仿射变换.我想采取相当于我的UIView的屏幕截图,将其捕获为UIImage或其他图像表示.

我已经尝试过的方法,将图层渲染为CGContext:

[view.layer renderInContext:UIGraphicsGetCurrentContext()];
Run Code Online (Sandbox Code Playgroud)

不保留我的子视图的定位或其他仿射变换.

我真的很感激正确的方向踢.

iphone cocoa-touch cgcontext

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