Tag: 核心graphics

把两个CGPoints变成一个CGRect

我怎么能,给两个不同的CGPoints ,把他们变成一个CGRect ? 例: CGPoint p1 = CGPointMake(0,10); CGPoint p2 = CGPointMake(10,0); 我怎样才能把它变成一个CGRect ?

iOS:提高图像绘制的速度

我有一个图像序列,我想animation( UIImageView支持一些基本的animation,但它不足以满足我的需要)。 我的第一个方法是使用UIImageView并设置image属性时,图像。 这太慢了。 速度不佳的原因是由于图像的绘制(这令我感到惊讶,我认为瓶颈将会加载图像)。 我的第二种方法是使用通用的UIView并设置view.layer.contents = image.CGImage 。 这并没有明显的改善。 这两种方法都必须在主线程上执行。 我认为速度不佳是由于不得不将图像数据绘制到CGContext 。 我怎样才能提高绘图速度? 是否有可能在后台线程上的上下文?

UIGraphicsBeginImageContextWithOptions和multithreading

我对UIGraphicsBeginImageContextWithOptions和线程有点困惑,因为根据UIKit函数参考 UIGraphicsBeginImageContextWithOptions只能在主线程上调用。 当被调用的时候,它会创build一个基于位图的上下文,这个上下文可以用CoreGraphics的函数或者像drawInRect: for UIImage , -drawInRect:withFont: for NSString等方法来处理。 对于CoreGraphics的绘图,一切都很清楚 – 你将一个CGContextRefparameter passing给每个函数,但UIKit绘图方法使用栈中的当前上下文。 在iOS 4.0新增function的发行说明中写道 在UIKit中绘制graphics上下文现在是线程安全的。 特别: – 用于访问和操作graphics的例程 上下文现在可以正确处理驻留在不同线程上的上下文。 – string和图像绘制现在是线程安全的。 – 在多个线程中使用颜色和字体对象现在是安全的。 到现在为止还挺好。 有趣的部分是我有一个项目,在那里我通过创buildUIGraphicsBeginImageContextWithOptions上下文创build了多个图像,并创build了多个图像,但是当这些操作碰巧比较费时,我只是在后台线程中移动绘图,一些animation显示在屏幕上,一切正常 – 没有崩溃,没有泄漏。 图像绘制,因为它们是预期的,它似乎UIGraphicsBeginImageContextWithOptions为后台线程创build一个上下文,一切似乎都很好。 所以我的问题是: – 为什么有必要只调用UIGraphicsBeginImageContextWithOptions在主线程,因为它似乎在后台工作正常? – 如何使用UIImage的-drawInRect:方法在后台线程中,我没有当前的上下文,我似乎无法创build一个,因为我不能在那里调用UIGraphicsBeginImageContextWithOptions ? – 什么是正确的方法来使用UIKit的方法背景image processing(我知道我也可以使用CGBitmapContextCreate ,但它既不推动创build的上下文到上下文堆栈,我似乎也能够做到这一点,以便使用-drawInRect: UIImage方法)?

在CoreGraphics / MapKit中debugging崩溃

当我的应用程序在iPhone上运行时,发生间歇性崩溃。 所有的崩溃是相同的,并以某种方式涉及MKMapView覆盖(MKCircleViews)。 从典型的iPhone 4s崩溃报告: 报告标题: Hardware Model: iPhone4,1 Process: EL-GPS-01 [1021] Path: /var/mobile/Applications/61288E15-74B5-45B9-99A9-E0B58C767816/EL-GPS-01.app/EL-GPS-01 Identifier: EL-GPS-01 Version: ??? (???) Code Type: ARM (Native) Parent Process: launchd [1] Date/Time: 2011-11-22 15:59:41.065 +0000 OS Version: iPhone OS 5.0.1 (9A405) Report Version: 104 Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Codes: KERN_INVALID_ADDRESS at 0x00000000 Crashed Thread: 6 和坠毁的线程: Thread 6 name: […]

保存animationGif时,iOS颜色不正确

我有这个很奇怪的问题。 我从UIImages创buildGIFanimation,大部分时间都是正确的。 但是,当我开始进入更大的图像,我的颜色开始消失。 例如,如果我做一个4帧32×32像素的图像不超过10个颜色没有问题。 如果我把相同的图像缩放到832 x 832,我会失去一个粉红色,棕色变成绿色。 @ 1x 32 x 32 @ 10x 320 x 320 @ 26x 832 x 832 这里是我用来创buildgif的代码… var kFrameCount = 0 for smdLayer in drawingToUse!.layers{ if !smdLayer.hidden { kFrameCount += 1 } } let loopingProperty = [String(kCGImagePropertyGIFLoopCount): 0] let fileProperties: [String: AnyObject] = [String(kCGImagePropertyGIFDictionary): loopingProperty as AnyObject]; let frameProperty […]

iOS:CGAffineTransformScale移动我的对象

