case TGA.IMAGETYPE_COLORMAPPED_HUFFMAN: case TGA.IMAGETYPE_COLORMAPPED_HUFFMAN_QUADTREE: return ImageTypeSpecifiers.createFromIndexColorModel(header.getColorMap()); case TGA.IMAGETYPE_MONOCHROME: case TGA.IMAGETYPE_MONOCHROME_RLE: return ImageTypeSpecifiers.createGrayscale(8, DataBuffer.TYPE_BYTE); case TGA.IMAGETYPE_TRUECOLOR: case TGA.IMAGETYPE_TRUECOLOR_RLE: if (hasAlpha) { return ImageTypeSpecifiers.createPacked(sRGB, 0x7C00, 0x03E0, 0x001F, 0x8000, DataBuffer.TYPE_USHORT, isAlphaPremultiplied); return ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_USHORT_555_RGB); case 24: return ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_3BYTE_BGR); case 32: return ImageTypeSpecifiers.createInterleaved(sRGB, new int[] {2, 1, 0, 3}, DataBuffer.TYPE_BYTE, true, isAlphaPremultiplied); default: throw new IIOException("Unknown pixel depth for truecolor: " + header.getPixelDepth());
return ImageTypeSpecifiers.createFromIndexColorModel(header.getEGAPalette()); case 8: if (channels == 1) { return ImageTypeSpecifiers.createFromIndexColorModel(palette); return ImageTypeSpecifiers.createGrayscale(8, DataBuffer.TYPE_BYTE); return ImageTypeSpecifiers.createBanded(ColorSpace.getInstance(ColorSpace.CS_sRGB), createIndices(channels, 1), createIndices(channels, 0), DataBuffer.TYPE_BYTE, channels == 4, false); case 24: return ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_3BYTE_BGR); case 32: return ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_4BYTE_ABGR); default: throw new IIOException("Unknown number of bytes per pixel: " + header.getBitsPerPixel());
@Test public void testCreatePackedGrayscale2() { assertEquals( ImageTypeSpecifier.createGrayscale(2, DataBuffer.TYPE_BYTE, false), ImageTypeSpecifiers.createPackedGrayscale(GRAY, 2, DataBuffer.TYPE_BYTE) ); }
@Override public Iterator<ImageTypeSpecifier> getImageTypes(int imageIndex) throws IOException { ImageTypeSpecifier rawType = getRawImageType(imageIndex); IconResource resource = readIconResource(imageIndex); List<ImageTypeSpecifier> specifiers = new ArrayList<ImageTypeSpecifier>(); switch (resource.depth()) { case 1: case 4: case 8: // Fall through & convert during read case 32: specifiers.add(ImageTypeSpecifiers.createPacked(ColorSpace.getInstance(ColorSpace.CS_sRGB), 0xff0000, 0x00ff00, 0x0000ff, 0xff000000, DataBuffer.TYPE_INT, false)); specifiers.add(ImageTypeSpecifiers.createInterleaved(ColorSpace.getInstance(ColorSpace.CS_sRGB), new int[]{3, 2, 1, 0}, DataBuffer.TYPE_BYTE, true, false)); break; default: throw new IllegalStateException(String.format("Unknown bit depth: %d", resource.depth())); } specifiers.add(rawType); return specifiers.iterator(); }
@Override public ImageTypeSpecifier getRawImageType(int imageIndex) throws IOException { IconResource resource = readIconResource(imageIndex); switch (resource.depth()) { case 1: return ImageTypeSpecifiers.createFromIndexColorModel(ICNS1BitColorModel.INSTANCE); case 4: return ImageTypeSpecifiers.createFromIndexColorModel(ICNS4BitColorModel.INSTANCE); case 8: return ImageTypeSpecifiers.createFromIndexColorModel(ICNS8BitColorModel.INSTANCE); case 32: if (resource.isCompressed()) { return ImageTypeSpecifiers.createBanded( ColorSpace.getInstance(ColorSpace.CS_sRGB), new int[]{0, 1, 2, 3}, createBandOffsets(resource.size().width * resource.size().height), DataBuffer.TYPE_BYTE, true, false ); } else { return ImageTypeSpecifiers.createInterleaved( ColorSpace.getInstance(ColorSpace.CS_sRGB), new int[]{1, 2, 3, 0}, DataBuffer.TYPE_BYTE, true, false ); } default: throw new IllegalStateException(String.format("Unknown bit depth: %d", resource.depth())); } }
if (colorMap != null) { IndexColorModel cm = colorMap.getIndexColorModel(header, isEHB()); specifier = ImageTypeSpecifiers.createFromIndexColorModel(cm); break; specifier = ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_BYTE_GRAY); break; specifier = ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_3BYTE_BGR); break; case 32: specifier = ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_4BYTE_ABGR); break; default:
return ImageTypeSpecifiers.createGrayscale(bitsPerSample, dataType); return ImageTypeSpecifiers.createPackedGrayscale(cs, bitsPerSample, dataType); switch (planarConfiguration) { case TIFFBaseline.PLANARCONFIG_CHUNKY: return ImageTypeSpecifiers.createGrayscale(bitsPerSample, dataType, isAlphaPremultiplied); case TIFFExtension.PLANARCONFIG_PLANAR: return ImageTypeSpecifiers.createBanded(cs, new int[] {0, 1}, new int[] {0, 0}, dataType, true, isAlphaPremultiplied); return ImageTypeSpecifiers.createPacked(cs, 0xF000, 0xF00, 0xF0, 0xF, DataBuffer.TYPE_USHORT, isAlphaPremultiplied); return ImageTypeSpecifiers.createDiscreteAlphaIndexedFromIndexColorModel(icm); return ImageTypeSpecifiers.createFromIndexColorModel(icm);
case 4: case 8: return ImageTypeSpecifiers.createFromIndexColorModel(readColorMap()); return ImageTypeSpecifiers.createPacked( ColorSpace.getInstance(ColorSpace.CS_sRGB), header.masks[0], header.masks[1], header.masks[2], header.masks[3], return ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_USHORT_555_RGB); return ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_3BYTE_BGR); return ImageTypeSpecifiers.createPacked( ColorSpace.getInstance(ColorSpace.CS_sRGB), header.masks[0], header.masks[1], header.masks[2], header.masks[3], return ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB);
case PSD.COLOR_MODE_BITMAP: if (header.channels == 1 && header.bits == 1) { return ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_BYTE_BINARY); return ImageTypeSpecifiers.createFromIndexColorModel(metadata.colorData.getIndexColorModel()); case 8: return metadata.hasAlpha() && header.channels > 1 ? ImageTypeSpecifiers.createBanded(cs, new int[] {0, 1}, new int[] {0, 0}, DataBuffer.TYPE_BYTE, true, false) : ImageTypeSpecifiers.createBanded(cs, new int[] {0}, new int[] {0}, DataBuffer.TYPE_BYTE, false, false); case 16: return metadata.hasAlpha() && header.channels > 1 ? ImageTypeSpecifiers.createBanded(cs, new int[] {0, 1}, new int[] {0, 0}, DataBuffer.TYPE_USHORT, true, false) : ImageTypeSpecifiers.createBanded(cs, new int[] {0}, new int[] {0}, DataBuffer.TYPE_USHORT, false, false); case 32: return metadata.hasAlpha() && header.channels > 1 ? ImageTypeSpecifiers.createBanded(cs, new int[] {0, 1}, new int[] {0, 0}, DataBuffer.TYPE_INT, true, false) : ImageTypeSpecifiers.createBanded(cs, new int[] {0}, new int[] {0}, DataBuffer.TYPE_INT, false, false); case 8: return metadata.hasAlpha() && header.channels > 3 ? ImageTypeSpecifiers.createBanded(cs, new int[] {0, 1, 2, 3}, new int[] {0, 0, 0, 0}, DataBuffer.TYPE_BYTE, true, false) : ImageTypeSpecifiers.createBanded(cs, new int[] {0, 1, 2}, new int[] {0, 0, 0}, DataBuffer.TYPE_BYTE, false, false); case 16: return metadata.hasAlpha() && header.channels > 3 ? ImageTypeSpecifiers.createBanded(cs, new int[] {0, 1, 2, 3}, new int[] {0, 0, 0, 0}, DataBuffer.TYPE_USHORT, true, false) : ImageTypeSpecifiers.createBanded(cs, new int[] {0, 1, 2}, new int[] {0, 0, 0}, DataBuffer.TYPE_USHORT, false, false); case 32: return metadata.hasAlpha() && header.channels > 3
@Override public Iterator<ImageTypeSpecifier> getImageTypes(int imageIndex) throws IOException { checkBounds(imageIndex); readHeader(); ColorSpace sRGB = ColorSpace.getInstance(ColorSpace.CS_sRGB); return Collections.singletonList(ImageTypeSpecifiers.createInterleaved(sRGB, new int[] {0, 1, 2}, DataBuffer.TYPE_FLOAT, false, false)).iterator(); }
public static ImageTypeSpecifier createIndexed(final int[] colors, final boolean hasAlpha, final int transIndex, final int bits, final int dataType) { return createFromIndexColorModel(new IndexColorModel(bits, colors.length, colors, 0, hasAlpha, transIndex, dataType)); }
ArrayList<ImageTypeSpecifier> typeList = new ArrayList<>(); typeList.add(ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_3BYTE_BGR)); typeList.add(ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB)); typeList.add(ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_INT_BGR)); typeList.add(ImageTypeSpecifiers.createInterleaved(ColorSpaces.createColorSpace(profile), new int[] {3, 2, 1, 0}, DataBuffer.TYPE_BYTE, false, false)); typeList.add(ImageTypeSpecifiers.createInterleaved(ColorSpaces.getColorSpace(ColorSpaces.CS_GENERIC_CMYK), new int[] {3, 2, 1, 0}, DataBuffer.TYPE_BYTE, false, false)); typeList.add(ImageTypeSpecifiers.createInterleaved(ColorSpaces.createColorSpace(profile), new int[] {0, 1, 2}, DataBuffer.TYPE_BYTE, false, false)); ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_INT_ARGB), ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_4BYTE_ABGR), ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_INT_ARGB_PRE), ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_4BYTE_ABGR_PRE) )); typeList.add(ImageTypeSpecifiers.createInterleaved(ColorSpaces.createColorSpace(profile), new int[] {0, 1, 2, 3}, DataBuffer.TYPE_BYTE, true, false));
ImageTypeSpecifier singleBandRowSpec = ImageTypeSpecifiers.createGrayscale(header.bits, pSourceCM.getTransferType()); WritableRaster rowRaster = singleBandRowSpec.createBufferedImage(header.width, 1).getRaster(); boolean banded = destRaster.getDataBuffer().getNumBanks() > 1;
@Override public ImageTypeSpecifier getRawImageType(final int imageIndex) throws IOException { checkBounds(imageIndex); readHeader(); // NOTE: There doesn't seem to be any god way to determine color space, other than by convention // 1 channel: Gray, 2 channel: Gray + Alpha, 3 channel: RGB, 4 channel: RGBA (hopefully never CMYK...) int channels = header.getChannels(); ColorSpace cs = channels < 3 ? ColorSpace.getInstance(ColorSpace.CS_GRAY) : ColorSpace.getInstance(ColorSpace.CS_sRGB); switch (header.getBytesPerPixel()) { case 1: return ImageTypeSpecifiers.createBanded(cs, createIndices(channels, 1), createIndices(channels, 0), DataBuffer.TYPE_BYTE, channels == 2 || channels == 4, false); case 2: return ImageTypeSpecifiers.createBanded(cs, createIndices(channels, 1), createIndices(channels, 0), DataBuffer.TYPE_USHORT, channels == 2 || channels == 4, false); default: throw new IIOException("Unknown number of bytes per pixel: " + header.getBytesPerPixel()); } }
public Iterator<ImageTypeSpecifier> getImageTypes(int pIndex) throws IOException { // TODO: The images look slightly different in Preview.. Could indicate the color space is wrong... return Arrays.asList( ImageTypeSpecifiers.createPacked( ColorSpace.getInstance(ColorSpace.CS_sRGB), 0xff0000, 0xff00, 0xff, 0xff000000, DataBuffer.TYPE_INT, false ) ).iterator(); }
return ImageTypeSpecifiers.createInterleaved(gray, createBandOffsets(samplesPerPixel), transferType, hasAlpha, false); return hasAlpha ? ImageTypeSpecifiers.createGrayscale(bitsPerSample, transferType, false) : ImageTypeSpecifiers.createGrayscale(bitsPerSample, transferType); return ImageTypeSpecifiers.createInterleaved(gray, createBandOffsets(samplesPerPixel), transferType, hasAlpha, false); return ImageTypeSpecifiers.createInterleaved(sRGB, createBandOffsets(samplesPerPixel), transferType, hasAlpha, false); return ImageTypeSpecifiers.createInterleaved(sRGB, createBandOffsets(samplesPerPixel), transferType, hasAlpha, false); return ImageTypeSpecifiers.createInterleaved(cmyk, createBandOffsets(samplesPerPixel), transferType, hasAlpha, false);
private ImageTypeSpecifier createImageTypeSpecifier(int planarConfiguration, ColorSpace cs, int dataType, int significantSamples, int samplesPerPixel, boolean alpha, boolean alphaPremultiplied) throws IIOException { switch (planarConfiguration) { case TIFFBaseline.PLANARCONFIG_CHUNKY: if (samplesPerPixel > significantSamples) { return new ImageTypeSpecifier( new ExtraSamplesColorModel(cs, alpha, alphaPremultiplied, dataType, samplesPerPixel - significantSamples), new PixelInterleavedSampleModel(dataType, 1, 1, samplesPerPixel, samplesPerPixel, createOffsets(samplesPerPixel))); } return ImageTypeSpecifiers.createInterleaved(cs, createOffsets(significantSamples), dataType, alpha, alphaPremultiplied); case TIFFExtension.PLANARCONFIG_PLANAR: return ImageTypeSpecifiers.createBanded(cs, createOffsets(significantSamples), new int[significantSamples], dataType, alpha, alphaPremultiplied); default: throw new IIOException(String.format("Unsupported PlanarConfiguration (expected 1 or 2): %d", planarConfiguration)); } }
public Iterator<ImageTypeSpecifier> getImageTypes(int pIndex) throws IOException { init(pIndex); List<ImageTypeSpecifier> types = Arrays.asList( getRawImageType(pIndex), ImageTypeSpecifiers.createFromBufferedImageType(header.bitplanes == 32 ? BufferedImage.TYPE_4BYTE_ABGR : BufferedImage.TYPE_3BYTE_BGR) // TODO: ImageTypeSpecifier.createFromBufferedImageType(header.bitplanes == 32 ? BufferedImage.TYPE_INT_ARGB : BufferedImage.TYPE_INT_RGB), // TODO: Allow 32 bit always. Allow RGB and discard alpha, if present? ); return types.iterator(); }
return ImageTypeSpecifiers.createGrayscale(bitsPerSample, dataType); return ImageTypeSpecifiers.createPackedGrayscale(cs, bitsPerSample, dataType); return ImageTypeSpecifiers.createInterleaved(cs, new int[] {0}, dataType, false, false); switch (planarConfiguration) { case TIFFBaseline.PLANARCONFIG_CHUNKY: return ImageTypeSpecifiers.createGrayscale(bitsPerSample, dataType, isAlphaPremultiplied); case TIFFExtension.PLANARCONFIG_PLANAR: return ImageTypeSpecifiers.createBanded(cs, new int[] {0, 1}, new int[] {0, 0}, dataType, true, isAlphaPremultiplied); return ImageTypeSpecifiers.createInterleaved(cs, new int[] {0, 1}, dataType, true, isAlphaPremultiplied); case TIFFExtension.PLANARCONFIG_PLANAR: return ImageTypeSpecifiers.createBanded(cs, new int[] {0, 1}, new int[] {0, 0}, dataType, true, isAlphaPremultiplied); return ImageTypeSpecifiers.createInterleaved(cs, new int[] {0, 1, 2}, dataType, false, false); return ImageTypeSpecifiers.createBanded(cs, new int[] {0, 1, 2}, new int[] {0, 0, 0}, dataType, false, false); return ImageTypeSpecifiers.createInterleaved(cs, new int[] {0, 1, 2, 3}, dataType, true, isAlphaPremultiplied); return ImageTypeSpecifiers.createBanded(cs, new int[] {0, 1, 2, 3}, new int[] {0, 0, 0, 0}, dataType, true, isAlphaPremultiplied); return ImageTypeSpecifiers.createPacked(cs, 0xF000, 0xF00, 0xF0, 0xF, DataBuffer.TYPE_USHORT, isAlphaPremultiplied); && (extraSamples[0] == TIFFBaseline.EXTRASAMPLE_ASSOCIATED_ALPHA || extraSamples[0] == TIFFBaseline.EXTRASAMPLE_UNASSOCIATED_ALPHA)) { return ImageTypeSpecifiers.createDiscreteAlphaIndexedFromIndexColorModel(icm);
specifier = ImageTypeSpecifiers.createFromIndexColorModel(indexed.createColorModel()); break; case 16: specifier = ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_USHORT_555_RGB); break; case 24: specifier = new BitmapRGB(entry, header).hasMask() ? ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_4BYTE_ABGR) : ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_3BYTE_BGR); break; case 32: specifier = ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_INT_ARGB); break; default: