Newsgroup: it.comp.lang.c
Titolo: scheda e indirizzo

ciao a tutti, sono nuovo del newsgroup e gia' comincio a stressare ;)
volevo iniziare a fare un po' di pratica in c, e realizzare un piccolo 
programmino per visualizzare immagini .gif (l'algoritmo l'ho gia'
trovato) che giri sotto win o msdos. Chi sa dirmi qual'e' l'indirizzo di
una scheda video?
domanda stupida, ma non la so....
grazie,
Alberto

una scheda video?
Sicuro che ti serva? Comunque non so risponderti.
Scrivo ugualmente per chiedere informazioni riguardo all'algoritmo di
lettura di immagini GIF. Puoi fornirci informazioni? (indirizzi Web, FTP,
...)
Grazie
--
Francesco Trotta
http://space.tin.it/computer/ftrotta
Elimina "x_" dal mio indirizzo per mandarmi
un messaggio direttamente

 una scheda video?
Se scegli la piattaforma windows non ti serve nessun indirizzo, devi
utilizzare le API che il sistema mette a disposizione per visualizzare
le immagini.
Ciao.
-- 
     (ZZZ)       Filippo Salotti, Bagni di Lucca, Lucca, Italy.
    //   \\  _                 E-mail : 
fil...@humnet.unipi.it
   /Y\    ZD<_o===============================================o
 .oZZZZZo.     | Studente Ingegneria Informatica Automatica  |
<OXXXXXXXO>    | Dip. Sistemi Elettrici Universita' di Pisa. |

 ...)
-----------------------------------------------------------------------
ECCO ALCUNE INFO CHE HO TROVATO:
How does GIF compression work?
Actually GIFs use LZW (Lempel Ziv Welch) compression. 
This compression scheme is based on repeating single values. 
RRRRBBYYYYYYYYYYYYYYYYBBRRRRRRRR 
Which can be described as 4 Rs + 2 Bs + 16 Ys + 2 Bs + 8 Rs 
But LZW cannot do any kind of compression at all with something like
THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG 
because these aren't any patterns of repeating characters. But patterns
of
repeating characters such as: 
ABCDEFABCDEFABCDEFABCDEFABCDEF 
is not easy for LZW to simplify because it is not repeating single
characters. 
---------------------------------------------------------------------
E UN SITO DOVE TI MOSTRA LO LZW E ALGORITMO IN C E'
http://pw1.netcom.com/~elmoi/gif.htm
Se ti serve altro , se lo trovo lo posto
ciao 
Alberto

domanda stupida, ma non la so....
Be' non e' tanto stupida, quanto forse semplifica un po' troppo  :)
In realta' darti l'indirizzo della scheda video (che e' 0xa000:0), a meno di non
lavorare in modalita' 320x200x256 e' poco utile.
Dovresti fare pratica con le modalita' dello standard VESA per lo swapping e
l'accesso alle pagine della memoria video.
Per quanto riguarda la modalita' 320x200x256 puoi semplicemente definire un
puntatore all'indirizzo 0xa000:0 e lavorare su un buffer di 64000 byte.
Ti basta un semplice 
unsigned char far *memory_ptr;
Andrea, mica uno chiunque...
--------------------------------------------------
"Ho cambiato signature, si vede ?" 
--
Posted from 
itaca.ulysse.it
 [195.223.254.1]
via Mailgate.ORG Server - 
http://www.mailgate.org

 
Non e' poi tanto banale (l'indirizzo e' fisso - 0xA0000 * 64K in MS-DOS -
ma devi vedertela con i banchi di memoria), prova a leggere
http://www.castle.net/~avly/djgfx.html
 (oppure parti da
http://www.delorie.com/djgpp/doc/
). Gli esempi sono per il DJGPP (protected
mode 32 bits).
Win95:
Devi usare le API di Win95
MS-DOS real-mode:
Come da articolo, ma devi per forza andare a banchi. La memoria la
indirizzi semplicemente con un far pointer a 0xA000:0. Le System Call
(_dpmi_int()) si traducono nelle chiamate ai servizi DOS tramite interrupt
del tuo compilatore.
MS-DOS protected-mode (DJGPP):
Come da articolo, magari sfruttando il linear buffer.

