← Zpět na přehled PGA / 09 Úvod
  Programování grafických aplikací (BI-PGA), Přednáška č. 9
2D grafika - GIMP: Metodika programování
                  pluginů


                                 Jiří Chludil


                        Fakulta informačních technologií
                     České vysoké učení technické v Praze
                 https://courses.fit.cvut.cz/BI-PGA/





                 ZS 2024/2025



   Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025          1 / 60

Jiří Chludil · původní podklad · PDF, strana 1 ↗

Lety, pády, kotrmelce při vývoji zásuvných modulů
v GIMPu



     Mizerná dokumentace!
     Rozdíly mezi Python a C++ implementací!
     Špatná zpětná vazba a ladění!
    GIMP používá Python 2 (OMG)!!!!!
     Náročné napojení externích knihoven!
    POZOR!! Na data uložená v hlavní aplikaci GIMP
      Cvičící je občas zmatený (Grrrrr)





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025          2 / 60

Jiří Chludil · původní podklad · PDF, strana 2 ↗

Co je třeba řešit u zásuvných modulů GIMPu



    Vývojový jazyk a prostředí
    Typ modulu
     Životní cyklus modulu
     Nastavení prostředků (konfigurace)
     Registrace
     Uživatelské rozhraní modulu
     Použité matematické a grafické funkce
    API rozšiřované aplikace





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025          3 / 60

Jiří Chludil · původní podklad · PDF, strana 3 ↗

Vývojový jazyk a prostředí (podpora OS)

    C
      ▶Linux - potřeba Cxx, knihovny jsou součástí instalace Gimpu
      ▶Windows - potřeba Cxx,MINGW, knihovny jsou součástí
           instalace Gimpu - velmi složité nastavení
   C++
       ▶nadstavba nad C API
      ▶Linux - potřeba G++, knihovny jsou součástí instalace Gimpu
      ▶Windows - potřeba G++ ,MINGW, knihovny jsou součástí
           instalace Gimpu - velmi složité nastavení
     Python (3. přednáška)
       ▶kompilátor součástí GIMPu
       ▶pomalejší jak C a C++
      ▶Linux - stačí nakopírovat do správného adresáře
      ▶Windows - stačí nakopírovat do správného adresáře



             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025          4 / 60

Jiří Chludil · původní podklad · PDF, strana 4 ↗

Co je třeba řešit u zásuvných modulů GIMPu



       Vývoj pod C/C++





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025          5 / 60

Jiří Chludil · původní podklad · PDF, strana 5 ↗

Co je třeba řešit u zásuvných modulů



     Vývojový jazyk a prostředí
    Typ modulu
     Životní cyklus modulu
     Nastavení prostředků (konfigurace)
     Registrace
     Uživatelské rozhraní modulu
     Použité matematické a grafické funkce
    API rozšiřované aplikace





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025          6 / 60

Jiří Chludil · původní podklad · PDF, strana 6 ↗

Typy modulů u Gimpu


      Filtry
     Import
     Export
     Formát
     Výběr
     Výběr Barvy
     Automatizace

    1  Primárně jde o formální dělení
    2  Je třeba koordinovat s umístěním v menu
    3  Funkcionální API je nezávislé na typu modulu





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025          7 / 60

Jiří Chludil · původní podklad · PDF, strana 7 ↗

Co je třeba řešit u zásuvných modulů



     Vývojový jazyk a prostředí
    Typ modulu
     Životní cyklus modulu
     Nastavení prostředků (konfigurace)
     Registrace
     Uživatelské rozhraní modulu
     Použité matematické a grafické funkce
    API rozšiřované aplikace





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025          8 / 60

Jiří Chludil · původní podklad · PDF, strana 8 ↗

Životní cyklus modulu


 struct GimpPlugInInfo {
     GimpInitProc init_proc;
         // Volání při startu modulu před zobrazením GUI
     GimpQuitProc quit_proc;
         // Volání při ukončení modulu
     GimpQueryProc query_proc;
         //Instalace modulu a inicializace dle zdrojů
     GimpRunProc run_proc;
         // Vlastní provedení funkce modulu
 };

    1  Pokud nechceme volání použít, stačí dát NULL





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025          9 / 60

