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 图像重绘的主要内容,如果未能解决你的问题,请参考以下文章