Newsgroup: it.comp.lang.visual-basic
Titolo: Bitmap in un array

Vorrei realizzare un programma che:
dato un file bitmap a 256 colori, sia in grado di creare un array che
contenga il numero di colore di ogni pixel seguendo un qualsiasi ordine di
lettura (meglio dal basso a sinistra a salire verso destra).
Se ovviamente si tratta di poche righe di codice, mi sapreste dire come
fare?
Grazie!

 ha scritto

non sono sicuro che ci sia, ma puoi provare
http://www.flanguasco.org/

 contenga il numero di colore di ogni pixel ...
il numerodi colore di ogni pixel ?
i numeri di colori di ogni pixel !
le immagini a colori sono matrici a tre dimensioni
larghezza e altezza dell'immagine sono le prime due e la terza serve per la
quantità di rosso, verde e blu.
cia Valerio

 quantità di rosso, verde e blu.
Ci ho messo un bel po' a capire (almeno _credo_ di aver capito :-) )
quello che intendi dire. Non mi pare corretta l'espressione, che hai
usato, però.
Un'immagine va considerata come un array a _due_ dimensioni,
larghezza e altezza, ogni elemento della matrice contiene un
Long che rappresenta il colore (valore RGB) di un singolo pixel[1].
Se poi vuoi, a livello di programmazione, nessuno ti vieta di
usare una matrice monodimensionale e usare dei puntatori alla
posizione X e Y (anzi, alla fin fine il processore fa così...).
[1] Ovviamente questa è un'ipersemplificazione basata su
un'immagine RGB, non grayscale né CMYK, colori indicizzati
o altro, non compressa, senza canale alfa, ecc. ecc.
Parliamo di PictureBox, insomma :-))
Bye, G.

 Bye, G.
Beh penso che MandarX volesse solo dare un'idea
per la rappresentazione non in memoria ma nella nostra
testa di una immagine per pixel e l'idea della matrice
tridimensionale secondo me era abbastanza intuitiva.
                                danilo

no, l'immagine è proprio una matrice a tre dimensioni
si puo vedere  come tre piani uno sull'altro tutti e tre della stessa
larghezza e altezza
dove l'elemento di ogni piano ha il valore del rosso il valore del verde
e il valore del blu, per il pixel di coordinate i,j
immagine(i,j,1)=rosso del pixel (i,j)
immagine(i,j,2)=verde del pixel (i,j)
immagine(i,j,3)=blu del pixel (i,j)
infatti col photoshop o col matlab si possono separare i canali dei
colori cosa che sarebbe impossibile se il colore fosse rappresentato da
un numero unico
si puo anche manipolare uno solo di questi canali.
quindi rifacendomi alla domanda di Matteo Rizzi volevo dire che per
creare un array dove si inserisce il colore aveva bisogno di un array
tridimensionale

 un numero unico
Forse non mi sono spiegato.
Per ogni pixel, c'è _un solo_ valore RGB, che in effetti è un Long.
Volendo puoi scomporre questo Long nei tre canali RGB, ma se
è per questo con il programma giusto puoi scomporlo anche in
LAB, CIE, HSL, YUV o altri "spazi colore", come CMYK (che per inciso
ha 4 canali).
Se l'immagine è 2D, non mi pare logico usare una matrice 3D.
<filosofia & technobubble>
    D'altra parte, la rappresentazione RGB è solo un'approssimazione
    alla realtà, nella quale ogni oggetto riflette (o emette) fotoni di un
    intera gamma di energia e quindi frequenza, ognuno con livelli
    potenzialmente quasi infiniti di energia (quantistica permettendo),
    ed è solo l'insieme occhio-cervello che creano la sensazione del
    "colore".
</filosofia & technobubble>
Tornando IT, poche prove con le funzioni SetPixel e GetPixel, o le
API corrispondenti ti dovrebbero convincere che la rapppresentazione
interna della PictureBox è a 2D.
Oppure dai un'occhiata qui: 
http://www.vbexplorer.com/show.asp?id=188
o naturalmente sul sito dell'ottimo Franco Languasco:
http://www.flanguasco.org/VisualBasic/VisualBasic.html
Altri link utili:
http://www.neuro.sfc.keio.ac.jp/~aly/polygon/info/color-space-faq.html
http://www.bergen.org/AAST/ComputerAnimation/Help_FAQs.html
Bye, G.

attenzione se usiamo immagini a 256 colori o in biaco e nero allora si che la
matrice è 2d
ovvimaente una matrice 2d puo essere vista anche come un'immagine, ma la vera
immagine ha 3 dimensioni.
scusa se no come ti scomponi il colore? se hai un numero long questo si può
dividere in tre parti in moltissimi modi no? per ipotesi immaginiamo di avere
6000 questo potrebbe essere 4000 rosso 1000 verde e 1000 blu
o        4000rosso  1500 verde e 500 blu
o        2000rosso  2000 verde e 2000 blu
che sono tutti colori diversi per cui 6000 non vuoldire un bel nulla.
ciao Valerio
Paperino ha scritto:


 dividere in tre parti in moltissimi modi no?
