diff common-bioformats/src/main/java/digilib/image/BioFormatsDocuImage.java @ 979:f34891279a6e

bio-formats codec now works sometimes (only mo=q0 and only mo=jpg).
author robcast
date Thu, 26 Jan 2012 21:46:33 +0100
parents 55572a4bbf68
children
line wrap: on
line diff
--- a/common-bioformats/src/main/java/digilib/image/BioFormatsDocuImage.java	Thu Jan 26 17:51:47 2012 +0100
+++ b/common-bioformats/src/main/java/digilib/image/BioFormatsDocuImage.java	Thu Jan 26 21:46:33 2012 +0100
@@ -12,6 +12,11 @@
 import java.io.IOException;
 import java.io.OutputStream;
 
+import ome.xml.model.primitives.PositiveInteger;
+
+import loci.common.services.DependencyException;
+import loci.common.services.ServiceException;
+import loci.common.services.ServiceFactory;
 import loci.formats.FormatException;
 import loci.formats.IFormatWriter;
 import loci.formats.ImageReader;
@@ -19,7 +24,11 @@
 import loci.formats.gui.BufferedImageReader;
 import loci.formats.gui.BufferedImageWriter;
 import loci.formats.meta.DummyMetadata;
+import loci.formats.meta.IMetadata;
 import loci.formats.meta.MetadataRetrieve;
+import loci.formats.meta.MetadataStore;
+import loci.formats.ome.OMEXMLMetadata;
+import loci.formats.services.OMEXMLService;
 
 import digilib.io.FileOpException;
 import digilib.io.ImageInput;
@@ -35,6 +44,7 @@
     private Object imageSize;
     private RenderingHints renderHint;
     private ImageReader reader;
+    private OMEXMLMetadata meta;
 
     /*
      * (non-Javadoc)
@@ -73,6 +83,14 @@
         this.input = ii;
         reader = new ImageReader();
         try {
+            // construct the object that stores OME-XML metadata
+            ServiceFactory factory = new ServiceFactory();
+            OMEXMLService service = factory.getInstance(OMEXMLService.class);
+            meta = service.createOMEXMLMetadata();
+
+            // set up the reader and associate it with the input file
+            reader = new ImageReader();
+            reader.setMetadataStore(meta);
             reader.setId(ii.getFile().getAbsolutePath());
             BufferedImageReader biReader = BufferedImageReader.makeBufferedImageReader(reader);
             img = biReader.openImage(0);
@@ -81,6 +99,12 @@
             throw new FileOpException("Unable to load image format: " + e);
         } catch (IOException e) {
             throw new FileOpException("Unable to load image file: " + e);
+        } catch (ServiceException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (DependencyException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
         }
     }
 
@@ -148,10 +172,16 @@
          */
         BufferedImageWriter writer = BufferedImageWriter.makeBufferedImageWriter(iw);
         try {
-            logger.debug("setting metadata");
-            iw.setMetadataRetrieve((MetadataRetrieve) reader.getMetadataStore());
+            logger.debug("setting metadata "+meta);
+            iw.setMetadataRetrieve(meta);
             logger.debug("writing to file  " + outFile);
             writer.setId(outFile.getAbsolutePath());
+            logger.debug("fixing metadata "+meta);
+            iw.setInterleaved(reader.isInterleaved());
+            iw.setWriteSequentially(true);
+            meta.setPixelsSizeX(new PositiveInteger(img.getWidth()), 0);
+            meta.setPixelsSizeY(new PositiveInteger(img.getHeight()), 0);
+            meta.setPixelsSizeC(new PositiveInteger(img.getColorModel().getNumComponents()), 0);
             logger.debug("saving image " + img);
             writer.saveImage(0, img);
             logger.debug("closing file");