Bitmap e memoria |
Antonios |
07/08/2005 |
Difficoltà:
Difficile
|
|
Salve
a
tutti,
stavo
cercando
di
capire
come
decodificare
una
immagine
bmp.
Fin
ora
ho
capito
come
"funziona"
quella
a
24bit
di
colore,
ho
capito
come
trovare
le
dimensioni
della
stessa
e
come
sono
disposti
nel
file
i
3
Byte
per
i
colori.
Sto
cercando
di
fare
un
programma
che
compia
operazioni
grafiche
3d:
peradesso
posso
disegnare
punti
linee
cerchi
e
rettangoli
nello
spazio.
Inoltre
su
queste
figure
geometriche
posso
effettuare
traslazioni
e
rotazioni.
Ora
riesco
a
caricare
anche
immagini
bmp
a
24bit
e
su
queste
voglio
farci
le
stesse
operazioni
di
rotazione
e
traslazione
per
usarle
a
mo
di
texture.
Ora
sto
notando
che
pur
avendo
un
pc
abbastanza
nuovo
per
caricare
delle
bmp
di
grandi
dimensioni,
passa
parecchio
tempo
(anche
un
secondo).
Sto
usando
la
Sub
sotto,
che
legge
i
3
Byte
del
colore
uno
alla
volta...
Sto
usando
VB6.
D1)
Non
potreste
cortesemente
suggerirmi
un
modo
per
velocizzare
il
caricamento
in
memoria?
D2)
Se
può
servire
a
velocizzare...come
si
fa
a
dichiarare
un
tipo
di
dati
di
3byte
invece
che
di
1(byte)
o
2(integer)
o
4(long)
Byte
e
leggere
direttamente
i
gruppi
a
3
alla
volta?
D3)
C'è
un
modo
per
gestire
la
memoria
in
VB
senza
usare
i
lenti
array
in
quanto
anche
dopo
che
ho
caricato
la
bmp
nell
array,
per
visualizzarla
a
video
ci
si
impiega
sempre
un
bel
po
di
tempo...(e
nn
sto
facendo
nessuna
operazione
3d)?
D4)
Come
decodifico
le
bmp
a
8bit
che
sono
piu
piccole
in
dimensione
e
con
sufficiente
informazione
sul
colore
(che
dovrebbero
essere
gestibili
piu
rapidamente)?
D5)
Per
prova
ho
creato
una
bmp
a
8bit
di
un
solo
pixel,
ma
occupa
2kbyte
quasi....che
altre
info
ci
sono
dentro
e
come
si
fa
capirci
qualcosa?qualche
guida?
Grazie
a
tutti
ecco
la
sub:
Sub
CARICABMP(nome$)
Open
nome$
For
Binary
As
1
Dim
Intestazione(54)
As
Byte
Dim
R
As
Byte
Dim
G
As
Byte
Dim
B
As
Byte
rem
qua
ci
sono
le
info
della
bmp
For
T
=
1
To
54
Get
#1,
T,
Intestazione(T)
Next
T
Rem
calcolo
le
dimensioni
Lunghezza
=
Intestazione(19)
*
256
^
0
+
Intestazione(20)
*
256
^
1
+
Intestazione(21)
*
256
^
2
+
Intestazione(22)
*
256
^
3
Larghezza
=
Intestazione(23)
*
256
^
0
+
Intestazione(24)
*
256
^
1
+
Intestazione(25)
*
256
^
2
+
Intestazione(26)
*
256
^
3
For
LNZ
=
Larghezza
To
1
Step
-1
For
LGZ
=
1
To
Lunghezza
Step
1
Get
#1,
,
B
Get
#1,
,
G
Get
#1,
,
R
IMG(LNZ,
LGZ)
=
CLng(R)
*
256
^
0
+
CLng(G)
*
256
^
1
+
CLng(B)
*
256
^
2:rem
qua
c'è
il
colore
Next
Next
Close
1
Rem
ho
caricato
in
memoria
la
mappa
di
Byte
nell
array
rem
ora
lo
mostro
a
video
For
LNZ
=
1
To
Larghezza
For
LGZ
=
1
To
Lunghezza
Schermo.PSet
(LGZ
*
15,
LNZ
*
15),
IMG(LNZ,
LGZ):
'RGB(R,
G,
B)
Next
Next
End
Sub
|