Jiří Chludil · původní podklad · PDF, strana 9 ↗

Co je třeba řešit u zásuvných modulů



     Vývojový jazyk a prostředí
    Typ modulu
     Životní cyklus modulu
    Nastavení prostředků (konfigurace)
     Registrace
     Uživatelské rozhraní modulu
     Použité matematické a grafické funkce
    API rozšiřované aplikace





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         10 / 60

Jiří Chludil · původní podklad · PDF, strana 10 ↗

Nastavení prostředků (konfigurace) C

 void gimp_install_procedure(
     char* name, // Název (identifikace) modulu
     char* blurb, // Název v menu
     char* help, //Popis modulu
     char* author, //Jméno autora
     char* copyright, //Copyright
     char* menu_path, //Cesta v menu
     char* image_types, //Podporované formáty
     GimpPDBProcType type, //Typ procedury
     int nparams, //Počet vstupních parametrů modulu
     int nreturn_vals, //Počet výstupních parametrů
     GimpParamDef* params, //Pole vstupních parametrů
     GimpParamDef* return_vals //Pole výstup. parametrů
 );


             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         11 / 60

Jiří Chludil · původní podklad · PDF, strana 11 ↗

Nastavení prostředků - Podporované formáty


     char* image_types, //Podporované formáty

   RGB
   RGBA
    RGB*
    GRAY
    GRAYA
    GRAY*
    INDEXED,
    INDEXEDA
    INDEXED*




             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         12 / 60

Jiří Chludil · původní podklad · PDF, strana 12 ↗

Nastavení prostředků - Typ procedury




     GimpPDBProcType type, //Typ procedury

Enum typ
    GIMP_INTERNAL, Interní procedura GIMP
   GIMP_PLUGIN Zásuvný modul GIMPu
    GIMP_EXTENSION Rozšíření GIMPu
   GIMP_TEMPORARY Dočasná (temporary) procedura





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         13 / 60

Jiří Chludil · původní podklad · PDF, strana 13 ↗

Nastavení prostředků - Parametry

     GimpParamDef* params, //Pole vstupních parametrů
     GimpParamDef* return_vals //Pole výstup. parametrů

 void GimpParamDef struktura(
     GimpPDBArgType type; //Typ parametru
     gchar *name; //Jméno parametru
     gchar *description;//Popis parametru
 );

GimpPDBArgType
    GIMP_PDB_INT32
    GIMP_PDB_INT16
    GIMP_PDB_INT8
    GIMP_PDB_FLOAT
    GIMP_PDB_STRING

             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         14 / 60

Jiří Chludil · původní podklad · PDF, strana 14 ↗

Nastavení prostředků - Parametry

GimpPDBArgType (Pokr.)
    GIMP_PDB_INT32ARRAY
    GIMP_PDB_INT16ARRAY
    GIMP_PDB_INT8ARRAY
    GIMP_PDB_FLOATARRAY
    GIMP_PDB_STRINGARRAY
    GIMP_PDB_COLOR - barva
    GIMP_PDB_REGION - obdélníková oblast
    GIMP_PDB_DISPLAY - ???
    GIMP_PDB_IMAGE - obrázek
    GIMP_PDB_LAYER - vrstva
    GIMP_PDB_CHANNEL - kanál


             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         15 / 60

Jiří Chludil · původní podklad · PDF, strana 15 ↗

Nastavení prostředků - Parametry



GimpPDBArgType (Pokr.)
    GIMP_PDB_DRAWABLE - výstup
    GIMP_PDB_SELECTION - Výběr
   GIMP_PDB_BOUNDARY - Hranice
    GIMP_PDB_PATH - Cesta
    GIMP_PDB_PARASITE - ???
    GIMP_PDB_STATUS
       - návratový status modulu např. GIMP_PDB_SUCCESS
   GIMP_PDB_END - ???





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         16 / 60

Jiří Chludil · původní podklad · PDF, strana 16 ↗

