PDA

View Full Version : [JAVA] leggere img HDR


ectobsidian
29-01-2014, 22:00
Ciao ragazzi, devo riuscire a leggere una immagine HDR (ad alta dinamica) tramite Java e dopo numerose ricerche ho trovato questo link che potrebbe essermi utile:

http://pages.cs.wisc.edu/~lizhang/courses/cs766-2007f/projects/hdr/

Però la libreria "gil" che è quella che permetter di leggere HDR è in C++, posso importala in Java in qualche modo? xD

In alternativa avete qualche idea/suggerimento per leggere img HDR con Java?

Grazie, ciao!!
[AGGIORNAMENTO: questo può essere utile, sto cercando di capire come funziona: http://code.google.com/p/javacpp/ ]

sottovento
30-01-2014, 04:53
Si, javacpp ti puo' essere di aiuto.
Personalmente preferisco creare i JNI direttamente, visto che (se non sbaglio), javacpp aveva il problema di fissare i path direttamente nel codice, vale a dire che chiunque poi desideri utilizzare la tua applicazione la deve installare esattamente nella tua stessa cartella.

Cmq non e' difficile: crei una classe Java contenente i metodi che vuoi chiamare e li dichiari nativi, senza quindi fornire alcuna implementazione.
Dopo di che compili ed utilizzi javah, il quale generera' un file .h contenente i nomi delle funzioni che devi implementare in C++ (praticamente devi richiamare le funzioni contenute nella libreria che vuoi usare da Java - devi solo fare un "wrapper").
Quindi, crei un progetto C++, includi ed implementi le funzioni dichiarate nel suddetto file generando una dll (windows), .sl/.so (unix/linux).
Il caricamento della libreria .dll/.sl/.so avverra' mediante la System.loadLibrary().

E' piu' difficile a dirsi che a farsi, non preoccuparti :D

ectobsidian
30-01-2014, 09:03
Ciao, ti ringrazio per la risposta...
Ma quello che hai detto mi risulta quasi del tutto arabo :mc:
Non è che mi puoi un esempio stupido giusto per capire come funziona?
Quello che hai detto è in sostanza per usare la classe C++ in Java, ma se volessi fare tutto in Java è possibile leggere questa benedetta HDR???

sottovento
30-01-2014, 10:07
Se ti risulta arabo, la colpa non e' tua ma mia, visto che sono in Arabia Saudita :D

Scherzi a parte, ti chiedo scusa, ho scritto proprio male.
Purtroppo qui nel deserto la connessione ad internet non e' proprio delle migliori; comunque, googlando un attimo puoi trovare quello che vuoi. Per esempio, una semplice introduzione in italiano la trovi qui:
www.tti.unipa.it/~ricrizzo/dispense/JNI.pdf‎
Si tratta del solito hello, world scritto in C++ e richiamato in Java. Ti mostra passo per passo come fare.

ciao

ectobsidian
30-01-2014, 11:54
Sì, adesso è più chiaro, anche se pensavo fosse un po' meno complicato il procedimento... :muro:
Per creare la dll dal file C++ che compilatore devo scaricare? (mi sono bloccato nella parte finale per creare la libreria condivisa!)
Mi dà sempre errore nell'installazione di qualsiasi compilatore microsoft (microzozz)!!!
-------
Mi sono accorto che qui: http://pages.cs.wisc.edu/~lizhang/courses/cs766-2007f/projects/hdr/
cliccando nel primo "here" del punto 2 si può scaricare la libreria (quindi se non sbaglio non la devo creare, ce l'ho già).
Se volessi usarla quindi basta importarla?

ectobsidian
30-01-2014, 15:10
Qui:

http://code.google.com/p/realtimehdrimageprocessing/downloads/detail?name=FastHDR.tar&can=2&q=

c'è un progetto che mi può essere utile.
(preferirei fare tutto con Java, invece di importare librerie esterne)
La classe HDRFast mi permette di caricare img! Solo che ho provato ma non carica l'img!
Mi dà questi errori:
RGBE: not enough data to read in the simple format.
at fasthdr.io.RGBE.readRadiance(RGBE.java:138)
at fasthdr.io.RGBE.read(RGBE.java:222)
at fasthdr.controller.FastHDR.setFile(FastHDR.java:56)
at fasthdr.view.FastHDRFrame$1$1.run(FastHDRFrame.java:134)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

sottovento
31-01-2014, 11:12
Qui:

http://code.google.com/p/realtimehdrimageprocessing/downloads/detail?name=FastHDR.tar&can=2&q=


Bene, sembra che abbia trovato una libreria in Java gia' pronta!
Questo ti evita tutta la complicazione di cui abbiamo parlato, visto che e' tutto in java e non hai bisogno di jni.


RGBE: not enough data to read in the simple format.

Sembra che non abbia fornito abbastanza dati.
Prova a controllare, e casomai posta il tuo programma qui, se ti va, cosi' ci diamo un'occhiata insieme.
Nel caso decidessi di postare il programma, prova a postare anche i dati che usi per i test, cosi' e' possibile riprodurre il problema anche da un altro computer

Buon week end

ectobsidian
10-03-2014, 19:27
ciao ragazzi....rispolvero la discussione perchè sono riuscito a caricare l'immagine .hdr ma non riesco a visualizzarla in modo originale.
Qui:

http://code.google.com/p/realtimehdrimageprocessing/downloads/detail?name=FastHDR.tar&can=2&q=

c'è un progetto funzionante che facendo partire il main apre un'interfaccia.
Si seleziona un file .hdr (qui: http://www.4shared.com/get/uGR6AFcYba/Bottles_Small.html potete scaricare un file .hdr per provare).
Appena si sceglie il file c'è una lista di algoritmi (lineare ecc...)
Io invece di fare un algoritmo devo semplicemente visualizzare il file originale!
Ho provato a fare mille modifiche ma non riesco a visualizzare l'originale...
Mi sto incasinando per niente!
P.S: Ad esempio sto cercando di modificare il file "Linear" del pacchetto fasthdr.tmo, togliendo le parti dell'algoritmo, per lasciare il file originale...
Ma non mi visualizza più niente...