Convertire immagini RAW di fotocamere digitali mediante le funzioni esterne del API di Libraw

Da Gambas-it.org - Wikipedia.
Versione del 20 dic 2014 alle 11:35 di Vuott (Discussione | contributi) (Creata pagina con ''''Libraw''' è una libreria per la lettura dei file ''RAW'' ottenuti da fotocamere digitali fotografiche (CRW/CR2, NEF, RAF, DNG, MOS, KDC, DCR ed altri). Per poter utilizz...')

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Libraw è una libreria per la lettura dei file RAW ottenuti da fotocamere digitali fotografiche (CRW/CR2, NEF, RAF, DNG, MOS, KDC, DCR ed altri).

Per poter utilizzare in Gambas le risorse di questa libreria, bisognerà installare e richiamare la libreria cdinamica condivisa: "libraw_r.so.9.0.0"


Mostriamo di seguito un semplice esempio di come convertire un file immagine di tipo RAF in un file immagine di tipo PPM:

Library "libraw_r:9.0.0"

' libraw_data_t * libraw_init(unsigned int flags)
Private Extern libraw_init(flags As Integer) As Pointer

' int libraw_open_file(libraw_data_t*, const char *)
Private Extern libraw_open_file(libraw_data_t As Pointer, fileRawIn As String) As Integer

' int libraw_unpack(libraw_data_t*)
Private Extern libraw_unpack(libraw_data_t As Pointer) As Integer

' int libraw_dcraw_process(libraw_data_t* lr)
Private Extern libraw_dcraw_process(libraw_data_t As Pointer) As Integer

' int libraw_dcraw_ppm_tiff_writer(libraw_data_t* lr,const char *filename)
Private Extern libraw_dcraw_ppm_tiff_writer(libraw_data_t As Pointer, filename As String) As Integer

' const char *libraw_strerror(int errorcode)
Private Extern libraw_strerror(errocode As Integer) As String

' void libraw_close(libraw_data_t*)
Private Extern libraw_close(libraw_data_t As Pointer)
 

Public Sub Main()

 Dim libraw_data As Pointer
 Dim st As Stream
 Dim fileRAW, filePPM, make, model As String
 Dim err As Integer

  fileRAW = "/percorso/del/file.raf"
  filePPM = "/percorso/del/nuovo/file.ppm"
 
  libraw_data = libraw_init(0)
  If IsNull(libraw_data) Then Error.Raise("Impossibile inizializzare la libreria 'libraw' !")
 
  st = Memory libraw_data For Read Write
  Seek #st, 476
  Write #st, 1 As Integer
        
  err = libraw_open_file(libraw_data, fileRAW)
  If err Then Error.Raise("Errore: " & libraw_strerror(err) & " !")

  Seek #st, 176
  Read #st, make
  Seek #st, Seek(st) + 2
  Read #st, model
  Print "Processo di: ", Null, fileRAW; "  ("; make; " - "; model; ")"
  
  err = libraw_unpack(libraw_data)
  If err Then Error.Raise("Errore: " & libraw_strerror(err) & " !")
  
  err = libraw_dcraw_process(libraw_data)
  If err Then Error.Raise("Errore: " & libraw_strerror(err) & " !")
  
  Print "Scrittura del file: ", Null; filePPM

  err = libraw_dcraw_ppm_tiff_writer(libraw_data, filePPM)
  If err Then Error.Raise("Errore: " & libraw_strerror(err) & " !")


' Va in chiusura:
  st.Close
  libraw_close(libraw_data)

End



Riferimenti