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
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
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
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
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
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
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
Ž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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Ž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
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
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
Ž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
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
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
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
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
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