Co je třeba řešit u zásuvných modulů



     Vývojový jazyk a prostředí
    Typ modulu
     Životní cyklus modulu
     Nastavení prostředků (konfigurace)
     Registrace
     Uživatelské rozhraní modulu
     Použité matematické a grafické funkce
    API rozšiřované aplikace





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         17 / 60

Jiří Chludil · původní podklad · PDF, strana 17 ↗

Registrace v menu




 void gimp_plugin_menu_register(
     const gchar *procedure_name,
                     // Název (identifikace) modulu
     const gchar *menu_path //cesta v menu
 );

    1  Název modulu musí být shodný s jménem uvedeným v instalaci
    2  Cesta musí existovat





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         18 / 60

Jiří Chludil · původní podklad · PDF, strana 18 ↗

Nastavení prostředků a registrace - Příklad



 static GimpParamDef args[] = {
     {
         GIMP_PDB_INT32, "run-mode", "Run mode"
     },
     {
         GIMP_PDB_IMAGE, "image", "Input image"
     },
     {
         GIMP_PDB_DRAWABLE, "drawable", "Input drawable"
     }
 };





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         19 / 60

Jiří Chludil · původní podklad · PDF, strana 19 ↗

Nastavení prostředků a registrace - Příklad


 gimp_install_procedure (
     "add-color",
     "Posun barev ve všech kanálech",
     "Modul posune RGB barvy o hodnotu v parametru",
     "Jiří Chludil",
     "JCH",
     "2017",
     "Posun barev (bez náhledu)...",
     "RGB*, GRAY*",
     GIMP_PLUGIN,
     G_N_ELEMENTS (args), 0,
     args, NULL
 );




             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         20 / 60

Jiří Chludil · původní podklad · PDF, strana 20 ↗

Nastavení prostředků a registrace - Příklad





 gimp_plugin_menu_register (
     "add-color",
     “<Image>/Filters/Misc"
 );





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         21 / 60

Jiří Chludil · původní podklad · PDF, strana 21 ↗

Co je třeba řešit u zásuvných modulů



     Vývojový jazyk a prostředí
    Typ modulu
     Životní cyklus modulu
     Nastavení prostředků (konfigurace)
     Registrace
     Uživatelské rozhraní modulu
     Použité matematické a grafické funkce
    API rozšiřované aplikace





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         22 / 60

Jiří Chludil · původní podklad · PDF, strana 22 ↗

Uživatelské rozhraní modulu C
Použito GimpWidgets s použitím GTK (API na GIMP Widget)

dialog = gimp_dialog_new ("
    Posun Barev",
    "addColor",
    NULL,
    0,
    gimp_standard_help_func,
    "add-color",
    GTK_STOCK_CANCEL,
    GTK_RESPONSE_CANCEL,
    GTK_STOCK_OK,
    GTK_RESPONSE_OK,
    NULL
);


           Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         23 / 60

Jiří Chludil · původní podklad · PDF, strana 23 ↗

Uživatelské rozhraní modulu C


spinbutton = gimp_spin_button_new (
    &spinbutton_adj, bvals.level, 1,255,1,1,1,5,0);
gtk_box_pack_start (
    GTK_BOX (main_hbox), spinbutton, FALSE, FALSE, 0);
gtk_widget_show (spinbutton);


g_signal_connect_swapped (
    spinbutton_adj,
    "value_changed",
    G_CALLBACK (gimp_preview_invalidate),
    preview
);





           Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         24 / 60

Jiří Chludil · původní podklad · PDF, strana 24 ↗

Uživatelské rozhraní modulu C




g_signal_connect (
    spinbutton_adj,
    "value_changed",
    G_CALLBACK (gimp_int_adjustment_update),
    &bvals.level
);


gtk_widget_show (dialog);





           Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         25 / 60

Jiří Chludil · původní podklad · PDF, strana 25 ↗

Co je třeba řešit u zásuvných modulů



     Vývojový jazyk a prostředí
    Typ modulu
     Životní cyklus modulu
     Nastavení prostředků (konfigurace)
     Registrace
     Uživatelské rozhraní modulu
     Použité matematické a grafické funkce
    API rozšiřované aplikace





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         26 / 60

