【问题标题】:SFML is not rendering 8-bit bitmaps properlySFML 未正确渲染 8 位位图
【发布时间】:2019-08-02 20:41:13
【问题描述】:

使用 SFML,我可以使用以下代码渲染任何图片格式:

        SFML.Graphics.Image     img = new SFML.Graphics.Image("pic.bmp");
        SFML.Graphics.Texture   tex = new Texture(img);
        SFML.Graphics.Sprite    sprite = new Sprite(tex);
        renderWindow.Draw(sprite);

但这不适用于一些 8 位(256 色)格式的位图(扩展名为 .bmp 的文件)。看起来 SFML 库正在尝试以 16 位或 32 位读取它。

有什么办法可以解决这种情况吗?


更新:我已经打开了有问题的 bmp 文件,并以相同的格式(8 位)保存它们,然后 SFML 能够正确显示这些文件。但这只是一个测试,我不能用paint来做,我需要一个纯代码的解决方案。

【问题讨论】:

  • 您使用的是什么版本的 SFML.NET?我们正在使用 stb_image 加载图像。根据文档,它支持“BMP non-1bpp,non-RLE”。
  • 我正在使用 SFML 2.4.0,安装的 nuget 包名为“Graphnode.SFML.Net”,它是“SFML.Net 2.4 的分支,包括 x86 和 x64 版本的 CSFML”由 Laurent Gomila 和 Zachariah Brown 创建。
  • 我们最近发布了第一组官方的 SFML.Net NuGet 包,它们基于 SFML 2.5。可能想尝试一下,但我想它不会帮助您解决手头的问题:nuget.org/packages/SFML.Net

标签: c# bitmap rendering sfml


【解决方案1】:

如果在不同的应用程序中再次重新保存文件可以解决问题,那么在我看来,这听起来像是 stb_image 不支持的特殊格式,因此 SFML 也不支持。

我强烈建议使用 PNG 格式,因为它支持适当的透明度并使用无损压缩。

【讨论】:

    猜你喜欢
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多