c++ - 在 StaticBitmap wxWidgets 上更改图像

标签 c++ image bitmap wxwidgets

我想要一个窗口,其中的图片根据无限循环期间发生的事情而变化。

想象一下有人四处走动,当他离开给定的轨道时,程序应该显示一个指向轨道方向的箭头。因此我有一个程序可以确定用户和轨道之间的距离,但我不知道如何更新图像。

我将 code::blocks 与 wxWidgets 一起使用,并且认为我必须使用 wxStaticBitmap 类。 (如果有更好的方法,请告诉我。)

我试过:

while(true)
{
    updatePosition();
    if(userNotOnTrack)
    {
        if(trackRightOfUser)
        {
            StaticDirectionBitmap->SetBitmap("D:\\WindowsDgps\\WindowsDgpsGraphic\\arrow_right.png");
        }
    }
}

(请注意,此代码段主要是伪代码,StaticDirectionBitmap 部分除外。)

默认情况下,位图有一个“no_arrow”图像。有了这个我得到一个错误:error: no matching function for call to 'wxStaticBitmap::SetBitmap(const char [51])'|。我从文档中看到这行不通,但我不知道什么可以。

如果有人知道如何处理这个,我会很高兴听到。我记得几年前,当我在 C# 中尝试类似的东西时,由于线程安全而完全失败......我希望在带有 wxWidgets 的 C++ 中没有那么难。

最佳答案

SetBitmap 采用 wxBitmap 参数而不是字符串。所以调用应该类似于:

SetBitmap(wxBitmap( "D:\\WindowsDgps\\WindowsDgpsGraphic\\arrow_right.png", wxBITMAP_TYPE_PNG) );

确保在进行此调用之前已使用如下调用之一添加了 png 处理程序:

wxImage::AddHandler(new wxPNGHandler);

::wxInitAllImageHandlers();

执行此操作最简单的地方是在应用程序的 OnInit() 方法中。

如果你想从工作线程更新静态位图,你应该抛出一个 wxThreadEvent 然后在事件处理程序中调用 SetBitmap。 sample here展示了如何生成和处理这些事件。

关于c++ - 在 StaticBitmap wxWidgets 上更改图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40466428/

相关文章:

c++ - 如何将 C++ 字符串转换为 int?

html - 将图像粘贴到 div 的中心

javascript - canvas.toDataURL() 通过尝试调整 base64 字符串大小来生成黑色图像

c# - 使用 OLEDB 从 Excel 文件中检索图片

android - BitmapFun 示例存在缓存问题

c++ - 如何将 `boost::range` 迭代器与标准迭代器一起使用

C++ 多态性 : upcasting/re-downcasting and containers of base class, 缺失数据

c++ - 从基类方法调用虚方法

Android:调整图像一部分的大小和缩放

Android 平铺位图