Jiří Chludil · původní podklad · PDF, strana 26 ↗

Použité matematické a grafické funkce





   GimpMath —Matematické definice a makra
    GimpMatrix — Funkce pro manipulaci s maticemi pro 2D
    GimpVector — Funkce pro manipulaci s 2D vektory
   GimpMD5 — MD5 algoritmus





           Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         27 / 60

Jiří Chludil · původní podklad · PDF, strana 27 ↗

GimpMath




   RINT
   ROUND
   SQR
   MAX255
   CLAMP0255
    gimp_deg_to_rad
    gimp_rad_to_deg





           Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         28 / 60

Jiří Chludil · původní podklad · PDF, strana 28 ↗

GimpMatrix



    gimp_matrix3_mult
    gimp_matrix3_translate
    gimp_matrix3_scale
    gimp_matrix3_rotate
    gimp_matrix3_xshear, gimp_matrix3_yshear
    gimp_matrix3_determinant
    gimp_matrix3_invert
    a mnoho dalších





           Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         29 / 60

Jiří Chludil · původní podklad · PDF, strana 29 ↗

GimpVector



    gimp_vector3_add
    gimp_vector3_sub
    gimp_vector3_cross_product
    gimp_vector3_rotate
    gimp_vector_2d_to_3d
    gimp_vector3_neg
    gimp_vector3_normalize
    a mnoho dalších





           Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         30 / 60

Jiří Chludil · původní podklad · PDF, strana 30 ↗

Co je třeba řešit u zásuvných modulů



     Vývojový jazyk a prostředí
    Typ modulu
     Životní cyklus modulu
     Nastavení prostředků (konfigurace)
     Registrace
     Uživatelské rozhraní modulu
     Použité matematické a grafické funkce
    API rozšiřované aplikace





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         31 / 60

Jiří Chludil · původní podklad · PDF, strana 31 ↗

API rozšiřované aplikace - GIMP Library





     Manipulace s obrázky
       ▶čtení a zápis po pixelu, řádku, sloupci
       ▶nástroje výběru
       ▶nástroje vrstev
     podpora výběrových nástrojů
    GUI





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         32 / 60

Jiří Chludil · původní podklad · PDF, strana 32 ↗

API rozšiřované aplikace - GIMP Base Library





     Stav aplikace GIMP
     Správa paměti
     Nastavení Gimpu (jednotky)
     Správa signálů





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         33 / 60

Jiří Chludil · původní podklad · PDF, strana 33 ↗

API rozšiřované aplikace - GIMP Color Library





     Manipulace s grafickou reprezentací pixelu
     Nástroje pro změnu osvětlení, teploty atd.
     Nástroje pro interpolaci barev
     Převodu mezi formáty
     Cairo





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         34 / 60

Jiří Chludil · původní podklad · PDF, strana 34 ↗

API rozšiřované aplikace - GIMP Config Library





      Serializace a deserializace objektů
     Správa Chyb
    Management nastavení GIMP
     Podpora GScaner
      Utility





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         35 / 60

Jiří Chludil · původní podklad · PDF, strana 35 ↗

API rozšiřované aplikace - GIMP Widgets




     Funkce pro GUI
       ▶Tlačítka
       ▶Posuvníky
       ▶Textová pole
       ▶Elementy pro práci s barvou
      ▶Výběry
       ▶atd.





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         36 / 60

Jiří Chludil · původní podklad · PDF, strana 36 ↗

API rozšiřované aplikace - GIMP Module,
Thumbnail Library




     Funkce pro miniatury
     Funkce jádra
    Management nastavení GIMP
     Podpora GScaner
      Utility





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         37 / 60

Jiří Chludil · původní podklad · PDF, strana 37 ↗

Co je třeba řešit u zásuvných modulů GIMPu



      Vývoj pod Pythonem





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         38 / 60

Jiří Chludil · původní podklad · PDF, strana 38 ↗

