Salve, so che non è il NG adatto, ma d'altra parte ho già postato 10 giorni fa su quello per la programmazione e nessuno ha risposto... forse qui c'è più collaborazione :-) Ho la necessità di scrivere un semplice programma di conversione, ma non so programmare in ambiente Windows (conosco solo un minimo di C studiato a scuola e un po' di assembly Z80 e PIC) In sostanza devo convertire un file immagine in formato bitmap a 16 colori o a 4 colori in una sequenza grezza di bytes come spiegato sotto. So che il formato a 16 colori è palettizzato, ma questa, se possibile, cosa va trascurata e vanno considerati solo il numero del colore (ad esempio colore 0 = nero, colore 1 = rosso, ecc... ) e non la sua corrispondenza nella palette, che sarà da considerare fissa e predeterminata. Mi serve per convertire un'immagine creata su pc in un blocco di dati da visualizzare con una scheda grafica di mia creazione in un computer Z80 che sto costruendo.
Il file di ingresso dovrebbe essere un bitmap (tipo paint di windows) a
320x204 pixel con 16 colori o a scelta 640x204 con 4 colori.Il file risultante dovrà avere questa organizzazione di bytes: Il primo byte rappresenta i primi due pixel adiacenti in alto a sinistra dello schermo. In particolare i 4 bit meno significativi sono il primo pixel in alto a sinistra ed è strutturato così: b0=rosso b1=verde b2=blu b3=intensità (0=spento/bassa luminosità, 1=acceso/alta luminosità) I 4 bit più significativi sono il secondo pixel, adiacente al primo, e hanno la struttura b4=rosso b5=verde b6=blu b7=intensità
questa la corrispondenza tra il colore del pixel del bitmap e la configurazione di bit che serve al mio file per ciascun pixel
b7 b6 b5 b4 b3 b2 b1 b0 colore
0 0 0 0 0 nero 1 0 0 0 1 rosso scuro 2 0 0 1 0 verde scuro 3 0 0 1 1 giallo scuro 4 0 1 0 0 blu scuro 5 0 1 0 1 viola scuro 6 0 1 1 0 azzurro scuro 7 0 1 1 1 grigio scuro 8 1 0 0 0 grigio chiaro 9 1 0 0 1 rosso chiaro 10 1 0 1 0 verde chiaro 11 1 0 1 1 giallo chiaro 12 1 1 0 0 blu chiaro 13 1 1 0 1 viola chiaro 14 1 1 1 0 azzurro chiaro 15 1 1 1 1 biancoquesto per 160 bytes, poi si passa alla riga successiva.
In modalità 640x204 invece l'ordine dei pixel è lo stesso, però il byte è configurato così:
primo pixel b0=on/off b1=intensità secondo pixel b2=on/off b3=intensità terzo pixel b4=on/off b5=intensità quarto pixel b6=on/off b7=intensità
Per ogni pixel:
pixel e intensità = 0 -> colore nero pixel =1 e intensità =0 -> colore (uno dei 16, scelto a parte) scuro pixel =0 e intensità =1 -> grigio scuro pixel =1 e intensità =1 -> colore (uno dei 16, scelto a parte) chiaro
così a occhio non dovrebbe essere difficile, per chi sa farlo. Forse è più facile da fare che da spiegare. Se qualcuno volesse aiutarmi scrivendo questo programma, magari in visual basic così poi posso studiarlo, gliene sarei molto grato. Posso anche offrire un piccolo compenso per il disturbo, in stile da hobbista. Se servono altri dettagli chiedete pure, anche via mail se volete, però occhio all'antispam. Grazie in anticipo, fate sapere grazie. Paolo.