[C++] 176 FLTK : 画像の強制リサイズ Fl_Image 

[M1 Mac, Big Sur 11.6.8, clang 13.0.0, FLTK 1.3.8, NO IDE]

ビデオツールアプリに画像を表示する際、Fl_Boxのサイズに強制的に合わせるようにしました。copy関数を使います。

本来はアスペクト比を保持したまま表示するのが妥当ですが、編集点を見極められれば十分なのでFl_Boxに合わせました。あくまで表示のための一時的処理であって元画像のサイズは変わりません。

extern Fl_Box *show_box2
extern Fl_Input *imageNum2, *imageSec2, *fpsInput2;
extern Fl_Slider *slider2;

// スライダーのコールバック関数
void slider_cb2(Fl_Widget*, void*) {
    // スライダーの数値を取得
    slider2 -> bounds(0, (double)(paths.size() -1));
    double value = slider2 -> value();
    num = (int)value;

    // 画像番号/画像数の表示
    string image_num = to_string(num +1) + "/" + to_string(paths.size());
    imageNum2 -> value(image_num.c_str());

    // 経過秒数の表示
    const char* fps = fpsInput2 -> value();
    string fps_str = string(fps);
    float sec = num/stof(fps_str);
    imageSec2 -> value((to_string(sec)).c_str());

    string path = paths[num];
    cout << "slider_path " << path << endl;

    // png画像の表示(480*360へ強制リサイズ)
    Fl_PNG_Image *png = new Fl_PNG_Image(path.c_str());
    Fl_Image* png_copy = png -> copy(480,360);

    show_box2 -> image(png_copy);
    show_box2 -> redraw();

    subWindow1->show();
    delete png; // メモリ解放

    cout << "rev_cb2完了" << endl;
}