Co je třeba řešit u zásuvných modulů



    Vývojový jazyk a prostředí
    Typ modulu
     Životní cyklus modulu
     Nastavení prostředků (konfigurace)
     Registrace
     Uživatelské rozhraní modulu
     Použité matematické a grafické funkce
    API rozšiřované aplikace





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         39 / 60

Jiří Chludil · původní podklad · PDF, strana 39 ↗

Zásuvný modul v Pythonu


 + Script bez potřeby kompilace
 + Triviální instalace
 + Jednoduché GUI pro jednoduché příklady
 + Dostupnější příklady
 + Dobrá dokumentace API
 + Neobjektový i objektový přístup
  −Pomalejší než C a C++
  −Složitější instalace, pokud jsou potřeba speciální knihovny
  −Náročná realizace pokročilého GUI
  −Náročná realizace náhledu





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         40 / 60

Jiří Chludil · původní podklad · PDF, strana 40 ↗

Co je třeba řešit u zásuvných modulů



     Vývojový jazyk a prostředí
    Typ modulu
     Životní cyklus modulu
     Nastavení prostředků (konfigurace)
     Registrace
     Uživatelské rozhraní modulu
     Použité matematické a grafické funkce
    API rozšiřované aplikace





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         41 / 60

Jiří Chludil · původní podklad · PDF, strana 41 ↗

Typy modulů u Gimpu

      Filtry
     Import
     Export
     Formát
     Výběr
     Výběr Barvy
     Automatizace

    1  Stejné jaku u C, C++
    2  Primárně jde o formální dělení
    3  Je třeba koordinovat s umístěním v menu
    4  Funkcionální API je nezávislé na typu modulu




             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         42 / 60

Jiří Chludil · původní podklad · PDF, strana 42 ↗

Co je třeba řešit u zásuvných modulů



     Vývojový jazyk a prostředí
    Typ modulu
     Životní cyklus modulu
     Nastavení prostředků (konfigurace)
     Registrace
     Uživatelské rozhraní modulu
     Použité matematické a grafické funkce
    API rozšiřované aplikace





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         43 / 60

Jiří Chludil · původní podklad · PDF, strana 43 ↗

Životní cyklus modulu Python

 metody v třídě
     def start(self):
         ...

     def init(self):
         pass

     def quit(self):
         pass

     def query(self):
         ...

    1  Pokud nechceme volání použít, stačí dát "pass"



             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         44 / 60

Jiří Chludil · původní podklad · PDF, strana 44 ↗

Co je třeba řešit u zásuvných modulů



     Vývojový jazyk a prostředí
    Typ modulu
     Životní cyklus modulu
    Nastavení prostředků (konfigurace)
     Registrace
     Uživatelské rozhraní modulu
     Použité matematické a grafické funkce
    API rozšiřované aplikace





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         45 / 60

Jiří Chludil · původní podklad · PDF, strana 45 ↗

Nastavení prostředků (konfigurace)

gimp.install_procedure(
    "Jméno",
    "Popisek v menu",
    "Help",
    "Autor", "Copyright",
    "Datum","Lokace v menu",
    "Typ obrázku", "Typ modulu",
    [
        (PDB_INT32,"run_mode","Run Mode"),
        (PDB_IMAGE,"image","Input image"),
        (PDB_DRAWABLE,"drawable","Input drawable"),
        (PF_INT32, "my_param","Můj param."),
    ], []
)


           Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         46 / 60

Jiří Chludil · původní podklad · PDF, strana 46 ↗

Co je třeba řešit u zásuvných modulů



     Vývojový jazyk a prostředí
    Typ modulu
     Životní cyklus modulu
     Nastavení prostředků (konfigurace)
     Registrace
     Uživatelské rozhraní modulu
     Použité matematické a grafické funkce
    API rozšiřované aplikace





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         47 / 60

Jiří Chludil · původní podklad · PDF, strana 47 ↗

Životní cyklus modulu Python


 #!/usr/bin/python
 register(
     "python_fu_resize",
     "Saves the image at a maximum width and height",
     "Saves the image at a maximum width and height",
     "Nathan A. Good", "Nathan A. Good",
     "2010",
     «Image>/Image/Resize to max...",
     "RGB*, GRAY*",
     [], [],
     plugin_main)
 main()





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         48 / 60

