Use ImageBuilder for BMP files.



git-svn-id: https://svn.apache.org/repos/asf/commons/proper/sanselan/trunk@1293771 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/commons/sanselan/formats/bmp/BmpImageParser.java b/src/main/java/org/apache/commons/sanselan/formats/bmp/BmpImageParser.java
index b6980b4..71d69dd 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/bmp/BmpImageParser.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/bmp/BmpImageParser.java
@@ -37,6 +37,7 @@
 import org.apache.commons.sanselan.ImageWriteException;
 import org.apache.commons.sanselan.common.BinaryOutputStream;
 import org.apache.commons.sanselan.common.IImageMetadata;
+import org.apache.commons.sanselan.common.ImageBuilder;
 import org.apache.commons.sanselan.common.bytesource.ByteSource;
 import org.apache.commons.sanselan.formats.bmp.pixelparsers.PixelParser;
 import org.apache.commons.sanselan.formats.bmp.pixelparsers.PixelParserBitFields;
@@ -713,9 +714,6 @@
         int width = bhi.width;
         int height = bhi.height;
 
-        BufferedImage result = getBufferedImageFactory(params)
-                .getColorBufferedImage(width, height, true);
-
         if (verbose)
         {
             System.out.println("width: " + width);
@@ -725,10 +723,10 @@
         }
 
         PixelParser pixelParser = ic.pixelParser;
+        ImageBuilder imageBuilder = new ImageBuilder(width, height, true);
+        pixelParser.processImage(imageBuilder);
 
-        pixelParser.processImage(result);
-
-        return result;
+        return imageBuilder.getBufferedImage();
 
     }
 
diff --git a/src/main/java/org/apache/commons/sanselan/formats/bmp/pixelparsers/PixelParser.java b/src/main/java/org/apache/commons/sanselan/formats/bmp/pixelparsers/PixelParser.java
index 09ab1ac..c937462 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/bmp/pixelparsers/PixelParser.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/bmp/pixelparsers/PixelParser.java
@@ -16,12 +16,12 @@
  */
 package org.apache.commons.sanselan.formats.bmp.pixelparsers;
 
-import java.awt.image.BufferedImage;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 
 import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.common.BinaryFileParser;
+import org.apache.commons.sanselan.common.ImageBuilder;
 import org.apache.commons.sanselan.formats.bmp.BmpHeaderInfo;
 
 public abstract class PixelParser
@@ -43,7 +43,7 @@
         is = new ByteArrayInputStream(ImageData);
     }
 
-    public abstract void processImage(BufferedImage bi)
+    public abstract void processImage(ImageBuilder imageBuilder)
             throws ImageReadException, IOException;
 
     protected int getColorTableRGB(int index)
diff --git a/src/main/java/org/apache/commons/sanselan/formats/bmp/pixelparsers/PixelParserRle.java b/src/main/java/org/apache/commons/sanselan/formats/bmp/pixelparsers/PixelParserRle.java
index 23c7a41..7d65ea2 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/bmp/pixelparsers/PixelParserRle.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/bmp/pixelparsers/PixelParserRle.java
@@ -21,6 +21,7 @@
 import java.io.IOException;
 
 import org.apache.commons.sanselan.ImageReadException;
+import org.apache.commons.sanselan.common.ImageBuilder;
 import org.apache.commons.sanselan.formats.bmp.BmpHeaderInfo;
 
 public class PixelParserRle extends PixelParser
@@ -70,7 +71,7 @@
     }
 
     private int processByteOfData(int rgbs[], int repeat, int x, int y,
-            int width, int height, DataBuffer db, BufferedImage bi)
+            int width, int height, ImageBuilder imageBuilder)
     {
         //                int rbg
         int pixels_written = 0;
@@ -83,7 +84,7 @@
                 //                    rgb = getNextRGB();
                 int rgb = rgbs[i % rgbs.length];
                 //                                bi.setRGB(x, y, rgb);
-                db.setElem(y * bhi.width + x, rgb);
+                imageBuilder.setRGB(x, y, rgb);
                 //                                bi.setRGB(x, y, 0xff00ff00);
             }
             else
@@ -98,11 +99,9 @@
         return pixels_written;
     }
 
-    public void processImage(BufferedImage bi) throws ImageReadException,
+    public void processImage(ImageBuilder imageBuilder) throws ImageReadException,
             IOException
     {
-        DataBuffer db = bi.getRaster().getDataBuffer();
-
         int count = 0;
         int width = bhi.width;
         int height = bhi.height;
@@ -183,7 +182,7 @@
                             //                                    + SamplesPerByte);
                             //                            System.out.println("towrite: " + towrite);
                             int written = processByteOfData(samples, towrite,
-                                    x, y, width, height, db, bi);
+                                    x, y, width, height, imageBuilder);
                             //                            System.out.println("written: " + written);
                             //                            System.out.println("");
                             x += written;
@@ -198,7 +197,7 @@
             {
                 int rgbs[] = convertDataToSamples(b);
 
-                x += processByteOfData(rgbs, a, x, y, width, height, db, bi);
+                x += processByteOfData(rgbs, a, x, y, width, height, imageBuilder);
                 //                    x += processByteOfData(b, a, x, y, width, height, bi);
 
             }
diff --git a/src/main/java/org/apache/commons/sanselan/formats/bmp/pixelparsers/PixelParserSimple.java b/src/main/java/org/apache/commons/sanselan/formats/bmp/pixelparsers/PixelParserSimple.java
index adc6a22..4f3a650 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/bmp/pixelparsers/PixelParserSimple.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/bmp/pixelparsers/PixelParserSimple.java
@@ -16,10 +16,10 @@
  */
 package org.apache.commons.sanselan.formats.bmp.pixelparsers;
 
-import java.awt.image.BufferedImage;
 import java.io.IOException;
 
 import org.apache.commons.sanselan.ImageReadException;
+import org.apache.commons.sanselan.common.ImageBuilder;
 import org.apache.commons.sanselan.formats.bmp.BmpHeaderInfo;
 
 public abstract class PixelParserSimple extends PixelParser
@@ -34,7 +34,7 @@
 
     public abstract void newline() throws ImageReadException, IOException;
 
-    public void processImage(BufferedImage bi) throws ImageReadException,
+    public void processImage(ImageBuilder imageBuilder) throws ImageReadException,
             IOException
     {
 //        DataBuffer db = bi.getRaster().getDataBuffer();
@@ -45,7 +45,7 @@
             {
                 int rgb = getNextRGB();
 
-                bi.setRGB(x, y, rgb);
+                imageBuilder.setRGB(x, y, rgb);
 //                db.setElem(y * bhi.width + x, rgb);
             }
             newline();