【问题标题】:What image format can c# load fastest?c#能最快加载什么图片格式?
【发布时间】:2012-11-01 11:35:11
【问题描述】:

这似乎是一个奇怪的问题,我不知道图像的格式,所以我就继续问......

我正在制作一个使用按钮网格的扫雷游戏(也与不同的事物相关),然后我正在使用backgroundImage 向按钮添加一个精灵。如果网格是 9x9 就可以了。 15x15 它会减慢速度,而 30x30 你可以明显地看到正在加载的每个按钮。

这引发了我的问题:哪种图像格式加载速度最快?显然,文件大小会影响加载速度,但是,我想知道一个 jpeg(与 gif 文件大小相同)是否会加载得更快。或 bmp、png 等。

我问这个是为了看看我是否可以让我的网格使用不同的格式加载得更快。

谢谢!

【问题讨论】:

  • 您是否尝试过针对您的代码运行分析器以确定导致速度下降的原因是什么?它可能不是导致它的图像的渲染。你的 UI 渲染效果如何?
  • 您是否尝试过将应用程序中的图像作为嵌入式资源包含在内?

标签: c# winforms performance image


【解决方案1】:

您想要一种绘制更快的图像格式。只有一种,像素格式直接匹配视频适配器的设置,可以直接复制像素数据,无需格式调整。

在大多数现代机器上,这是 PixelFormat.Format32bppPArgb。它的绘制速度比其他所有速度快 10 倍。

从资源或文件加载图像时,您不会得到该格式,您必须create it

请注意,如果网格中的每个单元格都是控件,这仍然不会为您提供出色的绘制速度。特别是如果它是一个按钮,它们的绘制成本非常高,因为它们支持透明效果。如果您在一个 Paint 事件处理程序中绘制 整个 网格,您只会在这里取得成功。就像表格一样。

一种完全不同的方法是用this hack 掩盖可见的延迟。

【讨论】:

  • 很好,内容丰富的答案。我尝试了您链接的hack,但是它可以工作-仅适用于在程序执行时创建的初始控件。例如,如果我在启动时创建网格按钮,它将完美运行。但如果说,我将网格大小从中等更改为硬,并创建从中等到硬所需的附加控件(另外 15 x 15 控件),它仍然会闪烁。你知道为什么会这样吗?此外,那个 PixelFormat.Format32bppPArgb 似乎很有趣。我会研究一下。
  • 您需要专注于“只有取得成功”的建议才能取得成功。表单中控件数量的合理上限是 50。这会创建与 Microsoft Outlook 一样多的窗口。
  • 好吧,我想黑客真的只是一种在问题上贴上创可贴的 hack n' slash 方法。我会尝试看看我是否可以弄清楚如何在网格绘图中只使用一个绘制事件处理程序。我正在寻找一些东西,但可能使用了错误的关键字。您能否向我发送一个参考,以允许一次绘制所有控件,而不是在每个控件的基础上喘气?谢谢。
  • 没什么大不了的,用Graphics类的方法就行了。如果您需要参考,请按 F1。
【解决方案2】:

使用 8 位 PNG 或 GIF 格式并减少调色板中的颜色数量。一些图像程序(例如 PhotoShop)允许您将图像保存到网络并微调图像设置。通过将调色板从 256 减少到类似 32,您可以大大减小文件的大小。图像的颜色越少,文件大小就越小。

PNG 有一个类似的功能,称为“隔行扫描”。您可能需要关闭此功能,以便更快地下载完整图像。

因为 8 位 PNG 和 GIF 格式可能会生成更小的图像文件,所以在为您的应用程序创建图形和插图时请记住这一点。尽量减少颜色数量并使用平面图形而不是照片。通过这种方式,您可以使用 16 种颜色的调色板创建图像,同时保持文件大小极小且加载速度极快。

最好的问候

【讨论】:

    【解决方案3】:

    您是否在每次绘制按钮时都重新加载图像?如果是这样,那就是你的问题 - 使用缓存解决它。

    您是否以原始尺寸绘制图像?运行时重采样会影响性能。

    【讨论】:

      【解决方案4】:

      使用 PNG 或 GIF 这是更快的图像类型

      【讨论】:

        猜你喜欢
        • 2011-12-24
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多