Newsgroup: it.comp.os.linux.development
Titolo: Grafica basso livello in C

Ciao a tutti...mi trovo con un enorme problema...devo fare un po di
grafica con il c...nel senso che dovrei caricare una bmp e qui sopra
dovrei riuscire a scriverci e disegnare linee...senza perň avere alcuna
visualizzazione grafica...tutto dev'essere fatto nel lavoro del mio
server senza che nessuno se ne accorga...solo che ho trov solo librerie
ad alto livello come GTK+...ho provato con le SDL ma ho dei problemi
durante la compilazione dei file di prova .c malgrado io metta
`sdl-config.......` cioč l'immag me la carica ma non so con che funzioni
scriverci sopra...se qlc che ha piů esperienza di me in qst campo
volesse darmi una mano...grazie....
Andrea
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Su 
http://www.libsdl.org
 trovi link a librerie aggiuntive che potrebbero
seplificarti la vita.
Alessandro.

Ma con che funzioni posso scrivere o disegnare su una BMP??Riesco a
caricarla ma non a scriverci...tu hai mai lavorato con qst librerie??



SDL da' un supporto piuttosto a basso livello per le operazioni di disegno
(vedi l'esempio in 
http://www.libsdl.org/intro.it/usingvideo.html
)
Per qualcosa di piu' evoluto, come ti ho detto ti conviene cercare in
tra le librerie elencate in 
http://www.libsdl.org/libraries.php
Io in passato ho usato 
http://www.libsdl.org/libraries.php?match_name=SGE
Alessandro.

Xkè io avevo pensato anche alle SDL_gfx...solo che non riesco poi a
compilare i my prog in C!!Quelle che mi hai consigliato hanno bisogno di
compilazioni particolari??Riescono a fare una linea con le 4 coordinate
o la fanno pixel per pixel??E i testi??Cmq grazie per l'aiuto...non ero
mai and a vedere quella pagina sul sito libsdl.org...
Andrea


 caricarla ma non a scriverci...tu hai mai lavorato con qst librerie??
Con SDL hai solo funzioni a basso livello per gestire il framebuffer. In 
pratica se vuoi disegnarci sopra puoi appoggiarti a librerie apposite 
oppure fare a mano:
screen = SDL_SetVideoMode(640, 480, 8, SDL_SWSURFACE);
if (SDL_MUSTLOCK(screen))
// presumo erroneamente di essere sempre in grado di lockare
	SDL_LockSurface(screen);
UBYTE *bitmap = screen->pixels;
// disegno lo schermo con linee orizzontali cambiando
// colore ogni due pixel.
for(int i = 0; i < screen.h; i++)
	for(int j = 0; j < screen.w; j++)
		bitmap[j + i * screen.w] = i / 2;
if( SDL_MUSTLOCK(screen)	
	SDL_UnlockSurface(screen);
SDL_UpdateRect(screen, 0, 0, 0, 0);
L'esempio che ti ho fatto e' il piu' semplice, in cui il modo video e' a 
  256 colori, con palette. Per modi truecolor e' lievemente piu' 
complesso perche' a seconda del modo video puoi dover modificare 2, 3 o 
4 bytes per ogni pixel da disegnare.
Bye,
  Gabry

 Quelle che mi hai consigliato hanno bisogno di compilazioni particolari??
Per quel che mi ricordo no. Pero' dipendono da altre librerie. Vedi la
documentazione per i dettagli.
Alessandro.

Xò non posso scrivere?Perchè se agisco pixel per pixel divento matto a
fare una scritta!o è l'unico modo?Altr che libreria potrei usare?Xkè
devo acquisire immagini BMP da una videocamera e scriverci sopra!!


Xkè ogni volta che scarico una libreria aggiuntiva non riesco a
compilare...mi da undefinited reference dei metodi di quella
libreria...sarà che non sono tanto esperto di linux...ma è proprio
incasinato...


 devo acquisire immagini BMP da una videocamera e scriverci sopra!!
xk' u dovresti try una != lib, alias imlib. funcs in imlib for gfx.read,
gfx.write, gfx.draw.
Porcazzozza... non e` un cellulare, e` un newsgroup. Scriviamo in
italiano, per favore.

 incasinato...
Devi lanciare la compilazione dicendo al gcc dove andare a prendere le
librerie contro cui linkare.
Leggiti la documentazione delle SDL: sono più che sicuro che ci sia
scritto come lanciare una compilazione.
Ciao,
 Emmanuele.
-- 
Emmanuele Bassi (Zefram)           [ 
http://digilander.libero.it/ebassi/
 ]
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

 incasinato...
Le SDL sono multipiattaforma, se preferici puoi usarle anche senza Linux ;-P
Alessandro.

Ok...scusa..è l'abitudine..ora smetto...l'imlib...ne avevo già sentito
parlare...però non funziona anche questa con le widget?O è a più basso
livello?è una libreria di sistema?Se no sai mica dove posso trovarla?E
qualcosa di documentazione?
Grazie...e scusa per l'italiano di prima...ora mi sono impegnato...


#include <SDL/SDL.h>
#include <SDL/SDL_opengl.h>
/* All SDL App's need this */
#include <stdio.h>
int main() {
SDL_Surface *screen,*image;  
char *file="/root/server/server/grafica/hilltopGKGD.bmp";
	SDL_Rect dest;
	Sint16 a,b,c;
	a=10;
	b=a;
	c=100;
    printf("Initializing SDL.\n");
 
    /* Initialize defaults, Video and Audio */
    if((SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO)==-1)) { 
        printf("Could not initialize SDL: %s.\n", SDL_GetError());
        exit(-1);
    }
 
    printf("SDL initialized.\n");
    screen = SDL_SetVideoMode(800, 600, 16, SDL_HWSURFACE);
    if ( screen == NULL ) {
        fprintf(stderr, "Impossibile usare il modo 640x480: %s\n",
                 SDL_GetError());
        exit(1);
    }
	//int hlineColor(SDL_Surface * dst, Sint16 x1, Sint16 x2, Sint16 y,
Uint32 color);
 
	image = SDL_LoadBMP(file);
    if ( image == NULL ) {
        fprintf(stderr, "Impossibile caricare %s: %s\n", 
                file,SDL_GetError());
        return;
    }
 
    printf("Quiting SDL.\n");
    dest.x = 0;
    dest.y = 0;
    dest.w = image->w;
    dest.h = image->h;
    SDL_BlitSurface(image, NULL, screen, &dest);
 