build立在我之前提出的问题上。 试图转换标签的简单button。 我希望它缩小0.5,这是可行的,但由于某种原因,它也会移动对象。 标签向上跳转到左侧,然后转换。 – (IBAction)btnTest:(id)sender { [UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ lblTest.transform = CGAffineTransformScale(lblTest.transform, 0.5f,0.5f); }completion:^(BOOL finished) { if(finished){ NSLog(@"DONE"); } }]; }

使用核心graphics绘制浮雕圆弧

我正在试图实现一个自定义滑块,如下图所示。 到目前为止,我所做的是这样的 请帮我画出这种效果的弧线。 我的代码如下,我正在做的是使用CGContextAddArc与线宽kLineWidth绘制弧线。 – (void)drawThumbAtPoint:(CGPoint)sliderButtonCenterPoint inContext: (CGContextRef)context { UIGraphicsPushContext(context); CGContextBeginPath(context); CGContextMoveToPoint(context, sliderButtonCenterPoint.x, sliderButtonCenterPoint.y); CGImageRef imageRef = [UIImage imageNamed:@"circle25.png"].CGImage; CGRect rect = CGRectMake(sliderButtonCenterPoint.x – kThumbRadius, sliderButtonCenterPoint.y – kThumbRadius, kThumbRadius*2, kThumbRadius*2); CGContextDrawImage(context, rect, imageRef); //CGContextAddArc(context, sliderButtonCenterPoint.x, sliderButtonCenterPoint.y, kThumbRadius, 0.0, 2*M_PI, NO); CGContextFillPath(context); UIGraphicsPopContext(); } – (CGPoint)drawArcTrack:(float)track atPoint:(CGPoint)center withRadius:(CGFloat)radius inContext:(CGContextRef)context { UIGraphicsPushContext(context); CGContextBeginPath(context); float angleFromTrack = translateValueFromSourceIntervalToDestinationInterval(track, […]

如何在保持界面响应的同时以可接受的性能logging屏幕?

我在基于Objective-C的iOS应用程序中寻找有关性能问题的帮助。 我有一个iOS应用程序,使用CALayer的renderInContext方法捕获屏幕的内容。 它试图捕获足够的屏幕帧,使用AVFoundation创buildvideo。 然后将屏幕录制与其他元素结合起来用于可用性的研究。 在捕捉屏幕的同时,应用程序也可能会显示UIWebView的内容,通过networking去获取数据等等。Web视图的内容不在我的控制之下 – 它是来自网页。 这个设置正在工作,但你可能想象的是,它不是平稳的。 由于图层必须在主线程上呈现,因此比我想要的更多的UI争用。 我想要做的就是进行一个设置,将UI的响应优先于屏幕截图。 例如,如果用户正在滚动Web视图,我宁愿放弃录制的帧,而不是有可怕的滚动体验。 我已经尝试了几种技术,从dispatch_source合并到将框架捕获请求作为块提交给主要队列到CADisplayLink。 到目前为止,他们似乎都performance相同。 当前正在屏幕的主视图的drawRect中触发帧捕获。 我在这里问的是:鉴于上述情况,你会build议我采取什么技术来实现我的目标? 我意识到答案可能是没有很好的答案…但是我想尝试一下,不过听起来很古怪。 注意:无论什么技术都需要App Store友好。 不能使用显示logging器使用/使用的CoreSurface入侵。 谢谢你的帮助!

在iOS上缩小图像的最省内存的方式是什么?

在后台线程中,我的应用程序需要从磁盘读取图像,将它们缩小到屏幕大小(1024×768或2048×1536)并将其保存到磁盘。 原始图像大多来自相机胶卷,但其中一些可能具有较大的尺寸(例如3000×3000)。 之后,在不同的线程中,这些图像经常会缩小到500×500左右的不同大小,并再次保存到磁盘。 这导致我想知道:在iOS,性能和内存方面,最有效的方法是什么? 我使用了两种不同的API: 使用来自ImageIO的CGImageSource和CGImageSourceCreateThumbnailAtIndex ; 绘制到CGBitmapContext并使用CGImageDestination将结果保存到磁盘。 两者都为我工作,但我想知道他们是否有任何差异的性能和内存使用情况。 如果有更好的select,当然。

绘制animation

我正在创build一个简单的应用程序,当用户按下button时,屏幕上会绘制一系列线条,用户将能够实时看到这些线条(几乎就像animation一样)。 我的代码看起来像这样(已简化): UIGraphicsBeginImageContext(CGSizeMake(300,300)); CGContextRef context = UIGraphicsGetCurrentContext(); for (int i = 0; i < 100; i++ ) { CGContextMoveToPoint(context, i, i); CGContextAddLineToPoint(context, i+20, i+20); CGContextSetStrokeColorWithColor(context, [[UIColor blackColor] CGColor]); CGContextStrokePath(context); } UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 我的问题是: 1)只要用户按下button,UIThread就会阻塞,直到完成绘制。 2)我无法一次一个地在屏幕上绘制线条 – 我试图直接在循环内设置UIImage,并尝试在循环内设置图层内容。 我如何解决这些问题?