IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Graphisme Java Discussion :

[Image] [JAI] conversion d'espaces de couleur


Sujet :

Graphisme Java

  1. #1
    Membre expérimenté
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Points : 1 640
    Points
    1 640
    Par défaut [Image] [JAI] conversion d'espaces de couleur
    Bonjour à tous,
    je suis en train d'écrire des bouts de code effectuant des traitements "basiques" sur des images, à savoir conversion des formats d'entrées (jpeg, tiff, png / RGB, CMYK) vers un format unique pour traitement (tiff / sRGB).
    Pour cela, j'ai écrit ce petit bout de code pour la conversion d'espaces colorimétriques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    	private static ColorSpace loadRgbColorSpace() {
    		return ColorSpace.getInstance(ColorSpace.CS_sRGB);
    	}
     
    	private static ColorSpace loadCmykColorSpace() throws Exception {
    		ICC_Profile profileOutput = null;
    		try {
    			profileOutput = ICC_Profile.getInstance("C:/java/libs/JAI/CMYK.pf");
    		} catch (IOException e) {
    			e.printStackTrace();
    			throw e;
    		}
     
    		return new ICC_ColorSpace(profileOutput);
    	}
     
    	private static void convertColorSpace(String fileName, String colorSpace) throws Exception {
    		PlanarImage planarImage = JAI.create("fileload", fileName);
    		ColorModel colorModelInput = planarImage.getColorModel();
    		ColorSpace colorSpaceInput = colorModelInput.getColorSpace();
     
    		ColorSpace colorspaceOutput = null;
    		if("RGB".equals(colorSpace)) {
    			colorspaceOutput = loadRgbColorSpace();
    		} else if("CMYK".equals(colorSpace)) {
    			colorspaceOutput = loadCmykColorSpace();
    		}
     
    		System.out.println(colorSpaceInput.getNumComponents());
    		System.out.println(colorspaceOutput.getNumComponents());
     
    		PlanarImage planarImageProfile = convertColorSpace(planarImage,
    				colorSpaceInput, colorspaceOutput);
     
    		String newFilename = FilenameUtils.getFullPath(fileName)
    				+ FilenameUtils.getBaseName(fileName) + "_convertedtocmyk."
    				+ FilenameUtils.getExtension(fileName);
     
    		JAI.create("filestore", planarImageProfile, newFilename);
    	}
     
    	private static PlanarImage convertColorSpace(PlanarImage planarImageInput,
    			ColorSpace colorSpaceInput, ColorSpace colorSpaceOutput) {
     
    		ColorModel colorModelInput = RasterFactory.createComponentColorModel(
    				planarImageInput.getSampleModel().getDataType(),
    				colorSpaceInput, false, false, Transparency.OPAQUE);
     
    		ImageLayout imageLayoutInput = new ImageLayout();
    		imageLayoutInput.setColorModel(colorModelInput);
    		RenderingHints RenderingHintsInput = new RenderingHints(
    				JAI.KEY_IMAGE_LAYOUT, imageLayoutInput);
    		ParameterBlock parameterBlockInput = new ParameterBlock();
    		parameterBlockInput.addSource(planarImageInput);
    		parameterBlockInput
    				.add(planarImageInput.getSampleModel().getDataType());
     
    		PlanarImage planarInputImageInputWithProfile = JAI.create("format",
    				parameterBlockInput, RenderingHintsInput);
     
    		ColorModel colorModelOutput = RasterFactory
    				.createComponentColorModel(planarInputImageInputWithProfile
    						.getSampleModel().getDataType(), colorSpaceOutput,
    						false, false, Transparency.OPAQUE);
     
    		ImageLayout imageLayoutOutput = new ImageLayout();
    		imageLayoutOutput.setSampleModel(colorModelOutput
    				.createCompatibleSampleModel(planarInputImageInputWithProfile
    						.getWidth(), planarInputImageInputWithProfile
    						.getHeight()));
    		RenderingHints renderingHintsOutput = new RenderingHints(
    				JAI.KEY_IMAGE_LAYOUT, imageLayoutOutput);
    		ParameterBlock parameterBlockOutput = new ParameterBlock();
    		parameterBlockOutput.addSource(planarInputImageInputWithProfile);
    		parameterBlockOutput.add(colorModelOutput);
     
    		return JAI.create("ColorConvert", parameterBlockOutput,
    				renderingHintsOutput);
    	}
    La conversion d'une image rgb ou niveau de gris vers cmyk fonctionne, mais donne un résultat très sombre. La conversion d'une image cmyk vers rgb ne fonctionne pas pour la raison suivante :
    Error: One factory fails for the operation "encode"
    Occurs in: javax.media.jai.ThreadSafeOperationRegistry
    java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at javax.media.jai.FactoryCache.invoke(FactoryCache.java:130)
    at javax.media.jai.OperationRegistry.invokeFactory(OperationRegistry.java:1682)
    at javax.media.jai.ThreadSafeOperationRegistry.invokeFactory(ThreadSafeOperationRegistry.java:481)
    at javax.media.jai.registry.RIFRegistry.create(RIFRegistry.java:340)
    at com.sun.media.jai.opimage.FileStoreRIF.create(FileStoreRIF.java:143)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at javax.media.jai.FactoryCache.invoke(FactoryCache.java:130)
    at javax.media.jai.OperationRegistry.invokeFactory(OperationRegistry.java:1682)
    at javax.media.jai.ThreadSafeOperationRegistry.invokeFactory(ThreadSafeOperationRegistry.java:481)
    at javax.media.jai.registry.RIFRegistry.create(RIFRegistry.java:340)
    at javax.media.jai.RenderedOp.createInstance(RenderedOp.java:830)
    at javax.media.jai.RenderedOp.createRendering(RenderedOp.java:878)
    at javax.media.jai.RenderedOp.getRendering(RenderedOp.java:899)
    at javax.media.jai.JAI.createNS(JAI.java:1103)
    at javax.media.jai.JAI.create(JAI.java:977)
    at javax.media.jai.JAI.create(JAI.java:1584)
    at fr.cgin.tests.imaging.Main.convertColorSpace(Main.java:187)
    at fr.cgin.tests.imaging.Main.main(Main.java:127)
    Caused by: java.lang.IllegalArgumentException: Numbers of source Raster bands and source color space components do not match
    at java.awt.image.ColorConvertOp.filter(Unknown Source)
    at com.sun.media.jai.opimage.ColorConvertOpImage.computeRectNonColorSpaceJAI(ColorConvertOpImage.java:369)
    at com.sun.media.jai.opimage.ColorConvertOpImage.computeRect(ColorConvertOpImage.java:289)
    at javax.media.jai.PointOpImage.computeTile(PointOpImage.java:977)
    at com.sun.media.jai.util.SunTileScheduler.scheduleTile(SunTileScheduler.java:912)
    at javax.media.jai.OpImage.getTile(OpImage.java:1139)
    at javax.media.jai.PlanarImage.cobbleByte(PlanarImage.java:2863)
    at javax.media.jai.PlanarImage.getData(PlanarImage.java:2182)
    at com.sun.media.jai.codecimpl.TIFFImageEncoder.encode(TIFFImageEncoder.java:1021)
    at com.sun.media.jai.codecimpl.TIFFImageEncoder.encode(TIFFImageEncoder.java:161)
    at com.sun.media.jai.opimage.EncodeRIF.create(EncodeRIF.java:79)
    ... 25 more
    J'ai passé la plupart de la pile d'appel en ne laissant que le principal.
    Maintenant j'ai deux questions :
    - comment remédier au problème des "images sombres" ?
    - comment remédier au problème dont la trace est ci-dessus ?

    Merci d'avance !
    En premier lieu, utilisez un moteur de recherche.
    En second lieu, postez sur le forum adéquat !

  2. #2
    Membre expérimenté
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Points : 1 640
    Points
    1 640
    Par défaut
    J'ai effectué de nombreuses recherches.
    Je n'arrive toujours pas :
    - à convertir une image de CMYK vers RGB
    - à convertir une image de RGB vers CMYK
    - faire de même en utilisant des profils ICC
    - attribuer un profil ICC à une image

    Ma question est donc : peut-on le faire avec Java (JAI notamment) ?
    En premier lieu, utilisez un moteur de recherche.
    En second lieu, postez sur le forum adéquat !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Points : 422
    Points
    422
    Par défaut
    Salut Patriarch24, désolé de remonter un post si vieux, mais as-tu réussi à avancer sur ce sujet de conversion d'espace colorimétrique ? A moins que tu ne sois passé sur une autre API ?

    Merci !

Discussions similaires

  1. [Image] Transformations des espaces de couleurs
    Par benDelphic dans le forum Contribuez
    Réponses: 2
    Dernier message: 05/02/2015, 17h03
  2. Réponses: 0
    Dernier message: 20/01/2010, 10h57
  3. Conversion d'espace dans chaine
    Par Shifty_ dans le forum C#
    Réponses: 8
    Dernier message: 06/03/2007, 14h22
  4. Réponses: 3
    Dernier message: 29/03/2006, 16h32
  5. [IMAGE JAI] java.lang.Error
    Par babyboy dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 18/05/2004, 14h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo