fix for b&w jpegs
[mir.git] / source / mircoders / media / ImageProcessor.java
index 0b152a7..22b4609 100755 (executable)
@@ -35,21 +35,23 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
-
-import javax.media.jai.InterpolationBicubic;
-import javax.media.jai.*;
+import javax.media.jai.ImageLayout;
+import javax.media.jai.InterpolationBilinear;
+import javax.media.jai.JAI;
 import javax.media.jai.ParameterBlockJAI;
 import javax.media.jai.PlanarImage;
 
-import java.awt.image.*;
-import java.awt.*;
-
-import mir.log.LoggerWrapper;
+import java.awt.RenderingHints;
+import java.awt.image.ColorModel;
+import java.awt.image.DataBuffer;
+import java.awt.image.PixelInterleavedSampleModel;
 
 import com.sun.media.jai.codec.ByteArraySeekableStream;
 import com.sun.media.jai.codec.FileSeekableStream;
 import com.sun.media.jai.codec.SeekableStream;
 
+import mir.log.LoggerWrapper;
+
 /**
  *
  * <p>Title: Image processor</p>
@@ -72,21 +74,36 @@ public class ImageProcessor {
 
   public ImageProcessor(SeekableStream anImageStream) throws IOException {
     PlanarImage tempImage = JAI.create("stream", anImageStream);
+    ParameterBlockJAI params = new ParameterBlockJAI("format");
+    int bands[];
+    int nrComponents;
 
 
-    ParameterBlockJAI params = new ParameterBlockJAI("format");
     params.addSource(tempImage);
     params.setParameter("dataType", DataBuffer.TYPE_BYTE);
 
     ImageLayout layout = new ImageLayout();
+    nrComponents = tempImage.getColorModel().getNumColorComponents();
+
+/*    System.out.println("blaat sample model = " + tempImage.getSampleModel().toString());
+    System.out.println("blaat color model = " + tempImage.getColorModel().toString());
+    System.out.println("blaat nr color components = " + tempImage.getColorModel().getNumColorComponents());
+    System.out.println("blaat nr components = " + tempImage.getColorModel().getNumComponents());
+ */
+    bands = new int[nrComponents];
+    for (int i=0; i<nrComponents; i++)
+      bands[i]=i;
+
+
+
     layout.setColorModel(ColorModel.getRGBdefault());
     layout.setSampleModel(
         new PixelInterleavedSampleModel(DataBuffer.TYPE_BYTE,
-        layout.getSampleModel(tempImage).getWidth(),
-        layout.getSampleModel(tempImage).getHeight(),
-        3,
-        3*layout.getSampleModel(tempImage).getWidth(),
-        new int[] {2,1,0}));
+        tempImage.getWidth(),
+        tempImage.getHeight(),
+        nrComponents,
+        nrComponents*tempImage.getWidth(),
+        bands));
 
     RenderingHints hints = new RenderingHints(JAI.KEY_IMAGE_LAYOUT, layout);
 
@@ -183,12 +200,6 @@ public class ImageProcessor {
   }
 
   public void writeScaledData(OutputStream aStream, String anImageType) {
-
-//    ParameterBlockJAI params = new ParameterBlockJAI("BandSelect");
-//    params.addSource(scaledImage);
-//    params.setParameter("bandIndices", new int[] {0,1,2});
-//    PlanarImage tempImage = JAI.create("BandSelect", params);
-
     JAI.create("encode", scaledImage, aStream, anImageType, null);
   }