我想用线性CGGradient填充我通过Core Graphics绘制的多边形形状.CGContextDrawLinearGradient函数从一个点到另一个点绘制渐变,但它填充整个视图.如何仅在我绘制的多边形内部显示渐变?
我想创建一个CGImageRef并为它绘制点.
用于创建空CGImageRef并能够绘制到其上的上下文.CGContextRef还是CGBitmapContextRef?
如果你可以提供代码来创建一个空的CGImageRef图像并绘制它,我将不胜感激.
我有以下代码:
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不起作用?
我想用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)
它总是从左上角到右下角的顶部.如何调整此线的起点和终点?如何调整线的长度?
我正在尝试画一条虚线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)
但是,如果我画得很慢,它们的虚线就不会出现(见下图的顶部),但如果我快速绘制,它们会出现(见下图底部).

为什么会这样?
鉴于:
ctx带框架的CGContextRef(){0,0,100,100} r带框架的rect(){25,25,50,50}将上下文剪辑到该矩形很容易:
CGContextClipToRect(ctx, r);
Run Code Online (Sandbox Code Playgroud)
掩盖下面的红色区域(红色==掩码):

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

我想在运行时以编程方式执行此操作.
我不希望手动准备一个位图图像与我的应用程序静态发货.
鉴于ctx并且r,如何在运行时最容易/直接地完成?
在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参数.对于如何解决这个问题,有任何的建议吗?
谢谢!
我需要创建一个包含一行文本的图像.但问题是,我首先需要创建上下文(CGBitmapContextCreate),要求图像的宽度和高度有可能以后计算文本的边界(通过CTLineGetImageBounds).但我想要图像的大小=文本的边界:(我该怎么办?
实际上我用
CGBitmapContextCreate
CTLineGetImageBounds
CTLineDraw
Run Code Online (Sandbox Code Playgroud)
也许可以在没有上下文的情况下调用CTLineGetImageBounds?
注意:我在delphi上,这不是一个真正的问题,因为我可以访问所有的API,我只需要函数名称
问题:截取屏幕截图后,通过缩放检查时图像模糊。缩放时图像内的文字似乎变得模糊。
我知道这个问题已经被多次提出,但没有一个人想要得到解决。我已经检查了很多像这样的帖子
到目前为止,该论坛上共享的所有解决方案都是重复的或以任何其他方式相同,但没有一个解决方案可以解决该问题。
这是我正在做的事情:
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转换为图像,但是返回的图像质量不合格。
我有一个UIView,它有几个UIImageViews作为子视图.这些子视图中的每一个都应用了不同的仿射变换.我想采取相当于我的UIView的屏幕截图,将其捕获为UIImage或其他图像表示.
我已经尝试过的方法,将图层渲染为CGContext:
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
Run Code Online (Sandbox Code Playgroud)
不保留我的子视图的定位或其他仿射变换.
我真的很感激正确的方向踢.