2016-07-05 13 views
6

Sto provando a leggere un file BMP in R utilizzando la funzione read.bmp nel pacchetto bmp. Tuttavia, viene visualizzato il seguente errore:read.bmp() mancata corrispondenza tra il numero previsto e il numero effettivo di byte nel file

Error in read.bmp("tiger.bmp") :mismatch between predicted and actual number of bytes in image

Non sono sicuro di come è possibile superare questo errore. Qualsiasi aiuto è molto apprezzato.

+4

puoi condividere in qualche modo il file bmp che stai utilizzando? –

risposta

3

Questo messaggio indica che read.bmp prevede una certa profondità di byte, 4 byte per numero intero nel binario, con ogni intero che compone una parte del pixel, che è possibile vedere in questa sezione di codice. Lo script sta definendo e testando le dimensioni del file in base alla profondità del colore e alle definizioni dell'intestazione.

Se si guarda a questo codice, che è sotto il cofano della funzione:

bytes_pixel=h$depth/8 
    row_width_bytes=h$width * bytes_pixel 
    # bmp rows are written to lenth of nearest 4 bytes 
    rounded_row_width_bytes = ceiling(row_width_bytes/4)*4 
    bytes_to_trim = row_width_bytes %% 4 
    bytes_to_read=rounded_row_width_bytes * h$height 
    if(h$bmp_bytesz==0) { 
    if(Verbose) warning("invalid byte size information for image") 
    } 
    else if(h$bmp_bytesz != bytes_to_read) 
    stop("mismatch between predicted and actual number of bytes in image") 

h$bmp_bytesz=4

I h$ campi sono tutte le impostazioni di intestazione definite che ha fissato la profondità di byte di 1L a 4 per vari dimensioni dell'immagine. Questa sezione sta verificando che il file arrivi come previsto. È 8, 24 o 32 bit perché ha superato il primo avviso sopra questa sezione. Si è interrotto perché c'è un problema con le dimensioni codificate del file.

Se il file è formattato correttamente e non danneggiato, con 3x8 canali, dovrebbe entrare correttamente. (O in bianco e nero con canali 1x8)

prova ad eseguire:

is.bmp('tiger.bmp') per vedere se restituisce che si tratta di un file valida di Windows BMP.

+0

Ho aperto il bounty perché ho un bmp che non può essere letto in R e può essere letto in Python. La funzione is.bmp restituisce FALSE come indicato. Ho caricato il file qui: https://github.com/jon-nagra/Stack-Sample-Files/blob/master/replay.bmp Quale può essere il motivo dell'errore con quel file? In ogni caso, grazie per la spiegazione sugli interi di read.bmp, eseguirò il debug di quella parte del codice per vedere cosa sta succedendo. –

+0

Ho solo giocato un po 'con esso e ho avuto due errori aprendolo. Guardando in giro in photoshop sembra a posto. Si è mostrato come rgb e 8 bit che è strano. Ma cambiare in scala di grigi non ha risolto il problema ... anche altri due metodi non funzionavano. Sono stato in grado di salvarlo come un file tiff (che non è anche compresso e leggerlo all'istante.) Se questo non distrugge il tuo processo, puoi provarlo usando il pacchetto 'tiff' readTIFF. Se non posso lasciarti cadere l'immagine se come – sconfluentus

+0

e ... quando ho provato is.bmp diceva VERO ... ma non l'aprivo.Potresti essere in grado di risolverlo con un download di riparazione di file per le immagini.Ma salvando come TIFF è stato piuttosto facile. – sconfluentus

Problemi correlati