Newsgroup: it.comp.lang.visual-basic
Titolo: -> Come fare a leggere un file binario per..

.. mi spiego :
ho un file binario che rappresenta un'immagine, il "0 " č il nero e l'"1" č
il bianco , per ora apro il file e copio il contenuto in una text e poi
opero su di essa stampando un pixel biano per gli 1 e uno nero per gli zeri
,
PS aiutatemi sono inesperto di vb !!!
NB :Non controllo il NG molto spesso rispobdete a : 
baronef...@tin.it
grassie
--
<><><><><><><><><><><><><>
<>Thank's ! Reply to :                    <>
<> 
baronef...@tin.it
                 <>
<> 
http://gigio.cjb.net
                 <>
<><><><><><><><><><><><><>

Ci metterai una vita!
Quello che ti serve è - se ho capito - di leggere stream di bits (immagino
che siano immagini monocromatiche). A parte il problema di come gestire il
buffer (le 'righe' sono di uguale misura? etc.) puoi fare così: invece di
una stringa, usa un array di long (sempreché la riga sia giustificata a 32
bit, altrimenti usa un array di int o infine un array di byte a seconda
della giustificazione a 16 o 8 bit) dimensionato in modo che il numero degli
elementi * la dimensione del tipo corrisponda ai byte per riga (
p.es
. se usi
le long devi dimensionare a 1 TO (numero_byte_x_riga * 8 + 31) \ 32). Per
ogni riga fai una get dell'array (carica automaticamente tutti gli
elementi - se per questo puoi fare una get di tutto il file ma è
sconsigliabile se è grande) e poi, per ogni elemento dell'array, testi i bit
in questo modo (ti sconsiglio un loop anche se questo sembrerebbe il caso
adatto:
FOR i=1 TO k
    IF (myarray(i) AND &H8000000) THEN
        'pixel=1
    ELSE
        'pixel=0
    ENDIF
    IF (myarray(i) AND &H4000000) THEN
        'pixel=1
    ELSE
        'pixel=0
    ENDIF
etc, fino a
    IF (myarray(i) AND &H1) THEN
        'pixel=1
    ELSE
        'pixel=0
    ENDIF
NEXT i
Se usi degli int devi partire da &H8000, se usi dei byte devi partire da
&H80.
(Ovviamente non tengo conto del fatto che l'unità - byte, word o dword che
sia - possa essere in formato diverso da quello 'intel'.)
In ogni caso sarà una procedura molto lenta (rispetto agli standard) a meno
che tu non la scriva in assembler o in un C ottimizzato usando variabili
register.
----------------------------------------------------------------------
Stefano Minardi
Zetesis: 
zet...@mclink.it
----------------------------------------------------------------------

grazie per la spigazione, vi mando il file per ulteriori aiuti !!! , i file
sono piccoli , quindi come velocizzare la loro lettura ???
--
<><><><><><><><><><><><><>
<>Thank's ! Reply to :                    <>
<> 
baronef...@tin.it
                 <>
<> 
http://gigio.cjb.net
                 <>
<><><><><><><><><><><><><>
begin 666 3nike.ngg
<encoded_portion_removed>

Forse sto dicendo una bippata... ma nel vecchio vb potevi fare, dopo aver
scoperto la dimensione dell'unità di colori...
dim mat(0 to pixelLung*pixelLarg) as integer
dim c as integer
c=freefile
open "miofile" for binary access read [write] as #c
    get #c,,m()
close
put m()
--
Saluti da Barovia
Strahd von Zarovich

Io a questo file un'occhiata ce l'ho anche data, ma il formato mi è del
tutto sconosciuto. (Una cosa mi ha sconvolto, però. Dentro ci sono *byte* -
non bits -  a 0 e 1, cioè: proprio i *caratteri* "0" e "1". Mi pare poco
ottimizzato, a dir poco...)
