PDA

View Full Version : [Java, ancora Java fino alla morte, quand'è che tornerò a C++ :'(] filtering immagine


71104
23-01-2007, 20:02
dunque, devo disegnare su un Canvas (tramite Graphics.drawImage ovviamente) un'immagine ottenuta "filtrando" i pixel di un'altra, cioè semplicemente cambiandoli con valori calcolati in base ai valori originali. l'immagine originaria sta in un oggetto BufferedImage, e ok: quello riesco a disegnarlo tranquillamente. poi per produrre l'immagine "filtrata" faccio pari pari come dice Sun alla documentazione di FilteredImageSource, ovvero:

ImageFilter filter = new MyClassDerivedFromRGBImageFilter();
FilteredImageSource filteredSource = new FilteredImageSource(original.getSource(), filter);
filtered = Toolkit.getDefaultToolkit().createImage(filteredSource);

dove "original" è un oggetto BufferedImage, "filtered" vorrebbe presumibilmente essere l'oggetto Image filtrato, e "MyClassDerivedFromRGBImageFilter" indovinate un po' cos'è? :p

problema: se passo filtered a Graphics.drawImage manco a dirlo non funziona; :cry: l'immagine non si vede, resta bianco (sotto ci ho disegnato un rettangolo bianco). mentre se tolgo filtered e metto original l'immagine originale si vede perfettamente. :help:

aggiungo: anche se il modello Producer/Consumer/Observer non è il sistema più consigliabile per fare quello che devo a questo punto vorrei comunque conoscere quale sarebbe in teoria la soluzione. ^^

jappilas
23-01-2007, 20:18
uhm probabilmente non c'entra, ma ... della tua canvas, la chiami la funzione di repaint? (se si tratta di una canvas per come la conosco io, fatta proprio per non lavorare in immediate mode, quasi sicuramente ne prevede l' uso) :stordita:

71104
23-01-2007, 20:32
si che la chiamo, ho anche messo un breakpoint nel punto dove avviene la drawImage e ci va! d'altra parte come ho detto ho provato a sostituire semplicemente "filtered" con "original": l'originale si vede, quella filtrata no!

71104
23-01-2007, 20:40
ehm :|

scusate, non so perché ma adesso funziona :|
sono giorni che lavorando su Eclipse i bug scompaiono magicamente senza che io tocchi codice: scompaiono semplicemente quando inizio a fare debug

inizio seriamente a pensare che sia qualche problema di mancata ricompilazione da parte di Eclipse...

scusate :|

PGI-Bis
23-01-2007, 21:01
Erano centosette anni che non vedevo più usare FilteredImageSource :D

71104
23-01-2007, 21:45
Erano centosette anni che non vedevo più usare FilteredImageSource :D e te pareva :P
in tal caso quale sarebbe invece il metodo più consigliato? creazione manuale di un'altra BufferedImage? in tal caso preferisco il FilteredImageSource perché checchè se ne dica nella mia situazione mi semplifica il codice :D

PGI-Bis
23-01-2007, 22:20
Penso che se la frittata è fatta tanto vale mangiarsela. Se hai già il codice che funziona non cambiarlo.

Comunque sì, se maneggi immagini precotte lavori con BufferedImage create usando il metodo createCompatibleImage di un GraphicsConfiguration. Le filtri con BufferedImageOp.

71104
24-01-2007, 01:01
ti ringrazio.