Which can be described as 4 Rs + 2 Bs + 16 Ys + 2 Bs + 8 Rs 
Non vorrei deluderti, ma questa non e' la codifica LZW !
E' piuttosto l'illustrazione sommaria di un algoritmo di run length encoding.
La codifica LZW e' ben diversa (e piu' complicata) e, a volte, puo' implementare
il run length encoding come fase preliminare alla compressione vera e propria
(vedi l'algoritmo registrato da O'Brien che consiste in RLE + LZ77).
E' vero che si basa sulla compressione dei dati che si ripetono (ovvero
ridondanze) in gruppi di dati meno ingombranti, ma non secondo il criterio
descritto sopra. 
L'algoritmo di Lempel-Ziv-Welch (LZ78) e' tra l'altro registrato dalla Unisys,
la societa' per la quale Welch lavorava e, nelle applicazioni che sfruttano il
formato .GIF, si usa dietro licenza della CompuServe, la quale viene pagata in
ragione del 1,5% del costo del prodotto finale, di cui l'1% va alla Unisys.
Per applicazioni "non-GIF" in cui si utilizza comunque l'algoritmo, bisogna
richiedere la licenza direttamente alla Unisys.
Quindi se lo utilizzi solo per esercizio va bene, ma se lo usi per un prodotto
da vendere, hai bisogno della licenza.
Comunque, nel caso di 
ABCDEFABCDEFABCDEFABCDEFABCDEF 
La compressione mediante LZW lavora nel modo seguente :
codifica            output
256) AB    ---->      A
257) BC    ---->      B
258) CD    ---->      C
259) DE    ---->      D
260) EF    ---->      E
261) FA    ---->      F
262) ABC   ---->     256
263) CDE   ---->     258
264) EFA   ---->     260
265) ABCD  ---->     262
266) DEF   ---->     259
267) F     ---->      F
Per rappresentare la sequenza ABCDEFABCDEFABCDEFABCDEFABCDEF con l'impiego di 8
bit/simbolo si avrebbe un consumo totale di 240 bit (30 byte).
Invece per rappresentare la sequenza ABCDEF(256)(258)(260)(262)(259)F, ovvero
12 simboli da 9 bit/simbolo servono 108 bit (14 byte)
Il risparmio e' circa del 47%.
Mentre nel caso di 
RRRRBBYYYYYYYYYYYYYYYYBBRRRRRRRR (32 byte)
Si ottiene una compressione di :
14 simboli x 9 bit/simbolo = 126 bit --> 16 byte
Ovvero all'incirca del 50%.
L'algoritmo LZW si dice "asintoticamente ottimale" nel senso che piu' l'insieme
di dati su cui lavora e' grande (e quindi, statisticamente, molto ridondante)
maggiore e' la compressione. 
Nella pratica, una semplice implementazione potrebbe essere fatta usando un
dizionario iniziale di 4Kbyte, le cui posizioni da 0 a 255 di riferiscono a
caratteri individuali (il codice ASCII normale) e le posizioni da 256 a 4095
alle stringhe composte.
Le nuove stringhe si creano aggiungendo il carattere K alla fine della sequenza
esistente w.
L'algoritmo e' il seguente :
  w = NULL (inizializzazione generica)
  inzio loop
      leggi il carattere K
      se wK esiste nel dizionario allora 
          w = wK
      altrimenti
          scrivi in output w 
          aggiungi wK al dizionario
          w = K
  fine loop
La ricerca nel dizionario e' implementata mediante un meccanismo di "hashing".
Stai attento, pero', perche' il formato .GIF usa una variante di questo
algoritmo, di cui trovi le specifiche sicuramente da qualche parte.
