import loci.common.services.ServiceFactory; import loci.formats.FormatTools; import loci.formats.MetadataTools; import loci.formats.meta.IMetadata; import loci.formats.out.OMETiffWriter; import loci.formats.out.TiffWriter; import loci.formats.services.OMEXMLService; import loci.formats.tiff.IFD; public class TiffStripWriter { static final int PIXEL_TYPE = FormatTools.UINT8; static final int COMPONENTS = 3; static final int TIFF_WIDTH = 2000; static final int TIFF_HEIGHT = 800; static final int STRIP_WIDTH = 2000; static final int STRIP_HEIGHT = 80; public static void main(String[] args) throws Exception { if (args.length < 1) { System.out.println("Please specify an output file name."); System.exit(1); } String id = args[0]; // create metadata object with minimum required metadata fields ServiceFactory factory = new ServiceFactory(); OMEXMLService service = factory.getInstance(OMEXMLService.class); IMetadata meta = service.createOMEXMLMetadata(); MetadataTools.populateMetadata(meta, 0, null, false, "XYZCT", FormatTools.getPixelTypeString(PIXEL_TYPE), TIFF_WIDTH, TIFF_HEIGHT, 1, COMPONENTS, 1, COMPONENTS); // set up the writer for OME-TIFF TiffWriter writer = new OMETiffWriter(); writer.setMetadataRetrieve(meta); writer.setInterleaved(Boolean.TRUE); writer.setBigTiff(false); writer.setId(id); writer.setCompression(TiffWriter.COMPRESSION_LZW); // set up IFD for creating a striped OME-TIFF IFD ifd = new IFD(); ifd.put(IFD.ROWS_PER_STRIP, STRIP_HEIGHT); // create blank image byte[] img = new byte[STRIP_WIDTH * STRIP_HEIGHT * COMPONENTS * FormatTools.getBytesPerPixel(PIXEL_TYPE)]; // write OME-TIFF for (int y = 0; y < (TIFF_HEIGHT / STRIP_HEIGHT); y++) { // create random image strip for (int i = 0; i < img.length; i++) img[i] = (byte) (256 * Math.random()); // write strip writer.saveBytes(0, img, ifd, 0, y * STRIP_HEIGHT, STRIP_WIDTH, STRIP_HEIGHT); } writer.close(); } }