[un po' OT] Aiuto per semplice programma

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 bianco

questo 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.

Reply to
Telespalla Bob
Loading thread data ...

Mi limito, per ora, al 320x204, e metto il link a un programmino in vb6 che dovrebbe estrarre da un file bmp i dati raw nel formato che ti serve. I file bmp sono strutturati e sono formati da diversi chunk, tra cui quello che contiene i dati. Condizioni essenziali per il funzionamento del programmino sono:

- che il file sia stato salvato (da paint) con la paletta standard a

16 colori

- che l'immagine abbia la dimensione di 320x204 pixel.

E qui viene il bello, perche' il file bmp comincia da in basso a sinistra e il primo pixel e' il nibble alto del byte!! Dai un'occhiata se l'output e' quella che ti aspetti.

Ecco il programmino:

formatting link

Ciao.

lucky

Reply to
lucky

Il 17/03/2012 22:05, lucky ha scritto:

Grande! Funziona, anche se come prima prova i colori sembrano in "negativo"

Qui un paio di foto dello schermo con un'immagine di prova:

a colori

formatting link

e in bianco e nero

formatting link

questa l'immagine originale

formatting link

Ora dimmi come posso sdebitarmi :-) Se riesci aspetto anche la versione con l'alta risoluzione a 4 colori.

Ciao!

Reply to
Telespalla Bob

Il 17/03/2012 22:05, lucky ha scritto:

P.s.: NG elettronici batte NG informatici 1 a 0 :-)

Reply to
Telespalla Bob

Se ci sono pasticci nei colori, lo si dovrebbe poter capire bene visualizzando l'immagine delle 16 barre verticali colorate. L'immagine raw dovrebbe apparire sul tuo schermo come la bmp (aperta con paint) sullo schermo del pc.

Ci vorrebbe, per confronto, il file dell'immagine 320x204 a 16 colori bmp

Mi manca di capire qualcosa. Se ho ben capito partiresti da un file 640x204 a 16 colori bmp. A questo punto dovresti avere una tabella di conversione (o piu' tabelle fra le quali sceglierne una) col formato: bmp --> raw

0000 --> bb 0001 --> bb 0010 --> bb .................. 1110 --> bb 1111 --> bb

Ma queste tabelle dovresti fornirle tu....

Ciao.

lucky

Reply to
lucky

Il 18/03/2012 12:07, lucky ha scritto:

stasera la provo

giusto, eccola.

formatting link

l'ho convertita velocemente ieri sera con photoshop. se non erro ci sono pochi colori, il blu scuro e il blu chiaro, il ciano scuro e il ciano chiaro, il bianco, il nero, forse un blu ancora più scuro che può essere un grigio scuro. il dilemma è sul rosa... ma questo è un discorso da risolvere lato pc. proverò a riconvertirla con altri colori, ma è probabile che sia comunque da ritoccare la tabella di conversione dal colore del bitmap a quella del formato grezzo.

a giorni penso ad una tabella, ma indicativamente terrò conto della luminosità dei songoli colori

Intanto grazie ancora, avanzi :-)

Reply to
Telespalla Bob

Volevo semplicemente complimentarmi con te per i brillanti risultati. Anche se oggi si potrebbero considerare anacronistici, sono veramente di ottimo livello. Ammiro soprattutto la perseveranza, il pionerismo, l'audacia; in queste situazioni mi torna a galla un passato glorioso in cui smanettavo giorno e notte (soprattutto notte) con gli Z80 vari, le EPROM, i primi PC ecc, ecc. Uno dei periodi pi=F9 belli e pi=F9 creativi della mia vita. :-) Poi ho aperto partita IVA e molto =E8 cambiato... :-(

Comunque se ti occorre qualche cosa di "obsoleto" (PIO, DMA, CTC, SIO,

8255, TTL in genere serie LS e non, EPROM dalla 2708 alla 512, RAM statiche e dinamiche, ecc) ho una soffitta piena. Ovviamente gratis per la causa. Ho realizzato anche un emulatore di EPROM da collegare alla porta parallela di un PC con tanto di software in MASM, uno strumento ultracomodo per il debug.

