Tag: core graphics

GLKit掩盖或混合两个来自jpeg无纹理的纹理

我正在使用GLKit,并在24 fps我需要采取一个CGImageRef(没有alpha层),并应用另一个CGImageRef(无alpha层)作为它的掩码(黑白图像),并呈现为一个GLKit纹理的结果。 起初我尝试了这种方法: CGImageRef actualMask = CGImageMaskCreate(CGImageGetWidth(maskRef), CGImageGetHeight(maskRef), CGImageGetBitsPerComponent(maskRef), CGImageGetBitsPerPixel(maskRef), CGImageGetBytesPerRow(maskRef), CGImageGetDataProvider(maskRef), NULL, false); CGImageRef masked = CGImageCreateWithMask(imgRef, actualMask); 而且,虽然将分配产生的UIImage到一个UIImageView工作,这不会作为一个GLKit纹理(该掩码将不会被应用)。 但是,如果我使用以下方法重新绘制图像: UIImage *maskedImg = [UIImage imageWithCGImage:masked]; UIGraphicsBeginImageContext(maskedImg.size); [maskedImg drawInRect:CGRectMake(0, 0, maskedImg.size.width, maskedImg.size.height)]; UIImage* resultImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 生成的图像将在GLKit纹理中被遮罩并正确渲染。 但是,这将iPhone 4S的性能降低到6 fps左右。 我尝试过这种掩蔽方法,但没有成功。 我已经试过没有Core Graphics和使用GLKit混合,如Ray Wenderlich在这个例子中所示。 但是,这需要面具上的alpha透明度,这对我来说是一个难题。 我还发现了一个有趣的例子,我正在做一个名为AVAnimator的库和一个名为KittyBoom的例子。 这里他们正在手动replace像素。 我想用GLKit得到相同的结果。 任何进一步的方向或指导将在这里有所帮助。 提前致谢。

合并连接的UIBezierPaths

有没有一些方法(代码或伪代码algorithm)利用UIBezierPath实例方法(如appendPath )将任意数量的连接的不同UIBezierPath “合并”为单个大path? 在一个有许多path的文档中,我试图通过减lesspath的数量来减less编码文件的大小,因为那里肯定有一些冗余的信息。 如果我吠叫错了树,请告诉我。

在iOS中获取CGImageRef的平均RGB颜色

我一直在挣扎几个小时,我希望别人有一些洞察力。 我正在寻找一种方法来获得1×1 UIImage的平均RGB颜色。 到目前为止,我已经从UIImage创build了一个CGImageRef,但是我对CoreGraphics真的很陌生,所以我不确定从哪里开始。 任何帮助表示赞赏。 谢谢!

UIBezierPath绘制的视图的模糊屏幕截图

我使用UIBezierPath方法和coretext绘制我的graphics视图。 我使用addQuadCurveToPoint:controlPoint:方法在图上绘制曲线。 我也使用CATiledLayer来渲染大数据集在X轴上的graphics。 我在图像上下文中绘制了我的整个graphics,并在我的整个视图中绘制了这个图像。 以下是我的代码。 – (void)drawImage{ UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0); // Draw Curves [self drawDiagonal]; UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext(); [screenshot retain]; UIGraphicsEndImageContext(); } – (void)drawRect:(CGRect)rect{ NSLog(@"Draw iN rect with Bounds: %@",NSStringFromCGRect(rect)); [screenshot drawInRect:self.frame]; } 然而在屏幕截图中,两点之间的曲线并不平滑。 我也在我的信息plist中将“抗锯齿渲染”设置为“是”。 请看截图。

CAGradient图层在视图中不可见

我尝试在我用Core Graphics制作的饼图中添加Cagradient效果。 事实certificate,我不能够,当然不能很好地理解如何将它应用到CGPath的一部分的视图… override func draw(_ rect: CGRect) { … func arc(myRadius: CGFloat, myStartAngle: CGFloat, myEndAngle: CGFloat) { // This is the pie chart segment context?.setFillColor(phenotypeColor.cgColor) context?.move(to: center) context?.addArc(center: center, radius: finalRadius, startAngle: myStartAngle, endAngle: myEndAngle, clockwise: true) context?.fillPath() (…) let gradientLayer = CAGradientLayer() gradientLayer.frame = self.bounds gradientLayer.colors = [UIColor.red, UIColor.blue] self.layer.addSublayer(gradientLayer) } 我没有看到屏幕上的任何渐变(只有白色的背景…)。 最后,我还试图在保存状态后clip上下文,但我不确定是否剪辑了任何东西,因为我没有看到任何渐变(无论是在整个视图还是在片段上)。 […]

UIColor SetFill不起作用

在这个代码中 for (int i=0;i<3;i++) { CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*(i+1), self.yShift+self.rectLen*10); CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*(i+1), self.yShift+self.rectLen*10+self.rectLen); CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*i, self.yShift+self.rectLen*10+self.rectLen); CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*i, self.yShift+self.rectLen*10); CGContextMoveToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*i, self.yShift+self.rectLen*10); } CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*4, self.yShift+self.rectLen*10); CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*4, self.yShift+self.rectLen*10+self.rectLen); CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*3, self.yShift+self.rectLen*10+self.rectLen); CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*3, self.yShift+self.rectLen*10); [[UIColor cyanColor] setFill]; [[UIColor blackColor] setStroke]; CGContextSetLineWidth(context, 1); CGContextDrawPath(context, kCGPathStroke); 用setFill方法行不起作用。 这可能是什么问题? 代码位于drawRect:方法中

