Я использую этот код для преобразования изображения JPG GrayScale в черно-белое изображение TIF, но получаю изображение плохого качества:
BufferedImage colorImage = ImageIO.read(colorImg); float[] Scales = { 2f, 2f, 2f }; float[] offsets = новый float[4]; RescaleOp rop = новый RescaleOp(масштабы, смещения, ноль); окончательное BufferedImage ScaledImage = новое BufferedImage(colorImage.getWidth(), colorImage.getHeight(), BufferedImage.TYPE_BYTE_GRAY); Graphics2D g = ScaledImage.createGraphics(); g.drawImage(colorImage, rop, 0, 0); окончательный BufferedImage blackAndWhiteImage = новый BufferedImage(colorImage.getWidth(), colorImage.getHeight(), BufferedImage.TYPE_BYTE_BINARY); g = blackAndWhiteImage.createGraphics(); g.drawImage(colorImage, 0, 0, null); изображение, которое я жду

изображение, которое я получаю

` Private void writeTIFF (File outputfileTIFF) выдает IOException { попробуйте (FileImageOutputStream fisTIFF = новый FileImageOutputStream (outputfileTIFF)) { TIFFImageWriterSpi tiffspi = новый TIFFImageWriterSpi (); ImageWriterwriter1 = tiffspi.createWriterInstance(); ImageWriteParam param1 = write1.getDefaultWriteParam(); param1.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param1.setCompressionType(COMPRESSION_TYPE_TIFF); ImageWriterwriterImageTiff = ImageIO.getImageWritersByFormatName(FileExtensionEnum.TIFF.toLowerCase()).next(); WriterImageTiff.setOutput(fisTIFF); compressTIFF(subImgNB, выходной файлTIFF, 150L, 150L); IIIOMetadata dataTiff = writeImageTiff.getDefaultImageMetadata (новый ImageTypeSpecifier (subImgNB), param1); writeImageTiff.write(null, new IIOImage(subImgNB, null, dataTiff), param1);
}
частный статический файл compressTIFF (BufferedImage bufferedImage, File tiffFile, long xDpi, long yDpi) выдает IOException { TIFFImageWriterSpi tiffspi = новый TIFFImageWriterSpi (); ImageWriter Writer = tiffspi.createWriterInstance(); ImageWriteParam writeParam =writer.getDefaultWriteParam(); writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); writeParam.setCompressionType(COMPRESSION_TYPE_TIFF);
Метаданные IIMetadata = Writer.getDefaultImageMetadata(null, writeParam); IIIOMetadatastreamMetadata =writer.getDefaultStreamMetadata(null); Строка tiffMetadataFormatName =streamMetadata.getNativeMetadataFormatName(); // Создаем новый объект метаданных потока с прямым порядком байтов. IIIOMetadataNode newTree = новый IIIOMetadataNode (tiffMetadataFormatName); IIMetadataNode byteOrderNode = новый IIIOMetadataNode("ByteOrder"); byteOrderNode.setAttribute("значение", "LITTLE_ENDIAN"); newTree.appendChild(byteOrderNode); // Устанавливаем значение объекта метаданных потока. streamMetadata.setFromTree(tiffMetadataFormatName, newTree); ImageOutputStream ios = null; пытаться { ios = ImageIO.createImageOutputStream(tiffFile); писатель.setOutput(ios); writeParam(streamMetadata, new IIOImage(bufferedImage, null, setDPI(метаданные, xDpi, yDpi)), writeParam); } окончательно { если (ios != ноль) { ios.flush(); ios.закрыть(); } } вернуть файл TiffFile; } частный статический IIOMetadata setDPI (IIOMetadata imageMetadata, Long xDpiValue, Long yDpiValue) выдает IIOInvalidTreeException { TIFFDirectory dir = TIFFDirectory.createFromMetadata(imageMetadata);
// Получаем теги разрешения {X, Y}. BaselineTIFFTagSet base = BaselineTIFFTagSet.getInstance(); TIFFTag tagXRes = base.getTag(BaselineTIFFTagSet.TAG_X_RESOLUTION); TIFFTag tagYRes = base.getTag(BaselineTIFFTagSet.TAG_Y_RESOLUTION); dir.getTIFFField(BaselineTIFFTagSet.TAG_X_RESOLUTION); com.sun.media.imageio.plugins.tiff.TIFFField fieldXRes = новый com.sun.media.imageio.plugins.tiff.TIFFField(tagXRes, TIFFTag.TIFF_RATIONAL, 1, new long[][] { { xDpiValue, 1L }, { 0, 0 } }); dir.getTIFFField(BaselineTIFFTagSet.TAG_Y_RESOLUTION); com.sun.media.imageio.plugins.tiff.TIFFField fieldYRes = new com.sun.media.imageio.plugins.tiff.TIFFField(tagYRes, TIFFTag.TIFF_RATIONAL, 1, new long[][] { { yDpiValue, 1L }, { 0, 0 } }); // Добавляем поля разрешения {X, Y} в каталог. dir.addTIFFField(fieldXRes); dir.addTIFFField(fieldYRes); // Преобразование в объект метаданных и возврат. вернуть dir.getAsMetadata(); } `