问题标签 [graphicscontext]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 给 UIImage 添加剪辑路径,将剪辑后的版本保存到 Documents 文件夹,然后显示
在我的应用程序中,用户从 UIImage 开始。根据用户输入,应用程序围绕图像的特定部分创建剪切路径。然后,我希望能够将该剪辑版本保存到应用程序的 Documents 目录中,以便以后显示。
据我所知,除了稍后显示剪辑的图像外,所有这些都进行得很顺利。一旦我尝试显示图像(通过添加自定义视图),我就会收到各种invalid context
错误,以及message sent to deallocated instance
. 虽然我不确定是什么导致了最后一个问题,但这是invalid context
我最关心的问题,因为图形上下文的概念对我来说一点也不熟悉。
以下是确切的错误:
在这一点上,我将发布创建剪切路径的代码,然后是尝试将剪切图像的上下文保存为新图像的代码,最后是尝试再次显示图像的代码。正如我上面所说,在我尝试再次显示图像之前,我不会收到错误消息。
创建剪切路径:
几乎我在上面的上下文和 contextRefs 上所做的一切对我来说都是魔法。这是我从 SO 的其他帖子拼凑而成的,基本上不知道它在做什么。令人震惊的是,我最终遇到了所有这些上下文错误,对吧?;)
保存图像,然后尝试立即显示(错误出现在最后一行):
该类ShowImage
是一个简单的UIView
子类。它所做的只是用指定的 初始化UIImage
,它的drawRect:
方法如下:
值得注意的是,即使在上述drawRect:
方法中的单行被调用之前,错误也会发生(我尝试在该行上放置一个断点,但应用程序首先崩溃)。
我知道这是很多代码,但那是因为我什至不知道从哪里开始调试这个。除了解决我的特定问题外,我还希望得到一个更广泛地解决我对上下文的使用/误用的答案。
linux - 在另一个进程中使用 GC(X11 图形上下文)
是否可以将 GC 从 process1 传递到 process2 并在那里使用它(我需要更新剪辑区域)?
我试图通过窗口属性传递 GC。但是我在那个 GC 上的 XSetRegion 调用上有 SEGFAULT。
ios - 在 iOS 上,当我们从上下文创建层并获取层的上下文后,这些上下文是如何相互关联的?
我们可以从当前图形上下文创建一个图层,然后获取图层的上下文:
所以我们现在有 2 个上下文:context
和contextOfLayer
. 这两种情况如何相互关联?contextOfLayer
实际上是层上下文指针数组的context
一部分吗?context
如果我使用 打印出它们的地址NSLog(@"%p", ...)
,它们有不同的地址,所以它们不是同一个对象。而且我认为contextOfLayer
不会影响上下文堆栈,所以它只是一个独立的上下文本身就“存在于那里”吗?
iphone - 如何捕获 UITableView / UIScrollView 的完整内容的 UIImage 并使其在 ios 设备上工作
我正在使用这段非常优雅的代码 获取 UIScrollView 的屏幕截图,包括用于捕获要导出到 UIImage 的 UITableView 的全部内容的屏幕外部分。
它在模拟器中运行得非常好,但是,当我在 iOS 设备(iphone 4s)上运行此代码时,调用此方法时会出现以下错误:
错误:
当表格视图内容大小在其范围内时,此代码运行良好,但一旦大于其范围(甚至 1 个像素),它就会进入上述错误的无限循环。但这仅发生在设备上。不是模拟器。
有任何想法吗?
ios - 图形上下文的概念是否与文件句柄非常相似?(在 iOS 和其他系统上)
有时图形上下文这个术语有点抽象。它们实际上是系统资源,但它们是来自显卡的资源,就像文件句柄是来自硬盘驱动器或任何永久存储设备的系统资源一样?
正如文件句柄有一些关于文件句柄是只读还是读/写的状态,以及下一次读取操作的当前位置——状态,图形上下文有关于当前笔画颜色、笔画宽度、或任何相关数据。(更新:在写入模式下,我们可以转到 200MB 文件中的任何点并更改数据,就像我们拥有 Graphics Context 的画布并在其上绘制东西一样)
所以图形上下文实际上是全局的、系统范围的资源。它们不是应用程序单例或任何东西的一部分,就像文件或文件句柄不是(必然)应用程序单例的一部分一样。
如果没有强大的图形卡(或者如果图形卡已经耗尽资源),那么操作系统可以使用位图的低级图形例程模拟图形上下文,而不是让图形卡处理它。
这就是图形上下文在 iOS 和大多数其他常见操作系统上的实际工作方式吗?
iphone - 在 iOS 上,为什么我们必须使用现有的 Graphics Context 创建图层?
在 iOS 上,我们可以CGLayerCreateWithContext
使用现有的 Graphics Context 来做 a ,我们会得到 a CGLayer
,我们也可以使用CGLayerGetContext
.
为什么我们必须CGLayer
使用现有的图形上下文来创建它?我们不能在没有任何图形上下文的情况下创建它吗?而当我们拿到这一层的Graphics Context时,它和原来的Graphics Context有什么关系呢?它们不能只是两个独立的、独立的图形上下文吗?
ios - 在 iOS 上,有没有办法在使用 UIGraphicsBeginImageContextWithOptions 创建 ImageContext 后获取它的大小?
如果使用以下方法创建图像上下文:
以后有没有办法获得上下文的大小?从上下文中获取图像时肯定有大小,但是在绘制时,是否还有一种方法可以获取它的宽度和大小?
ios - 确定 UIGraphicsBeginImageContext 使用 CGBitmapContextCreate 来创建图形上下文吗?
是否UIGraphicsBeginImageContext
用于CGBitmapContextCreate
创建图形上下文[更新:我在文档中找不到它],所以图形上下文是完全相同的吗?我也尝试过介入,UIGraphicsBeginImageContext
但调试器不允许我介入。
ios - iPad 2 与新 iPad 上 CGLayerCreateWithContext 的奇怪行为?
在 Single View App 中,FooView 是主视图。在 FooView 中drawRect
,如果我这样做了
我正在使用 aCADisplayLink
来调用[self.view setNeedsDisplay]
在视图控制器中调用的方法,以便使用该属性drawRect
每 1 帧、5 帧或 20 帧调用一次。frameInterval
在 iPad2 上,当 CGLayer 被数百个 6x6 点矩形填充时,绘制时间约为 0.011 到 0.012 秒,如 NSLog 语句所打印的那样。这能够达到60fps。(60fps 是每帧 0.01666 秒)
如果我将行更改为:
(使用NULL
代替context
)。然后时间大约是 0.014 秒,对于 60 fps 来说还是不错的。
但在新 iPad 上,情况正好相反:如果context
在这条线上使用,那么时间是惊人的 0.17 秒……这对于 6 fps 来说都不好。如果NULL
使用,那么时间是0.038,对于60 fps来说是不好的,但至少对于20 fps来说是好的,还是可以接受的。有谁知道它为什么会这样,以及如何让它在 iPad、iPad 2 和新 iPad 的所有平台上运行良好或更好地运行?
如果调用CGLayerCreateWithContext
withNULL
给出了 GPU 缓存的图形上下文,调用 withcontext
给出了位图上下文,那么为什么在 iPad 2 上调用CGLayerCreateWithContext
with实际上更快context
?
(我在新 iPad 上使用 iOS 5.1.1,在 iPad 2 上使用 iOS 5.1 ......这应该没有太大区别......而且我不想升级 iPad 2 以便我可以拥有另一个具有不同 iOS 版本的设备来测试我的应用程序)。
ios - 在 iOS 上,我们如何获取 GPU 上缓存的图形上下文?
也许第一个问题是:在 GPU 上缓存图形上下文是否有用或可能:在 iPad 1、2 和新 iPad 上,PowerVR用作 GPU,它是否将 RAM 用作图形内存?如果是这样,如果我们将图形上下文缓存在 GPU 上,它会有所帮助吗?
如果事实上可以,那么我们如何获得这样的图形上下文?有提到CGLayer
and CALayer
:CGLayer
可以缓存在 GPU 上,并且CALayer
经常缓存在 GPU 上,但是CGLayer
是从另一个上下文中获取的,使用CGLayerCreateWithContext
,并且该上下文应该是一个窗口图形上下文,它只提到了如何获取一个窗口Mac OS X 上的图形上下文,而不是 iOS。提到如何获取“View Graphics Context”的部分实际上与在CALayer中获取的上下文相同:CALayer开始display
使用drawInContext
Bitmap Graphics Context,看起来,最后drawRect
调用UIView
使用这个位图上下文,我不确定 CALayer 缓存在 GPU 上的想法实际上是指这个位图图形上下文还是它layer.contents
是一个 CGImage,所以缓存实际上是在这个图像上,而不是图形上下文。