"Credere, obbedire, saldare!" :-)

Piccio.

Reply to
Piccio

Il 18/03/2012 12:07, lucky ha scritto:

Ecco come appare la schermata con le barre di test:

formatting link

in sostanza come conversione ci siamo, sono invertiti solamente i due grigi al centro. In pratica il gruppo di otto colori scuri di sinistra finisce con un "bianco scuro" ovvero un grigio chiaro, mentre l'altro gruppo di colori chiari inizia con un "nero chiaro" ovvero un grigio scuro. Il bitmap sul pc che mi hai passato invece ha appunto questi due grigi scambiati.

a questo punto la strana visualizzazione del manga è dovuta alla conversione con photoshop, proverò a rifare altri esperimenti cambiando colori.

Dunque vediamo, con riferimento al bitmap a barre che mi hai inviato, come prima distinzione prenderei i due gruppi da otto colori a luminosità piena o dimezzata. I colori del gruppo di sinistra devono settarmi l'attributo luminosità a zero, mentre gli otto colori del gruppo di destra devono settarlo a uno. Riguardo invece alla distinzione fra pixel acceso o spento, direi che come pixel spento consideriamo i colori (indipendentemente dalla luminosità) nero, rosso, blu e viola, mentre come pixel acceso i colori verde, giallo, ciano e bianco.

Sarebbe anche utile poter caricare un bitmap monocromatico 640x204 e settare il bit luminosità per i dati raw in base alla scelta dell'utente al momento della conversione... chiedo troppo? :-) Infine sarebbe anche bello poter caricare un file con esplora risorse invece che inserire il percorso manualmente.

se ti fa piacere posso citarti in appendice della mia tesina per l'esame di maturità, visto che porterò il mio computer come progetto di fine anno :-)

Per caso tempo fa eri stato tu a scrivermi il programma, sempre in visual basic, per disegnare il set di caratteri?

Se non eri tu, l'autore che leggesse questo messaggio mi contatti che gli chiedo se vuole essere inserito anche lui nei ringraziamenti nella mia tesina.

Ciao.

Reply to
Telespalla Bob

Il 18/03/2012 19:38, Piccio ha scritto:

Beh, grazie mille. :-) L'hardware è ormai finito, sto debuggando alcuni dettagli della scheda grafica e ho già quasi finito il nuovo sbrogliato della stessa. In futuro farò anche una scheda DMA e una scheda audio, ma per il momento l'obiettivo finale è di far girare il CP/M. Impresa ardua, visto che di programmazione avanzata in assembly ne so ben poco... mi sta aiutando un amico del NG del retrocomputing, ma al momento non ne veniamo fuori... vedremo.

Interessante il tuo emulatore di eprom. anche io anni fa ne avevo iniziato uno, ma poi ho abbandonato. Hai ancora materiale?

Ciao e grazie ancora. :-)

Quando finirò la tesina pubblicherò tutto per chi volesse costruirselo o semplicemente studiarselo.

Reply to
Telespalla Bob

...

S=EC, ma usavo dei 74LS299 che noto ora (Farnell) sono agli sgoccioli e molto costosi. Sarebbe interessante rivederlo con logiche pi=F9 facili da reperire, anche di recupero come 74LS244 che abbondano su moltissime schede PC obsolete e contatori CMOS.

Piccio.

Reply to
Piccio

Temo sia una differenza tra la paletta standard di paint e la paletta della tua scheda grafica. IMHO la ottava barra (colore 0111b, rgb=3D808080h) e' correttamente visualizzata. La nona barra (colore 1000b, rgb=3Dc0c0c0h) non e' correttamente visualizzata. La scheda grafica ti consente di impostare la paletta o e' fissa? Se e' fissa quali sono i valori di tensione sui fili R, G e B nelle 16 combinazioni della paletta?

Sicuramente photoshop ha creato una propria paletta. L'immagine bmp =E8 stata convertita in jpg probabilmente dall'uploader, e quindi non posso vedere la paletta (che e' contenuta nell'header del bmp e si perde in una cnversione a jpg).