使用iOS石英2D绘制饼图

我正在寻找一个教程,我可以在iOS中使用Core Graphics或Quartz 2D以编程方式绘制饼图。 我想了解如何绘制渐变的PIE图表,并在其中填充多色填充切片。 注意:不要查找Coreplot框架。 请分享一些相同的链接。

CGAffineTranformRotate atan2不准确

我正在进行我的视图转换,总是发生奇怪的事情,我的意思是我用这个代码计算angular度: angle = atan2f(currentTouchPoint.y – center.y, currentTouchPoint.x – center.x) – atan2f(previousTouchPoint.y – center.y, previousTouchPoint.x – center.x); 视图旋转但不正确。 我的意思是它在正确的方向旋转,但angular度总是不准确的+/- 0.05弧度。 而当我再次点击时,视图旋转到适当的位置 。 任何adivices? 逗号后的angular度精确到5个位置对我来说很重要。 Some NSLog to show you the problem: First rotation first tap and second tap 2012-01-07 01:01:26.283 Wheel[9080:707] Angle: 0.598412 2012-01-07 01:01:29.281 Wheel[9080:707] Angle: -0.070008 Second rotation first tap and second tap 2012-01-07 […]

UITableViewCell自定义CG绘图iOS 7

我有一个UITableViewCell子类与以下drawRect:实现。 它将在单元格的底部画一条线,缩进30点以符合我们的devise。 tableView.separatorStyle被设置为UITableViewSeparatorStyleNone来代替这个自定义绘图。 – (void)drawRect:(CGRect)rect { [super drawRect:rect]; if (!_hideBottomLine) { CGContextRef ref = UIGraphicsGetCurrentContext(); CGContextSetShouldAntialias(ref, NO); CGContextSetStrokeColorWithColor(ref, [UIColor colorWithWhite:0.75 alpha:1].CGColor); CGContextSetLineWidth(ref, 1); CGContextMoveToPoint(ref, 30, CGRectGetMaxY(rect)); CGContextAddLineToPoint(ref, CGRectGetMaxX(rect), CGRectGetMaxY(rect)); CGContextStrokePath(ref); } } 在iOS 6 SDK和iOS 6 SDK中构build时,这在iOS 6和iOS 7中运行良好。 现在我正在使用iOS 7 SDK进行构build,不会出现这一行。 我在iOS 7 SDK中错过了一些CG绘图的改变吗? 编辑: 所以我现在意识到有更好的方法来在iOS 7中使用cell.separatorInset来做到这cell.separatorInset ,我也发现了一些其他类似的CG代码,我写的工作。 所以我认为这个问题是孤立的实施drawRect:在UITableViewCell 我仍然喜欢如何在iOS 7上的单元格自定义绘图的答案。

向UITextView添加大纲/描边

我想为用户键入的可编辑的UITextView文本添加一个大纲或描边。 完全像memes: http : //t.qkme.me/3oi5rs.jpg 我必须使用UITextView因为我需要多行支持。 我已经尝试了所有的方法,并得出了我必须使用CoreText的结论。 我得到了几乎所有的解决scheme工作,但卡在文本视图中的文本包装点。 我在UITextView的subview的drawRect例程正确地绘制轮廓文本,直到文本换行。 即使当文本用户input被包装,我绘制的大纲文本不。 这是我的drawRect方法的实现: https : //gist.github.com/4498988 。 在第29行,我正在使用char封装: CTLineBreakMode linebreakmode = kCTLineBreakByCharWrapping; 我已经尝试了wordwrapping选项(这也是默认的),没有用。 我的问题是:如何获取我正确绘制的文本,使其显示为input文本的轮廓?