c++ FLTK 图像重绘

Posted

技术标签:

【中文标题】c++ FLTK 图像重绘【英文标题】:c++ FLTK Image redraw 【发布时间】:2014-10-23 05:50:46 【问题描述】:

我正在制作一个简单的 FLTK 应用程序(在 linux 中),它需要在 FL_Window 中显示 PNG 图像。下一段代码:

Fl_PNG_Image* pngImg;
Fl_Box* boxImage;
boxImage = new Fl_Box(500, 470, 0, 0);
pngImg = new Fl_PNG_Image("main.png");
boxImage->image(pngImg);
boxImage->redraw();`

画好了。但是当我喜欢这个时:

我的形象毁了。我需要调用哪个回调来避免图像破坏?如何正确更新盒子?如何手动从磁盘重新加载图像?

【问题讨论】:

“将窗口移出屏幕”到底是什么意思? 我无法重新创建错误,但我在 Mac 上可能会以不同方式处理窗口管理。这行boxImage = new Fl_Box(500, 470, 0, 0); 困扰我:您正在定义一个大小为零的框。试试boxImage = new Fl_Box(500, 470, sx, sy);,其中sx 是图像的宽度,sy 是图像的高度,然后报告... 另一件可能要尝试的事情是fl_register_images() 但只是检查... 【参考方案1】:

试试这个:(来源:http://osdir.com/ml/lib.fltk.general/2004-07/msg00396.html

注意:由于我无法重新创建您的错误,因此我不确定它是否会解决它,但无论出于何种原因,您的主窗口在应该重绘时都没有被重绘,这似乎是合理的。

子类化父窗口并让它手动重绘其内容,并在移动时使用 Fl::check() 推动 FLTK 尽快完成它,以便您拥有类似的东西

class Mywin : public Fl_Window 
    void resize(int X, int Y, int W, int H) 
        Fl_Window::resize(X,Y,W,H);
        redraw();
        Fl::check();
    
public:
    Mywin(int x,int y,int w, int h) : Fl_Window(x,y,w,h) 
    
;

int main() 


    Mywin* win = new Mywin(20,20,800,800);
    Fl_Box* box = new Fl_Box(100,100,300,200);//for example


    Fl_PNG_Image* pngImg = new Fl_PNG_Image("main.png");
    box->image(pngImg);
    box->show();
    win->end();
    win->show();
    return (Fl::run());

【讨论】:

以上是关于c++ FLTK 图像重绘的主要内容,如果未能解决你的问题,请参考以下文章

FLTK 子窗口未在 Linux 上重绘

FLTK 值更改和重绘等到回调之后:有啥办法吗?

vue基本知识点

是否可以使用标准 C++ 线程而不是 FLTK 超时来更新窗口?

监控组选择生效时间的窗口

图像设置为零时UIImageView不重绘