热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

关于c:最佳绘图方法

Best Drawing approach我在 wxWidgets 中开发了一个应用程序,我在其中使用位图进行绘图。所以当我的应用程序第一次启动时,它会从文件中


Best Drawing approach


我在 wxWidgets 中开发了一个应用程序,我在其中使用位图进行绘图。所以当我的应用程序第一次启动时,它会从文件中读取坐标并相应地画线。该应用程序还从网络接收UDP数据包,UDP数据包还包含一些必须在屏幕上绘制的xy坐标信息,所以当接收到数据包时我重新绘制位图图像,并显示在屏幕上,我还需要刷新位图在鼠标移动事件上,因为在鼠标移动时,我必须在屏幕上绘制一些新的绘图。

所有这些都会增加运营成本并减慢我的 GUI。因此,请向我建议一些您认为在这种情况下可能有效的替代绘图方法。

我在谷歌上搜索并得到了OpenGL的选项,但由于时间紧迫我不想使用openGL,因为我没有任何OpenGL的经验。



相关讨论




  • 你有 1337 分。我不喜欢那样。赞成:P


  • 你不能在内存中保存一个位图实例,只向它绘制新信息,而不重绘整个东西吗?并将位图拉伸到屏幕...


  • @freerider,我正在绘制一些关于内存的特定信息,但是当我必须从位图中删除现有线条并绘制新线条时,在这种情况下我必须重新绘制整个位图。


  • @Siddiqui 你不能做一个位图缓存,其中包含多个时间点的线条图像。然后你只需要组合几个位图(只要使用 XOR,如果背景是白色的)并将剩余的线绘制到结果。


  • @freerider,假设我有一个主位图(GUI的背景)和一个与主位图异或的多边形,现在从网络接收到一个数据包,该数据包已经更新了多边形的坐标,那么如何在没有更新多边形的情况下更新多边形重绘主位图?


  • @Siddiqui 保存第一个多边形坐标,绘制多边形。获取更新后的坐标时,仅擦除位图中的第一个多边形,重新绘制新的多边形。换句话说:删除并仅绘制图像的所需部分......


  • @freerider,一旦我用主位图对多边形进行异或运算,我该如何擦除它?


  • @Siddiqui 将颜色设置为多边形所在的背景。


  • @freerider,它的彩色背景图像(不同的元素有不同的颜色表示)。


  • >一旦我用主位图对多边形进行异或运算,我该如何擦除它?再次异或! (让我感到困惑的是它在第一个 XOR 之后的样子,因为它是彩色的......)


  • 让我直截了当地说:你有一个必须用鼠标绘制或从网络获取的形状填充的位图。一段时间后,必须重新绘制许多形状,这会使 GUI 陷入困境。您可以通过计算哪些形状不会改变并将它们绘制到第二个位图来优化,该位图用作新形状的新绘制的开始缓冲区?


  • @freerider,感谢您的宝贵建议。当然,这种方法会以某种方式有效,但是您能否建议我更多其他方法来更有效地实现这一目标?


  • 只是游戏编程的一些基本经验法则:最大化数据的直通输出,搜索可以一次绘制多个形状的绘图函数。最小化运行时的计算:如果您可以为已绘制的形状提供多个缓存,请使用它。网上有很多有用的游戏开发教程。最后:使用另一个可以处理硬件加速并具有更好性能的 API。






听起来好像您的问题是您的 GUI 对用户输入没有响应,因为应用程序正忙于重绘显示。这类问题有几个通用解决方案。

  • 使用工作线程在内存中绘制位图。在此过程中,主线程可以继续与用户交互。重新绘制位图后,工作线程向主线程发出信号,然后主线程将完成的位图复制到屏幕上 - 这非常快。


  • 使用主线程将位图直接绘制到屏幕上,但在绘制代码中调用 wxApp::Yield()。这将允许 GUI 在漫长的绘图过程中保持对用户的响应。

  • 选项 1 是"最好的",尤其是在多核机器上运行时,但要保持两个线程同步并防止它们之间的争用是一个挑战,除非您在多线程设计方面有丰富的经验。选项 2 更简单,但您仍需注意用户交互不会在第一个绘图过程完成之前开始另一个绘图过程。



    相关讨论




    • 这不会改变任何东西,"绘制记忆"是没有意义的(否则你会在哪里绘制?)。使用 2 个线程,一个用于绘图,一个用于执行代码并不是一个坏主意,但您必须将这两个线程连接在一起(即绘图时不计算,计算时不绘图,这意味着低收益)。 OP 想要一个简单(或不太复杂)的解决方案来解决他的问题,解决方案是"不要每帧更新 GUI,因为这需要时间"。喜欢与否:-)






    保存要绘制的数据,而不是总是刷新位图,并让主循环不时刷新位图。

    这样您就可以让程序永不停机。不利的一面当然是反应性会降低(即当数据到来时,它不会在屏幕上再显示 20 毫秒而不是立即显示)。






    推荐阅读
    • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
      本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
    • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
    • 如何用UE4制作2D游戏文档——计算篇
      篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
    • 计算机存储系统的层次结构及其优势
      本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
    • 开发笔记:计网局域网:NAT 是如何工作的?
      篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
    • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
    • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
    • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
    • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
    • Asp.net Mvc Framework 七 (Filter及其执行顺序) 的应用示例
      本文介绍了在Asp.net Mvc中应用Filter功能进行登录判断、用户权限控制、输出缓存、防盗链、防蜘蛛、本地化设置等操作的示例,并解释了Filter的执行顺序。通过示例代码,详细说明了如何使用Filter来实现这些功能。 ... [详细]
    • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
      本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
    • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
    • java线程池的实现原理源码分析
      这篇文章主要介绍“java线程池的实现原理源码分析”,在日常操作中,相信很多人在java线程池的实现原理源码分析问题上存在疑惑,小编查阅了各式资 ... [详细]
    • 本文摘自JavaGuide。1、简单易学;2、面向对象(封装,继承,多态);3、平台无关性(Java虚拟机实现平台无关性);4、可靠性;5、安全性;6、支持多线程(C++语言没有内 ... [详细]
    • Ansem 最新雄文:软着陆后,加密市场下阶段趋势与核心叙事
      市场最糟糕的时候已经过去,以太坊合并前不太会看到新的低点;但仍需来自关注宏观市场的不确定风险。撰文:Ansem ... [详细]
    author-avatar
    他乡绿树_762
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有