} else { dstCM = dst.getColorModel(); if (srcCM.getColorSpace().getType() != dstCM.getColorSpace().getType())
if (srcCM.getColorSpace().getType() != dstCM.getColorSpace().getType())
if (srcCM.getColorSpace().getType() != dstCM.getColorSpace().getType())
if (srcCM.getColorSpace().getType() != dstCM.getColorSpace().getType())
} else { dstCM = dst.getColorModel(); if (srcCM.getColorSpace().getType() != dstCM.getColorSpace().getType())
if (srcCM.getColorSpace().getType() != dstCM.getColorSpace().getType())
if (srcCM.getColorSpace().getType() != dstCM.getColorSpace().getType())
/** * Returns {@code true} if the {@linkplain #image} uses a IHA {@linkplain ColorSpace color * space}. * * @see #forceColorSpaceIHS() */ public final boolean isColorSpaceIHS() { final ColorModel cm = image.getColorModel(); if (cm == null) { return false; } return cm.getColorSpace() instanceof IHSColorSpace || cm.getColorSpace() instanceof IHSColorSpaceJAIExt; }
private static int getImageType(final ColorModel colorModel, final ImageWriteParam param) { int uncompressedType; if (colorModel instanceof IndexColorModel) { uncompressedType = TGA.IMAGETYPE_COLORMAPPED; } else { switch (colorModel.getColorSpace().getType()) { case TYPE_RGB: uncompressedType = TGA.IMAGETYPE_TRUECOLOR; break; case TYPE_GRAY: uncompressedType = TGA.IMAGETYPE_MONOCHROME; break; default: throw new IllegalArgumentException("Unsupported color space for TGA: " + colorModel.getColorSpace()); } } return uncompressedType | (TGAImageWriteParam.isRLE(param) ? 8 : 0); }
/** * Returns {@code true} if the {@linkplain #image} uses a GrayScale {@linkplain ColorSpace color * space}. Note that a GrayScale color space doesn't mean that pixel values are directly stored * as GrayScale component. The image may be {@linkplain #isIndexed indexed} as well. * * @see #forceColorSpaceGRAYScale */ public final boolean isColorSpaceGRAYScale() { final ColorModel cm = image.getColorModel(); if (cm == null) return false; return cm.getColorSpace().getType() == ColorSpace.TYPE_GRAY; }
@Override public void extract(BufferedImage bimg) { if (bimg.getColorModel().getColorSpace().getType() != ColorSpace.TYPE_RGB) { BufferedImage img = new BufferedImage(bimg.getWidth(), bimg.getHeight(), BufferedImage.TYPE_INT_RGB); img.getGraphics().drawImage(bimg, 0, 0, null); bimg = img; } transform = createTransformArray(); int newWidth = bimg.getWidth() - bimg.getWidth() % BLOCK_SIZE; int newHeight = bimg.getHeight() - bimg.getHeight() % BLOCK_SIZE; int[][][] yuvImage = getYUVImage(bimg.getRaster(), newWidth, newHeight, -128); descriptorValues = new int[BLOCK_SIZE * BLOCK_SIZE * 3]; getComponentHistogram(yuvImage, newWidth, newHeight, 0, descriptorValues); getComponentHistogram(yuvImage, newWidth, newHeight, 1, descriptorValues); getComponentHistogram(yuvImage, newWidth, newHeight, 2, descriptorValues); }
@Override public void extract(BufferedImage bimg) { if (bimg.getColorModel().getColorSpace().getType() != ColorSpace.TYPE_RGB) { BufferedImage img = new BufferedImage(bimg.getWidth(), bimg.getHeight(), BufferedImage.TYPE_INT_RGB); img.getGraphics().drawImage(bimg, 0, 0, null); bimg = img; } transform = createTransformArray(); int newWidth = bimg.getWidth() - bimg.getWidth() % BLOCK_SIZE; int newHeight = bimg.getHeight() - bimg.getHeight() % BLOCK_SIZE; int[][][] yuvImage = getYUVImage(bimg.getRaster(), newWidth, newHeight, -128); descriptorValues = new int[BLOCK_SIZE * BLOCK_SIZE * 3]; getComponentHistogram(yuvImage, newWidth, newHeight, 0, descriptorValues); getComponentHistogram(yuvImage, newWidth, newHeight, 1, descriptorValues); getComponentHistogram(yuvImage, newWidth, newHeight, 2, descriptorValues); }
/** * Returns {@code true} if the {@linkplain #image} uses a RGB {@linkplain ColorSpace color * space}. Note that a RGB color space doesn't mean that pixel values are directly stored as RGB * components. The image may be {@linkplain #isIndexed indexed} as well. * * @see #forceColorSpaceRGB */ public final boolean isColorSpaceRGB() { final ColorModel cm = image.getColorModel(); if (cm == null) { return false; } return cm.getColorSpace().getType() == ColorSpace.TYPE_RGB; }
private void convertToDestinationCS(final ColorModel sourceCM, ColorModel destinationCM, final WritableRaster raster) { long start = DEBUG ? System.currentTimeMillis() : 0; // Color conversion from embedded color space, to destination color space WritableRaster alphaMaskedRaster = destinationCM.hasAlpha() ? raster.createWritableChild(0, 0, raster.getWidth(), raster.getHeight(), raster.getMinX(), raster.getMinY(), createBandList(sourceCM.getColorSpace().getNumComponents())) : raster; new ColorConvertOp(sourceCM.getColorSpace(), destinationCM.getColorSpace(), null) .filter(alphaMaskedRaster, alphaMaskedRaster); if (DEBUG) { System.out.println("Color conversion " + (System.currentTimeMillis() - start) + "ms"); } }
private boolean isDestinationCMYK(final IIOImage image, final ImageWriteParam param) { // If destination type != null, rendered image type doesn't matter return !image.hasRaster() && image.getRenderedImage().getColorModel().getColorSpace().getType() == ColorSpace.TYPE_CMYK || param != null && param.getDestinationType() != null && param.getDestinationType().getColorModel().getColorSpace().getType() == ColorSpace.TYPE_CMYK; }
@Override public Iterator<ImageTypeSpecifier> getImageTypes(int imageIndex) throws IOException { readIFD(imageIndex); ImageTypeSpecifier rawType = getRawImageType(imageIndex); Set<ImageTypeSpecifier> specs = new LinkedHashSet<>(5); // TODO: Based on raw type, we can probably convert to most RGB types at least, maybe gray etc if (rawType.getColorModel().getColorSpace().getType() == ColorSpace.TYPE_RGB) { if (rawType.getNumBands() == 3 && rawType.getBitsPerBand(0) == 8) { specs.add(ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_3BYTE_BGR)); // specs.add(ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_BGR)); // specs.add(ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB)); } else if (rawType.getNumBands() == 4 && rawType.getBitsPerBand(0) == 8) { specs.add(ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_4BYTE_ABGR)); // specs.add(ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_ARGB)); specs.add(ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_4BYTE_ABGR_PRE)); } } specs.add(rawType); return specs.iterator(); }
private static void assertSameData(BufferedImage expected, BufferedImage actual) { for (int y = 0; y < expected.getHeight(); y++) { for (int x = 0; x < expected.getWidth(); x++) { int expectedRGB = expected.getRGB(x, y); int actualRGB = actual.getRGB(x, y); if (expected.getColorModel().getColorSpace().getType() == ColorSpace.TYPE_GRAY) { // NOTE: For some reason, gray data seems to be one step off... assertEquals("R(" + x + "," + y + ")", expectedRGB & 0xff0000, actualRGB & 0xff0000, 0x10000); assertEquals("G(" + x + "," + y + ")", expectedRGB & 0x00ff00, actualRGB & 0x00ff00, 0x100); assertEquals("B(" + x + "," + y + ")", expectedRGB & 0x0000ff, actualRGB & 0x0000ff, 0x1); } else { assertEquals("R(" + x + "," + y + ")", expectedRGB & 0xff0000, actualRGB & 0xff0000); assertEquals("G(" + x + "," + y + ")", expectedRGB & 0x00ff00, actualRGB & 0x00ff00); assertEquals("B(" + x + "," + y + ")", expectedRGB & 0x0000ff, actualRGB & 0x0000ff); } } } }
@Test public void testGetColorModelJPEG() { URL resource = getClass().getResource("/sunflower.jpg"); assertNotNull(resource); Image source = Toolkit.getDefaultToolkit().createImage(resource); assertNotNull(source); BufferedImageFactory factory = new BufferedImageFactory(source); ColorModel colorModel = factory.getColorModel(); assertNotNull(colorModel); assertEquals(3, colorModel.getNumColorComponents()); // getNumComponents may include alpha, we don't care assertEquals(ColorSpace.getInstance(ColorSpace.CS_sRGB), colorModel.getColorSpace()); for (int i = 0; i < colorModel.getNumComponents(); i++) { assertEquals(8, colorModel.getComponentSize(i)); } }
@Test public void testReadAdobeAPP14CMYKAnd3channelData() throws IOException { JPEGImageReader reader = createReader(); try { reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/jpeg/exif-jfif-app13-app14ycck-3channel.jpg"))); IIOReadWarningListener listener = mock(IIOReadWarningListener.class); reader.addIIOReadWarningListener(listener); assertEquals(310, reader.getWidth(0)); assertEquals(384, reader.getHeight(0)); BufferedImage image = reader.read(0, null); verify(listener, times(1)).warningOccurred(eq(reader), matches("(?i).*Adobe App14.*(?-i)CMYK.*SOF.*")); assertNotNull(image); assertEquals(310, image.getWidth()); assertEquals(384, image.getHeight()); assertEquals(ColorSpace.TYPE_RGB, image.getColorModel().getColorSpace().getType()); } finally { reader.dispose(); } }
@Test public void testGetColorModelGIF() { URL resource = getClass().getResource("/tux.gif"); assertNotNull(resource); Image source = Toolkit.getDefaultToolkit().createImage(resource); assertNotNull(source); BufferedImageFactory factory = new BufferedImageFactory(source); ColorModel colorModel = factory.getColorModel(); assertNotNull(colorModel); assertEquals(3, colorModel.getNumColorComponents()); assertEquals(ColorSpace.getInstance(ColorSpace.CS_sRGB), colorModel.getColorSpace()); assertTrue(colorModel instanceof IndexColorModel); assertTrue(colorModel.hasAlpha()); assertEquals(4, colorModel.getNumComponents()); assertTrue(((IndexColorModel) colorModel).getTransparentPixel() >= 0); assertEquals(Transparency.BITMASK, colorModel.getTransparency()); for (int i = 0; i < colorModel.getNumComponents(); i++) { assertEquals(8, colorModel.getComponentSize(i)); } }