- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这对于 StackOverFlow 来说可能是一个完全不合适的问题,但我不知道还能转向哪里,阅读了一堆关于它们的在线资料*,我坚持理解什么是上下文实际上是。以及它存在的原因、方式和位置。
存在的问题,我知道,但我正在努力理解这些东西。
/* 是的,包括相关的 Apple 文档,我已经阅读了很多。假设我很愚蠢,并尝试以一种比技术上混淆的废话和“你只需要它”的缩写形式更简单、更容易理解甚至更有先见之明的方式回答以下关于上下文是什么的问题所有其他人。如果你做不到,那就随心所欲地贬低我,贬低我。 */
上下文?它们有多少,它们是否有名称或其他 ID,是否可以对它们进行排序、转换(旋转、位置、比例、倾斜和不透明度变化)。它们可以分层,还是以某种方式固定在其他东西上,这是一种 child 关系还是 parent 关系?它们可以链接或嵌套吗????等等等等
我根本不明白它们是什么。是的,在你问之前,我确实感到很愚蠢,因为我没有立即理解其他人似乎只是通过将它们称为“上下文”来“理解”的东西。
我知道我必须吸引这些东西,如果我不这样做,什么也不会发生,但这是对它们是什么、为什么和如何成为/现在以及它们的需求、潜力的可能理解的终结,没有更好的术语,实际用途都是无形的。
我完全不知道这些东西是什么。
编辑:添加。以文档中的示例为例:
“位图图形上下文接受指向包含位图存储空间的内存缓冲区的指针。当您绘制到位图图形上下文中时,缓冲区会更新。释放图形上下文后,您有一个以您指定的像素格式完全更新位图。"
Ok... 释放,并拥有,(在哪里),可以用它做什么?它从哪里发布到哪里?
这是不是说上下文是屏幕区域的“假装”表示,可以在不直接在屏幕上绘制的情况下绘制到屏幕区域,然后可以将其映射到屏幕上?这是抹黑吗?在进行全屏 Retina iPad 图形绘图时,这会占用大量内存吗?
如果是这样...那么这个上下文有一个转换不是很有意义吗?它可以相对于要绘制的位置旋转、缩放和重新定位吗?是否可以复制和旋转?
如果它被转换,它的内容是如何缩放的而没有别名问题。等等等等
这是否意味着可以有多个相同类型的上下文,并且可以使用不同级别的不透明度和不同的混合模式来混合它们?
这些文件似乎最多只能部分解释这个东西是什么。似乎它就在那里,除了我之外,每个人都很容易掌握。
有没有人可以简单地解释一下 wtf it IS?因为即使只是模糊地解释什么是上下文,也可能让我走上正确的道路,立即获得所有其他内容。
最佳答案
CoreGraphics 上下文表示绘图状态。它包含诸如当前变换矩阵、要绘制的任何线条的宽度和高度、填充颜色、描边颜色以及计算机应该如何绘制东西的一堆其他信息。您可以将其想象为某种 C 结构(尽管它是否无关紧要 - 它可能是 C++ 对象、Objective-C 对象或其他对象)。它可能看起来像这样:
struct CGBitmapContext {
void* bitmapData;
UInt32 rowBytes;
float currentTransform [4][4];
float lineWidth;
CGColorRef fillColor;
CGColorRef strokeColor;
// ... other graphics state needed for drawing ...
};
当您发出绘制命令时,例如调用 CGContextFillRect()
,它使用该状态来决定绘制的方式和位置。它将使用当前变换矩阵变换您传入的矩形,然后用填充颜色填充它。
但是您不直接处理 CGContext
。相反,您有一个 CGContextRef
,它是指向上述结构(或对象,或任何实际内容)的指针。因此上下文驻留在 CGContextRef
指向的地址。当您调用 CGContextRelease()
,如果上下文的保留计数为 0,则可能使用 free()
或 delete
或 释放结构或对象或其他内容的内存>-发布
。
您可以拥有任意类型的上下文,只要内存适合。他们都是独立的。如果您正在使用位图上下文,释放上下文并不一定会释放位图数据。 (我相信这取决于您如何创建上下文。)如果需要,您可以使用来自不同上下文的数据混合在一起。如果需要,您可以用它们制作 CGImages,或者将它们上传到视频卡以用于 OpenGL。您可以随心所欲地使用它们。
在 MacOS 9 时代,这更加令人困惑,因为没有上下文。每次要绘制时都必须设置状态。如果您不小心,之前的函数可能会将状态设置为奇怪的状态。如果您没有注意到状态已更改,并且没有将其更改回您想要的状态,则绘图看起来会很糟糕。有了上下文,您可以使用 CGContextSaveGState()
和 CGContextRestoreGState()
保存状态并恢复它,并且您可以使用不同的上下文在同一窗口中绘制到不同的 View , 例如。这大大简化了绘图。
关于ios - Core Graphics 上下文,它们是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21795969/
我想知道如何在 OCaml 中设置文本大小。我尝试了 Graphics.set_text_size,我猜这应该可以解决问题。 但是无论我输入 set_text_size 200 还是 set_text
我想使用mathematica 为我正在写的书绘制图表。我想在mathematica中画一个图,将其保存为图片,然后将其导入到quarkxpress中,最后将其导出为pdf。 我的问题是最好使用哪种格
在顶层加载 Graphics 模块时,我收到一条错误消息“找不到 graphics.cma”。 我使用的是 OS X,而且我很确定我已经正确安装了 OCaml,因为我已经使用了大约一个月了。所以看起来
我知道 DDS 文件的存在,允许在 as/400 上对显示图形进行编程,但是还有其他方法吗? 具体来说,我想要做的是直接操作终端缓冲区,以便能够显示除文本之外的任何其他内容。例如,终端如下所示: 假设
Graphics.Save 与 Graphics.BeginContainer 有何不同? 最佳答案 看看here : The documentation does not differentiate
由于 Gdiplus::Graphics::DrawGraphics(Graphics*, x, y) 不存在,执行此类操作的最佳方法是什么? 例如,创建一个 Graphics 对象,使用各种 Dra
你能看出这有什么问题吗: (define (box d x1 y1 x2 y2) ( (graphics-draw-line d x1 y
我想编写一个 2D 游戏引擎。我遇到的问题(我不使用opengl之类的东西,所以我用cpu渲染)是,我通过graphics.drawImage()只得到7fps;您有任何加快速度的建议或其他替代方案吗
我在某些代码中发现了渲染错误,并找到了解决方法,但我想知道为什么我会得到不同的行为。在旧代码中,背景(有时)会呈现为白色,尽管在调试时 getBackground() 会返回正确的颜色。 旧代码: @
有谁知道是否有办法(也许通过外部API)将图形绘图/转换为多个图形?这个想法是同时保存 PNG 和 PDF(使用 Java IText 库)。 最佳答案 您可以将 Graphics 对象写入(java
我试图了解如何在英特尔芯片组上以 x86 保护模式绘制简单图形。我已经(有点)知道如何使用 VGA 接口(interface)来做到这一点,并且我正在尝试了解如何使用 G35 Express 来做到这
在我的应用程序中,我生成了一个条形码图像,该图像是根据用户使用 OpenFileDialog 上传的文件中的数据生成的。我的目标是允许用户在屏幕上查看条形码数据和图像本身,打印并使他们能够将两者保存为
我是 Java 新手,我只是想得到一些简单的东西,可能类似于 Zelle's graphics对于Python。 最佳答案 Java 类 Graphics和 Graphics2D应该包含 Zelle
如何将 FMX.Graphics.TBitmap 转换为 VCL.Graphics.TBitmap 或 Vcl.Imaging.PngImage.TPngImage? 我的项目中有FMX表单和VCL表
我需要找到用于间距目的的字体大小,发现这很有帮助:https://docs.oracle.com/javase/tutorial/2d/text/measuringtext.html 但是,我不确定如
我有一点奇怪的错误是由一个看似简单的问题引起的。 在我的源代码中,我尝试使用 QQuickPaintedItem 来呈现 QWidget 派生类 (QPushButton) 的整体外观,然后将其绘制到
我正在尝试通过具有以下规范的设备来解决 Android 应用程序崩溃的问题: Device PAP3400DUO 1 Manufacturer — Android version Android 4.
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我有这行代码: mBgTransition = (TransitionDrawable) mSwitchBg.getBackground(); 背景曾经是一个常规的可绘制对象, 但现在是 9 个补丁
当我的应用程序在启动时崩溃时尝试实现自适应图标时出现此错误。 我无法想象为什么会收到此错误,因为在下面错误日志中提到的文件(MainActivity 和 BaseActivity)中,我没有使用Ada
我是一名优秀的程序员,十分优秀!