Metto il link a un ulteriore programmino che converte da bmp 16 colori a raw 4 colori. La tabella di conversione e' scritta in un file editabile (bmp16to4_...dat, quindi la puoi cambiare come vuoi. Spero funzioni, fammi sapere.

formatting link

e

Se va bene il programmino di questa volta, si puo' vedere di farne uno anche per quest'altro caso.

Per ora no, ma funziona il DragAndDrop dei file nelle caselle di input, che =E8 quasi lo stesso ....

Grazie. Ne sono lusingato e ti ringrazio. Me ne parlerai quando sarai prossimo alla consegna della tesi.

Ebbene si', lo confesso.

Ciao.

lucky

Reply to
lucky

Il 19/03/2012 16:46, lucky ha scritto:

francamente non saprei, secondo me è corretto che la nona barra sia più scura dell'ottava. dalla foto non si nota, però la nona barra non è esattamente nera, è grigio scuro. Infatti corrisponde al colore RGB nero (000) con l'attributo luminosità attivo, quindi, secondo la logica della scheda, è un "nero chiaro" l'ottava barra invece è un colore RGB bianco (111) con l'attributo luminosità spento, quindi appare come grigio chiaro (sarebbe un bianco scuro secondo la logica dei bit)

è una paletta fissa. i bit RGB e I entrano tal quali in un monitor CGA/EGA, o tramite una rete di resistenze entrano in un codificatore PAL fatto con un MC1377

Non c'è differenza fra la visualizzazione tramite monitor RGBI e monitor PAL, tranne il giallo scuro che il monitor converte in una sorta di marrone. Prossimamente proverò ad entrare anche in una scart con segnale rgb e sincronismi compositi.

te la allego via mail.

sì, funziona, e ottima anche la tabella di conversione esterna.

ecco, mi basterebbe questa cosa e poi posso considerare concluso il programma :-)

ho visto, va benissimo così.

E allora hai dato un notevole contributo al mio computer. :-) Ti contatterò in provato per chiederti i dati da inserire nei ringraziamenti.

Ciao!

Paolo.

Reply to
Telespalla Bob

=F9

=E8

La paletta standard di paint usa 808080 per la ottava e c0c0c0 per la nona, quindi per paint la nona viene piu' chiara della ottava...

Confermo non ha usato la paletta standard.

ente

Metto il link del convertitore, spero di aver capito bene e di non aver sbagliato a realizzarlo, non ho modo di provarlo. Fammi sapere.

formatting link

Ciao.

lucky

Reply to
lucky

Il 23/03/2012 17:08, lucky ha scritto:

Grazie, scusa il ritardo. Devo ancora provarlo, ma non ho dubbi che funzioni. Ti ricontatterò per la tesina, ciao e grazie di tutto.

Paolo.

Reply to
Telespalla Bob

Cia'... volevo farti i complimenti per aver fatto un pc con una scheda grafica migliore della CGA!! Non sai quanto ho dovuto patire tempo addietro con quello schifo.. poi, stavo preparando il commento "che ficata" prima ancora di vedere le foto, ma poi le ho viste e... come soggetti vai sul pruriginoso.. da sbavare..

no credo che sbagli, mi pare evidente che tu abbia bisogno di un primo programma da GIF o JPEG cosa l'e' in BMP ma con una conversione intelligente dei colori e non una semplice scalata di colori e assegnazione numerica alla tavolozza std di PcPaint... compri'? Insomma potresti dover cercare parecchio tra il sw disponibile o farti un'altro prog. da te o ampliare quel che hai gia', insomma se nell'immagine scalata da te ci sono 16 tonalita', ma si vede bene che tendono al blu, devi scegliere se usare solo tinte piene quindi tradurre 10 livelli di blu/azz. in 2/3 soli (compreso bianco) o se usare addiritt. il dithering ovvero punti affiancati di 2 colori diversi per simulare una gradazione.. ciao..

Reply to
Dav.p

beh anacronistici addirittura? Se uno si vuol considerare pioniere allora si ma come esercizio e' sempre bello tosto.. no?

Reply to
Dav.p

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.