SDL_UpdateRects(screen, 1, &dest);
 
sleep(2);
    SDL_FreeSurface(image);
    /* Shutdown all subsystems */
    SDL_Quit();
 
    printf("Quiting....\n");
    exit(0);
}
Questo è il mio programma...lo compilo con gcc -o prova nome.c
`sdl-config --cflags --libs` e non mi da nessun errore.e funziona.
Ma appena metto un metodo di un altra libreria mi da indefinited
reference funz()...
Le SDL sono sotto /usr/include/SDL e il file .h delle nuove librerie che
installo è sempre li sotto!Ho provato sia con le SDL_gfx che con le
SDL_ttf!
P.S Uso linux perchè devo sviluppare questa applicazione per lavoro...ma
è proprio incasinato sotto quest'aspetto!!


La compilazione funziona con le liberie SDL inserendo `sdl -config
--cflags --libs` ma è con le altre librerie aggiuntive che non so cosa
mettere!Oppure non ho capito niente io di come si compilano ste librerie
del piffero...che è probabile dato che sono alle prime armi con linux!!


 mettere!
Allora leggi la documentazione delle altre librerie.


non c'è...sono solo da scaricare ma nessuna documentazione...o se c'è è
proprio incasinata...am mi sa che è l'unica soluzione...cmq grazie...
Andrea


 reference funz()...
Se la funzione appartiene ad una libreria aggiuntiva dovrai "aggiungerla"
anche in compilazione :-)
Per esempio se la libreria si chiama libSDL_gfx.so dovrai usare
gcc -o prova nome.c `sdl-config --cflags --libs` -lSDL_gfx
Alessandro.

> gcc -o prova nome.c `sdl-config --cflags --libs` -lSDL_gfx
E' vero!!Funziona!!
MIITTTIICCCOOOO!!!
Ora devo provare un po a fare ste line...perchè non si aggiorna bene la
surface...ma con un po di smanettate penso di riuscire a
farcela...SPERO!!!Ho anche trovato le SFont come librerie per scrivere
su BMP...studio anche un po quelle...ma sai se c'è qualche metodo che
aggiorna la surface non a rettangoli, ma tutta???
Cmq grazie...
Andrea


aggiorna la surface non a rettangoli, ma tutta???
Non ricordo. Pero' puoi aggiornare un rettangolo grande quanto la
superficie...
Alessandro.

 wrote in message
news:l%kAa.69811$
DN.16...@tornado.fastwebnet.it

Però se è una linea in teoria dovrebbe cancellarmi lo screen vecchio
dove io ho l'immagine BMP come sfondo?!?!BHO?!
Adesso provo un po...però dai primi tentativi con lineColor non vedo
niente!!Sai mica che tipo di dati sono i Sint 16??Xkè secondo me non gli
piace che dichiaro una varibile di questo tipo a 100...


 aggiorna la surface non a rettangoli, ma tutta???
SDL_UpdateRect(surface, 0, 0, 0, 0);
Cosi' l'aggiorni tutta :)
Bye,
  Gabry

Grazie..quella non la sapevo...solo che ho un problema a visualizzare
una linea su su una surface...uso il motodo lineColor()ma non la
visualizza da nessuna parte!?
Ciao Andrea


 visualizzazione grafica...
Credo tu stia cercando la libreria GD:
http://www.boutell.com/gd/
-- 
A risentirci
\  Davide G. Borin
\\ !!Scudo anti-spam attivo!! Togliere le x e "eliminami" dall'indirizzo
\\\_____________________________________________________________________

Guarderň anche questa...grazie...va bene sotto linux??E' semplica da
usare??


Sto guardando questa libreria...ma le WBMP sono le WinBMP?se io ho un
immagine .bmp con linux non cambia niente?Tu le hai usate?Xò mi sembrano
interessanti...


 Sto guardando questa libreria...ma le WBMP sono le WinBMP?se io ho un
No, le WBMP sono le bitmap per i Cellulari, palmari, etc...
Non sono sicuro al 100%, ma è per questo che hanno inventato Google.
http://www.google.it/search?q=WBMP
Ciao,
-- 
+--------+ ASCII ribbon campaign ( )
|  kral  |  - against HTML email  X 
+--------+              & vCards / \

Ok...hai ragione tu...ho fatto una domanda stupida...scusa...allora
peccato xkè le WBMP non centrano nulla con immagini di videocamere...o
no??Cerco su google ora...grazie..
Andrea
