C++;GUI开发-位图与矢量图形CPU使用情况 我目前正在设计和开发C++中的一些音频应用程序(使用JRUE框架)的GUI。

C++;GUI开发-位图与矢量图形CPU使用情况 我目前正在设计和开发C++中的一些音频应用程序(使用JRUE框架)的GUI。,c++,performance,graphics,bitmap,juce,C++,Performance,Graphics,Bitmap,Juce,到目前为止,我一直在使用位图图形创建自定义滑块和刻度盘,通过使用“胶片带”样式的图像来设置组件的动画(这意味着当用户与滑块交互时,它会触发一种方法来更改胶片带图像的偏移以更改组件的外观)。根据原始图像的大小和“帧”的数量,CPU的使用水平会发生很大的变化 首先,就CPU消耗而言,最有效的位图文件格式是什么?目前我正在使用PNG图像 第二,对这些图形组件使用矢量图形会更有效吗?我理解位图和矢量图形之间的主要区别,但我没有找到任何关于它们在GUI交互方面CPU使用水平的信息 或者CPU的使用会取决于

到目前为止,我一直在使用位图图形创建自定义滑块和刻度盘,通过使用“胶片带”样式的图像来设置组件的动画(这意味着当用户与滑块交互时,它会触发一种方法来更改胶片带图像的偏移以更改组件的外观)。根据原始图像的大小和“帧”的数量,CPU的使用水平会发生很大的变化

首先,就CPU消耗而言,最有效的位图文件格式是什么?目前我正在使用PNG图像

第二,对这些图形组件使用矢量图形会更有效吗?我理解位图和矢量图形之间的主要区别,但我没有找到任何关于它们在GUI交互方面CPU使用水平的信息

或者CPU的使用会取决于所使用的特定方法/函数/库/框架吗

谢谢

或者CPU消耗将取决于所使用的特定方法/函数/库/框架

任何这些事情都可能影响它

基于像素的图像越大,从磁盘上读取可能需要一段时间。压缩类型可能需要更多的时间来解压缩。加载时,矢量渲染可能需要更多时间

尽管如此,我绝对不会期望您选择的图像类型对其性能有任何影响。由于您没有提供代码示例,因此很难再进行推测


通常,您会期望在加载图像时会产生图像的运行时成本。因此,无论何时创建图像对象。如果你在所有地方都创建了一个图像,那么它可能会很昂贵。您的胶片带可能正在重新创建图像,而不是加载一次并缓存它们。

在选择位图与矢量图形之前,请调查图形处理器是否支持矢量或位图图形。有些东西需要很长时间才能画成向量

您尝试过双缓冲吗?
这是在显示器(图形处理器)加载另一个缓冲区时写入内存中的缓冲区

从资源加载位图一次。将它们存储为内存快照,以避免从格式转换它们的额外成本

您的图形处理器支持“blitting”吗? Blitting是图形处理器可以复制内存中的矩形区域(位图)并在显示之前显示它以及应用可选操作(如使用现有位的XOR)

总结: 若要提高渲染速度,请仅将文件中的图像转换为位图形式一次。把这个放在某个地方。根据需要参考此转换后的位图。接下来,研究并实现双缓冲。最后,调查并使用位位位位位或位位位位


其他优化规则也适用于此,如审查设计、删除需求、循环展开、通过指针传递图像与复制图像,以及使用布尔逻辑和卡诺(sp?)映射减少“如果”语句,渲染矢量图形的计算要比将位图的矩形区域点显到屏幕上花费更长的时间。但对于基本的UI内容,两者都不应该特别密集

你可能应该做一些分析。也许你重新绘制的频率比需要的要高很多。或者,每次尝试从PNG中提取图像时,PNG都会被解码。(我对朱斯不熟悉。)


对于纯Windows应用程序,我可能会在启动时将矢量图形渲染成设备相关的位图,然后从位图快速切换到屏幕上。使用vector可以使您获得DPI独立性,而从设备相关位图进行闪烁是绘制像素块的最快方法。我相信颜色匹配是在渲染设备相关位图时完成的,因此屏幕绘图上甚至没有ICM开销。

矢量图形很久以前就被抛弃了-位图图形更具性能。问题是,您可以将位图发送到GPU一次,然后通过一个简单的副本将其永久渲染

其次,GPU使用自己的纹理压缩。我相信DirectX是DXT5,但是当GPU看到纹理时,它并不关心你从哪里加载它


然而,一个现代的CPU,即使是一个蹩脚的集成GPU,在简单的GUI呈现上也应该绝对没有问题。如果你在挣扎,那么是时候再看看你正在使用的技术了。也许你的框架速度慢,或者你对它的使用不太理想。

根据我对这个问题的理解,这是普通的PC硬件(肯定支持加速光点),但他使用的是平移变换+剪辑来选择胶片带的一部分,而不是直接光点适当的矩形。blit可能会更快。一些图形处理器可以在一次操作中执行blit和clip。剪辑操作可以作为alpha通道或矩阵提供。位图在静态图形中表现良好。对于动态图形,位图只需一个自由度就可以执行,但一旦需要更多的自由度,预渲染图形的内存需求就会变得非常昂贵。@Ben Voigt:对于OP描述的用例,只需移动位图就可以了。