Kitty

Kitty
Aros Mascotte By Eric Schwartz

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!

Nessun commento:

Posta un commento