An aros, morphos, amiga coding, programming, developing, using and living commodore amiga based os and machines!
venerdì 23 maggio 2014
Cairo, Windows (o Aros!) e visualizzazione superfici da png
Riassumiamo: ho scritto Comics.
Per chi non sa cos'è è un cbr/cbz viewer, l'unico, su amiga ng (Aros, mos, os4).
Usavo lo scaling immagini di libjpg fighissimo, ma per le png ovviamente non funziona, per cui sono passato alle funzioni native aros, pessime.
Ora sto cercando di capire cosa usare per il rendering. Sono approdato a cairo (col quale ho avuto un fugace amore tempo fa).
Cairo è una libreria opensource appunto di grafica, ma è cessonamente linuxiana e per di più (orribile!) orientata a python e gtk (schifo!).
Per chi come noi non vuole usare python bensì il c e niente gtk ma robe native (basta linux) sorge un problema.
Come creare una superfice? e fin qui ci viene in aiuto la versione nativa (ad esempio win32) con le sue api.
Solo che non visualizza nessuna png.
Come visualizzare una png sotto win con cairo?
Semplice:
Ecco un pò di codice
case WM_PAINT:
int w,h;
hDC = BeginPaint(hwnd, &Ps);
GetClientRect(hwnd,&ClientRect);
//con questo creo la source surface dalla png che carico
surface = cairo_image_surface_create_from_png ("pippo.png");
//con questo creo la surface destinazione dall'hdc di finestra (win32)
destsurface=cairo_win32_surface_create(hDC);
//vabbè prendo le dimensioni
w = cairo_image_surface_get_width (surface);
h = cairo_image_surface_get_height (surface);
//creo il cr per la visualizzazione
cr = cairo_create(destsurface);
//scalo, ma se non vi piace scalare amen. A me serve questo
cairo_scale (cr, 233.3/w, 166.0/h);
//qui copio le due superfici: aggancio la surface source al cr della finestra che nel frattempo ha un suo destsurface, a partire da 0,0.
cairo_set_source_surface (cr, surface, 0, 0);
//DISEGNO! olè!
cairo_paint (cr);
//distruggo tutto...
cairo_surface_destroy (surface);
cairo_destroy(cr);
break;
// ciao!
Iscriviti a:
Commenti sul post (Atom)
Nessun commento:
Posta un commento