【问题标题】:Rendering image on the screen efficiently with multi-platform support?通过多平台支持有效地在屏幕上渲染图像?
【发布时间】:2012-07-07 14:00:48
【问题描述】:

我正在制作某种图像查看器/编辑器程序,它可以在所有 3 个主要平台上运行。

我知道我不能使用 OpenGL,因为这个程序应该可以使用最糟糕的 GFX 卡,这意味着可能没有可用的 OpenGL 驱动程序。

其他程序如何在不使用硬件加速的情况下如此快速地在屏幕上绘制? (GFX 卡)。

我以前使用 SDL 在屏幕上渲染像素,这可以解决吗?还是应该为所有 3 个主要系统(Windows、Mac、Linux)分别实现图像渲染?如果是这样,这 3 个系统要使用哪些库?

我不需要任何花哨的动画,只需要简单的静止图像,我可以放大/缩小并用鼠标移动。我不知道图像移动是如何工作的,因为那必须更新屏幕上的所有像素,这会很慢,有什么技巧可以优化吗? (没有硬件加速)。

例如Paint Shop Pro 7的图像查看非常优化,我认为它根本不使用我的GPU,而且速度也很快,我自己如何才能达到那个速度?

【问题讨论】:

    标签: c++ image visual-c++ rendering multiplatform


    【解决方案1】:

    OpenGL 适用于所有三个平台(windows、linux、mac)。即使在最糟糕的图形卡上也支持它的固定管道。

    图像渲染可以使用纹理完成,并且每张卡都支持。

    鼠标操作必须在 SDL(或其他框架)中完成。

    如果你选择不使用opengl,你可以使用qt,它几乎是平台无关的。

    【讨论】:

    • OpenGL 的问题是我必须一次将整个图像推送到 GPU 内存中,即使在我的机器上也很慢。相反,我只会将其推送到 RAM 并以当前缩放级别逐像素渲染图像。也许以 60fps 的速度将全屏像素发送到屏幕内存已经足够快了,上次我尝试时,我能够以最大 1024x768 分辨率或类似的分辨率做到这一点。另外,如果我不需要任何特殊效果或实时动画,我看不到使用 OpenGL 的意义:毕竟,我只渲染图像一次,然后将其保存在缓冲区中。
    • 你知道qt的速度有多快吗?是否愿意展示一些使用 qt 制作的程序,它们在屏幕上显示可以平滑滚动的大图像?
    • @Rookie 除了需要更多内存之外,我认为它会比 opengl+sdl 慢。如果你受到硬件的限制,那么你无能为力
    【解决方案2】:

    为了实现多平台绘图,我所做的是在每个平台的绘图例程(Windows 的 Winforms 或 WPF、OS X 的 Core Graphics 和 Linux 的 Cairo)之上编写一个抽象层。这里是开源的:https://github.com/picoe/Eto

    目前正在用于绘图应用程序,它支持动画,因此在许多情况下都足够性能:http://picoe.ca/products/pablodraw

    您可能喜欢也可能不喜欢的一件事(取决于您如何看待它)是它是用 .NET/C# 编写的。

    【讨论】:

    • 还有其他项目使用它吗?我无法在 Pablo Draw 中对其进行全面测试,因为它不支持缩放或拖动图像,所以我可以看到它的性能有多快。
    • PabloDraw 确实支持缩放(View->Zoom),它使用图像缩放来执行缩放,如果您选择一个区域并按'c'键复制,它会显示图像移动和鼠标一起。目前正在使用它构建一些商业软件,但我无法链接到任何东西,抱歉。
    • 另一个注意事项是当你滚动时,它实际上是在你移动时绘制画布(它不是静态的)。因此,即使是滚动速度,您也应该对它的性能有所了解。
    • 问题是我无法在该程序中滚动...我尝试了缩放,但它什么也没做。缩放工作的唯一方法是当我将窗口缩小时。另外,我什至无法编辑我打开的图像(?)
    • 这是一个 ansi/ascii/ripscrip 编辑器,它不会编辑像 jpg/png/etc 这样的图像,它只能查看那些。
    猜你喜欢
    • 2011-12-09
    • 2015-01-31
    • 2013-12-31
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 2015-12-14
    相关资源
    最近更新 更多