日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FLTK学习笔记4-在FLTK中显示图片(上)

發布時間:2023/12/31 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FLTK学习笔记4-在FLTK中显示图片(上) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

FLTK學習筆記4-在FLTK中顯示圖片(上)

    • Fl_JPEG_Image和Fl_PNG_Image
    • Fl_Shared_Image
    • 程序示例

在FLTK中,并不是任何時候都可以繪圖的(當然也包括繪制圖片),一般來講我們只能在控件類中的 draw()方法中繪制所需要的圖案。

在FLTK中,顯示圖片通常有以下兩種方法:

  • 創建Fl_Image對象
  • 直接從圖片矩陣用fl_draw_image來繪制圖片
  • 創建Fl_Image對象的優點在于FLTK將會緩存Fl_Image對象,因此其重繪速率會比較快。

    直接繪制的優點在于更直觀,而且如果圖像數據更改的頻率比重繪的頻率高,則繪制速度更快。

    本篇文章用第一種方式繪制圖片。

    FLTK中的圖片類Fl_Image是所有圖片類的基類,這里我們主要關注它的子類Fl_JPEG_Image, Fl_PNG_Image和Fl_Shared_Image。

    Fl_JPEG_Image和Fl_PNG_Image

    Fl_JPEG_Image和Fl_PNG_Image分別用于載入.jpg和.png格式的圖片,其用法類似。這里以Fl_PNG_Image為例來演示其用法:

    Fl_PNG_Image tmp = Fl_PNG_Image("dune2000.png"); /* 創建了一個Fl_PNG_Image對象并載入一張圖片 */ Fl_Image* pImg = tmp.copy(400, 300); /* 對剛才載入的圖片進行縮放 */ pBox->image(pImg); /* 在pBox(一個Fl_Box控件)中顯示該圖片 */

    注意:

  • 這里tmp.copy()的返回值是一個指向Fl_Image對象的指針。
  • 這里利用Fl_Widget中image()方法來顯示圖片,另一種直接繪制的方法在下一篇介紹。
  • 在鏈接的時候可能需要加上-ljpeg -lpng這兩個庫,否則可能會顯示不出來圖片。
  • Fl_Shared_Image

    Fl_Shared_Image可以根據文件的后綴名載入對應圖片,其用法如下:

    Fl_Shared_Image* tmp = Fl_Shared_Image::get(dest); /* 載入圖片 */pImg = tmp->copy(400, 300); /* 對剛才載入的圖片進行縮放 */pBox->image(pImg); /* 在pBox(一個Fl_Box控件)中顯示該圖片 */

    注意:

  • 這里使用Fl_Shared_Image::get(dest);方法,而不是直接調用構造函數。
  • 程序一開始需要運行fl_register_images();,否則會報Segmentation fault的錯。
  • 程序示例

    #include <FL/Fl.H> #include <FL/Fl_Double_Window.H> #include <FL/Fl_Shared_Image.H> #include <FL/Fl_JPEG_Image.H> #include <FL/Fl_PNG_Image.H> #include <FL/Fl_Box.H> #include <FL/fl_draw.H> #include <iostream>void pngDisplay(Fl_Box* pBox, Fl_Image* pImg, char* dest){Fl_PNG_Image tmp = Fl_PNG_Image(dest); /* 創建了一個Fl_PNG_Image對象并載入一張圖片 */pImg = tmp.copy(400, 300); /* 對剛才載入的圖片進行縮放 */pBox->image(pImg); /* 在pBox(一個Fl_Box控件)中顯示該圖片 */ }void imageDisplay(Fl_Box* pBox, Fl_Image* pImg, char* dest){Fl_Shared_Image* tmp = Fl_Shared_Image::get(dest); /* 載入圖片 */pImg = tmp->copy(400, 300); /* 對剛才載入的圖片進行縮放 */pBox->image(pImg); /* 在pBox(一個Fl_Box控件)中顯示該圖片 */}int main(){fl_register_images();Fl_Double_Window* window = new Fl_Double_Window(500, 750, "圖片");Fl_Box* pBox1 = new Fl_Box(50, 50, 400, 300, "pBox1");Fl_Box* pBox2 = new Fl_Box(50, 400, 400, 300, "pBox2");Fl_Image* pImg = nullptr;Fl_Image* pPng = nullptr;pngDisplay(pBox1, pPng, (char*)"dune2000.png");imageDisplay(pBox2, pImg, (char*)"pal.jpg");window->end();window->show();return Fl::run(); }

    這里注意在編譯的時候記得加上-lfltk -lfltk_images -ljpeg -lpng命令(在MSYS2上還要加上-mwindows -DWIN32 -lole32 -luuid -lcomctl32)。

    運行結果:
    相關鏈接:
    專欄:FLTK
    FLTK學習筆記3-隨機點名器

    總結

    以上是生活随笔為你收集整理的FLTK学习笔记4-在FLTK中显示图片(上)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。