Andare a vedere _uno_ dei link che ho postato, no, eh ? :-(
Comunque, basta separare i tre bytes... la codifica colore RGB
è ben specificata. In VB puoi ottenere la scomposizione di un
Long RGB con queste tre mini-funzioni (FAQ 28 sul Sito Comune):
_________________________
Public Function Blue(Colorref As Long) As Integer
    Blue = (Colorref \ &H10000) And &HFF
End Function
Public Function Green(Colorref As Long) As Integer
    Green = (Colorref \ &H100) And &HFF
End Function
Public Function Red(Colorref As Long) As Integer
    Red = Colorref And &HFF
End Function
_________________________
Bye, G.

 ha scritto nel messaggio
news:3C7E77D7...@hotmail.com...

Beh Matlab lo conosco bene anche io.
I colori si possono separare, ma quello che dici tu è comunque una
rappresentazione umana.
Un punto  rappresentato da 32 bit potrebbe avere i primi 8 per il rosso,
i secondi per il blu, i terzi per il giallo e i quarti per il canale alfa
cioè
la trasparenza.
E' solo una rappresentazione in realtà se non sai come si legge
un file  di immagine è una sequenza di bit e basta.

 > immagine ha 3 dimensioni.
francamente non vedo una differenza _qualitativa_ in un valore meramente
_quantitativo_. a parte che se proprio vuoi distinguere 2 da 3 d, 2 e' b/n
_e basta_. pixel acceso/spento, come nei vecchi monitor. ogni _profondita'_
di colore implicherebbe il 3d. ma sto usando l'ipotetico.
quando devo spiegare le immagini e il loro peso a chi non ne capisce nulla
uso excel e faccio un normale grafico 3d. in questo modo riesco a includere
le immagini a 1 bit e quelle a 32 bit. ma se vuoi pensare all'immagine, devi
pensare di guardare i parallelepipedi di excel dal basso, stando sotto la
base del grafico a testa in su.
la formula e' sempre la stessa. h * l * p, con p da 1 a infinito (eheheh,
vorrei vedere la matrox, nel caso :). e p e' un solo valore. per comodita'
tua puoi scomporlo, ma come dice paperino, il fatto di avere diverse
codifiche non cambia la questione. e come saggiamente dice danilo, un file
di immagine e' una sequenza di bit. se lo apri con un editor avrai una
dicersa visualizzazione, in base a una diversa codifica :)
poi, puoi concepirla come vuoi, 2, 3, 4 d. ma l' 'immagine', in se', e'
piatta ( tant'e' che sta beatamente in un monitor :) -- se vuoi capire un
quadro con una prospettiva _devi_ sforzarti di vederlo piatto. la linea di
un tetto non va dietro il quadro, scende verso il basso.
ciao, a.



e di cosa parlo io ? non sono tre campi completamente distinti? in ogni caso
scindibili ?3byte 3byte e 3byte anche se li puoi interpretare come 9 byte. (cosa
cambia? sempre tre sono le informazioni e sempre tre matrici puoi generare)
io non sto dicendo che un'immagine 2d ha 3 dimensioni nel senso che l'immagine è
tridimensionale ma che le informazioni sul colore sono 3 e non una (in ogni caso
riconducibili a tre) e che secondo me se devi fare delle operazioni su questa
matrice è meglio tenere questi tre valori separati tutto qui.
ciao Valerio


ciao
Valerio.3D


Come giustamente dice MandarX, la memorizzazione dell'immagine RGB è
tridimensionale, ossia basata sull'assegnazione di valori in celle
identificate da tre coordinate: X, che va da 0 a ...., Y che va da 0 a ....,
e 'Colore' che va da R a G a B.
Non mi risulta che i byte per pixel siano 9, quanto piuttosto 3, 1+1+1, ma
su questo potrei anche sbagliarmi.
Ciao
Alberto

 un file  di immagine è una sequenza di bit e basta.
giusto
comunque guardando la struttura del file bmp come dice anche Paperino:
Bitmap has a maximum of 2^24 colors. The bmiColors (or bmciColors)
member is NULL, and each 3-byte sequence in the bitmap array represents the
relative intensities of red, green, and blue, respectively, for a pixel.
le informazioni sui colori sono sempre tre
questo è quello che volevo dire
ciao Valerio

 ??? se l'immagine č piatta allora che diavolo c'č dietro il monitor?
un cimitero indiano ?
ciao, j.poltergeist