Jiří Chludil · původní podklad · PDF, strana 48 ↗

Co je třeba řešit u zásuvných modulů



     Vývojový jazyk a prostředí
    Typ modulu
     Životní cyklus modulu
     Nastavení prostředků (konfigurace)
     Registrace
     Uživatelské rozhraní modulu
     Použité matematické a grafické funkce
    API rozšiřované aplikace





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         49 / 60

Jiří Chludil · původní podklad · PDF, strana 49 ↗

Uživatelské rozhraní modulu I
    Automatické generování

    (PF_INT, "max_width", "Maximum Width", 500),
    (PF_INT, "max_height", "Maximum Height", 500),
    (PF_BOOL, "copy", "Make a JPEG copy", TRUE),





           Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         50 / 60

Jiří Chludil · původní podklad · PDF, strana 50 ↗

Uživatelské rozhraní modulu II



   GTK knihovna - import gtk, gimpui

   1  Definice struktury UI - GTK
      ▶button
      ▶input
      ▶select
      ▶radio
      ▶checkbutton
   2  napojení GUI na obslužné funkce
       ▶self.ok_button.connect("clicked", self.ok_clicked)





           Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         51 / 60

Jiří Chludil · původní podklad · PDF, strana 51 ↗

Uživatelské rozhraní modulu III





           Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         52 / 60

Jiří Chludil · původní podklad · PDF, strana 52 ↗

Uživatelské rozhraní modulu - náhled





    Náhled v nové vrstvě
    Problém s dobou trvání transformace
      ▶Snížení rozlišení
      ▶Zjednodušení algortimu





           Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         53 / 60

Jiří Chludil · původní podklad · PDF, strana 53 ↗

Co je třeba řešit u zásuvných modulů



     Vývojový jazyk a prostředí
    Typ modulu
     Životní cyklus modulu
     Nastavení prostředků (konfigurace)
     Registrace
     Uživatelské rozhraní modulu
     Použité matematické a grafické funkce
    API rozšiřované aplikace





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         54 / 60

Jiří Chludil · původní podklad · PDF, strana 54 ↗

Použité matematické a grafické funkce





    matematická knihovna numpy
    opencv-python





           Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         55 / 60

Jiří Chludil · původní podklad · PDF, strana 55 ↗

Co je třeba řešit u zásuvných modulů



     Vývojový jazyk a prostředí
    Typ modulu
     Životní cyklus modulu
     Nastavení prostředků (konfigurace)
     Registrace
     Uživatelské rozhraní modulu
     Použité matematické a grafické funkce
    API rozšiřované aplikace





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         56 / 60

Jiří Chludil · původní podklad · PDF, strana 56 ↗

API rozšiřované aplikace





    https://www.gimp.org/docs/python/index.html
   GIMP2 -> Python Console -> Browse
    Ukázkové příklady





           Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         57 / 60

Jiří Chludil · původní podklad · PDF, strana 57 ↗

Ladění





      print a sys.stdout = open( ’cesta.txt’, ’w’)
     Logování do souboru





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         58 / 60

Jiří Chludil · původní podklad · PDF, strana 58 ↗

Ukázkové příklady





    Dokumentace
      Styl programování
    Memory management
     Náhled





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         59 / 60

Jiří Chludil · původní podklad · PDF, strana 59 ↗

Co bychom po dnešku měli znát





 Témata probraná na dnešní přednášce:
     Základní principy psaní modulů pod C/C++
     Základní principy psaní modulů pod Python





             Chludil (FIT)                      BI-PGA, Přednáška č. 9                ZS 2024/2025         60 / 60

Jiří Chludil · původní podklad · PDF, strana 60 ↗

Obsah přednášky

Původní text

Původní obsah, kód a verze nástrojů odpovídají podkladu; aktuální organizaci a API ověřte u autora.

RGB náhled

Interaktivní doplněk GRAFIT · syntetická demonstrace principu. Není součástí původního PDF a nespouští plugin Blenderu ani GIMPu.