|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Feb 2004
Messaggi: 67
|
[java]ColorModel CMYK
Non vi do tregua...
Devo ottenere una conversione da rgb a cmyk e so che devo passare per questa operazione: ICC_ColorSpace iccp = new ICC_ColorSpace(ICC_Profile.getInstance(ICC_Profile.icSigCmykData)); (o almeno credo ![]() reperita dal seguente sito: http://java.sun.com/products/java-me...rs/jaifaq.html Ma non so come ottenere il ColorModel. Arigrazie (se avete altre soluzioni ripeto non esitate a postarle) Ultima modifica di leox_80 : 24-02-2004 alle 11:19. |
![]() |
![]() |
![]() |
#2 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Io proverei con un java.awt.image.ComponentColorModel
ComponentColorModel(ColorSpace colorSpace, boolean hasAlpha, boolean isAlphaPremultiplied, int transparency, int transferType) gli passi il tuo ICC_color space, gli altri parametri li ricavi dall'immagine da convertire (dovrebbe esserci un metodo in BufferedImage per ognuno) e poi via, alla bersagliera. Dici che non può funzionare? |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Feb 2004
Messaggi: 67
|
che mal di testa ragazzi
![]() Mo vedo che riesco a tirarne fuori, grazie ancora, se trovo la soluzione posto anche quella (: |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Feb 2004
Messaggi: 67
|
ColorModel colorModel = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.TYPE_CMYK),bits, false, false, 1, DataBuffer.TYPE_BYTE);
ecco come dovrebbe essere fatto, dico dovrebbe perchè il risultato è: java.lang.IllegalArgumentException: Unknown color space at java.awt.color.ColorSpace.getInstance(ColorSpace.java:329) at Image.immagini.ris.main(ris.java:36) Exception in thread "main" mannaggia la miseriaccia!!!!!!!! il problema è il ColoSpace.TYPE_CMYK perchè se lo setto a ColoSpace.CS_GRAY il risultato è una immagine a scala di grigio! |
![]() |
![]() |
![]() |
#5 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Non riesci a passargli il color space di prima?
ICC_ColorSpace iccp = new ICC_ColorSpace(ICC_Profile.getInstance(ICC_Profile.icSigCmykData)); In pratica dovresti (credo) usare un costruttore del JRE standard passandogli un "colorspace" di JAI...me so' spiegato bbene no? ![]() |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Feb 2004
Messaggi: 67
|
MADOOOOONNA non ci posso credere, ho cambiato il codice in
ICC_ColorSpace iccp = new ICC_ColorSpace(ICC_Profile.getInstance(ICC_Profile.icSigCmykData)); ColorModel colorModel = new ComponentColorModel(iccp ,bits, true, false, 1, DataBuffer.TYPE_BYTE); e pensa un pò?!?!?!?!?!?!?!?!?!?! non funziona lo stesso... stesso errore ![]() |
![]() |
![]() |
![]() |
#7 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Codice:
try { BufferedInputStream inBuffer = new BufferedInputStream( new FileInputStream("Z:\\Software Downloads\\JAICMM\\CMYK.pf")); ICC_Profile cmykProfile = ICC_Profile.getInstance(inBuffer); ICC_ColorSpace cmykColorSpace = new ICC_ColorSpace(cmykProfile); } catch(IOException e) { System.out.println(e); } Ho usato il metodo getInstace(InputStream) passandogli come stream un flusso diretto ad uno dei profili ICC scaricati dal sito di Sun. |
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Feb 2004
Messaggi: 67
|
mi manderesti i profili?
oppure il link da dove scaricarli Grazie |
![]() |
![]() |
![]() |
#9 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
http://java.sun.com/products/java-me...oad-1_1_2.html
scorri la pagina verso il basso, c'è il pacchetto JAICMM |
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Feb 2004
Messaggi: 67
|
Grazie ancora, l'ho scaricato e implementato!
Ora non mi completa il file tiff UAAAAAAAAAAAAAAAAH. Bella idea comunque. Grazie ancora per l'aiuto |
![]() |
![]() |
![]() |
#11 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Qui mi viene una cosa di questo tipo:
Codice:
try { BufferedInputStream inBuffer = new BufferedInputStream( new FileInputStream("Z:\\Software Downloads\\JAICMM\\CMYK.pf")); ICC_Profile cmykProfile = ICC_Profile.getInstance(inBuffer); ICC_ColorSpace cmykColorSpace = new ICC_ColorSpace(cmykProfile); BufferedImage image = ImageIO.read(new File("z:\\marmotta.jpg")); ColorConvertOp cmykConversion = new ColorConvertOp( image.getColorModel().getColorSpace(), cmykColorSpace, null); BufferedImage convertedImage = cmykConversion.filter(image, null); } catch(IOException e) { System.out.println(e); } |
![]() |
![]() |
![]() |
#12 |
Member
Iscritto dal: Feb 2004
Messaggi: 67
|
si ma io ho a che fare con delle tiff e non delle jpeg...
ora provo poi ti faccio sapere |
![]() |
![]() |
![]() |
#13 |
Member
Iscritto dal: Feb 2004
Messaggi: 67
|
public class ris{
public static void main(String args[]) throws IOException{ final int XRES_TAG = 282; final int YRES_TAG = 283; int[] resolution = { 304, 1}; String input = "C:/a/01.tif"; String output = "C:/a/nuovo.tiff"; FileSeekableStream stream = new FileSeekableStream(input); //RenderedImage image1 =(RenderedImage) JAI.create("stream",stream); RenderedOp image3 = JAI.create("stream",stream); image3.getAsBufferedImage(); TIFFField xRes = new TIFFField(XRES_TAG, TIFFField.TIFF_SRATIONAL, 1, new int[][] { resolution }); TIFFField yRes = new TIFFField(YRES_TAG, TIFFField.TIFF_SRATIONAL, 1, new int[][] { resolution }); TIFFEncodeParam tep = new TIFFEncodeParam(); tep.setExtraFields(new TIFFField[] { xRes, yRes}); OutputStream out = new SeekableOutputStream(new RandomAccessFile(output,"rw")); tep.setCompression(TIFFEncodeParam.COMPRESSION_NONE); //ICC_ColorSpace iccp = new ICC_ColorSpace(ICC_Profile.getInstance(ICC_Profile.icSigCmyData)); BufferedInputStream inBuffer = new BufferedInputStream(new FileInputStream("C:/profili/CMYK.pf")); ICC_Profile cmykProfile = ICC_Profile.getInstance(inBuffer); ICC_ColorSpace cmykColorSpace = new ICC_ColorSpace(cmykProfile); ColorConvertOp cmykConversion = new ColorConvertOp(image3.getColorModel().getColorSpace(),cmykColorSpace, null); BufferedImage convertedImage = cmykConversion.filter(image3.getAsBufferedImage(), null); ImageEncoder encoder = ImageCodec.createImageEncoder("TIFF",out, tep); encoder.encode((RenderedImage)convertedImage); out.close(); } } Questo è quanto. La conversione è effettuata e anche se photoshop dice che è in cmyk io dico di no. Questo perchè l'immagine che viene fuori e molto più scura dell'originale e se si va con il contagocce a vedere la gamma dei colori, cambiano soltanto i valori di c m e y ma mai di k! (anche sul nero). |
![]() |
![]() |
![]() |
#14 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Andando per tentativi proverei allora a far creare all'engine Java un Buffer compatibile prima di copiargli sopra i dati convertiti.
Codice:
BufferedInputStream inBuffer = new BufferedInputStream( new FileInputStream("Z:\\Software Downloads\\JAICMM\\CMYK.pf")); ICC_Profile cmykProfile = ICC_Profile.getInstance(inBuffer); ICC_ColorSpace cmykColorSpace = new ICC_ColorSpace(cmykProfile); BufferedImage image = ImageIO.read(new File("z:\\marmotta.jpg")); ColorConvertOp cmykConversion = new ColorConvertOp( image.getColorModel().getColorSpace(), cmykColorSpace, null); ComponentColorModel colorModel = new ComponentColorModel( cmykColorSpace, false, image.isAlphaPremultiplied(), image.getTransparency(), image.getRaster().getDataBuffer().getDataType()); BufferedImage convertedImage = cmykConversion.createCompatibleDestImage(image, colorModel); cmykConversion.filter(image, convertedImage); |
![]() |
![]() |
![]() |
#15 |
Member
Iscritto dal: Feb 2004
Messaggi: 67
|
Ok... provo domani che oggi sono finito!!!
Grazie.. poi ti faccio sapere ![]() |
![]() |
![]() |
![]() |
#16 |
Member
Iscritto dal: Feb 2004
Messaggi: 67
|
Purtroppo il risultato è lo stesso. Avevo già provato ma dall'alto della mia ignoranza ero sicuro di aver toppato qualcosa!
Comunque a me da errore con il metodo getTransparency()... dove lo hai trovato? BufferedInputStream inBuffer = new BufferedInputStream(new FileInputStream("C:/profile/CMYK.pf")); ICC_Profile cmykProfile = ICC_Profile.getInstance(inBuffer); ICC_ColorSpace cmykColorSpace = new ICC_ColorSpace(cmykProfile); ColorConvertOp cmykConversion = new ColorConvertOp(image3.getColorModel().getColorSpace(),cmykColorSpace, null); ComponentColorModel colorModel = new ComponentColorModel(cmykColorSpace,true,image3.getAsBufferedImage().isAlphaPremultiplied(),1,image3.getAsBufferedImage().getRaster().getDataBuffer().getDataType()); BufferedImage comp = cmykConversion.createCompatibleDestImage(image3.getAsBufferedImage(), colorModel); BufferedImage convertedImage = cmykConversion.filter(image3.getAsBufferedImage(), comp); ImageEncoder encoder = ImageCodec.createImageEncoder("TIFF",out, tep); encoder.encode((RenderedImage)convertedImage); out.close(); |
![]() |
![]() |
![]() |
#17 |
Member
Iscritto dal: Feb 2004
Messaggi: 67
|
riskio di gettare la spugna...
comunque grazie PGI sei stato un grande (: |
![]() |
![]() |
![]() |
#18 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Calma e gesso.
Allora, c'è una svista (colpa mia) proprio su quel getTransparency() che è disponibile solo su Java 1.5. getTransparency() restituisce un intero che può avere il valore Transparency.OPAQUE, se l'immagine non ha un canale Alpha (es. BMP) Transparency.BITMASK se l'immagine ha 1 bit di trasparenza (es. GIF) Transparency.TRANSLUCENT se l'immagine ha più di 1 bit di trasparenza (es. PNG) Prima dell'1.5 c'è lo stesso metodo per il ColorModel: bufferedImage.getColorModel().getTransparency(). |
![]() |
![]() |
![]() |
#19 |
Member
Iscritto dal: Feb 2004
Messaggi: 67
|
La calma c'è... il gesso me lo sono sniffato!
Ho provato a fare la conversione di una semplice jpg: BufferedInputStream inBuffer = new BufferedInputStream( new FileInputStream("C:/profili/CMYK.pf")); ICC_Profile cmykProfile = ICC_Profile.getInstance(inBuffer); ICC_ColorSpace cmykColorSpace = new ICC_ColorSpace(cmykProfile); BufferedImage image = ImageIO.read(new File("C:/a/01.jpg")); ColorConvertOp cmykConversion = new ColorConvertOp( image.getColorModel().getColorSpace(), cmykColorSpace, null); BufferedImage convertedImage = cmykConversion.filter(image, null); File f = new File("C:/a/nuovo.jpg"); ImageIO.write(convertedImage, "JPEG", f); E l'immagine creata non esiste!!! Ditemelo che devo sbattere la capoccia su uno spigolo! Più che non esistere non viene visualizzata. |
![]() |
![]() |
![]() |
#20 |
Member
Iscritto dal: Feb 2004
Messaggi: 67
|
Il problema sta nell'operazione di conversione!
Se voglio salvare l'immagine così come l'ho aperta posso farlo, quella convertita invece la salva ma con qualche errore interno che non la fa visualizzare. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:58.