Apply a patch from Damjan Jovanovic.
"Implement dumpImageFile for ICO files and fix a typo"
Jira Key: SANSELAN-43
Damjan's comments:
"""
This patch implements dumpImageFile() for ICO files and fixes a width->height typo.
"""
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/sanselan/trunk@1000603 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sanselan/formats/ico/IcoImageParser.java b/src/main/java/org/apache/sanselan/formats/ico/IcoImageParser.java
index 5ac51e6..3f6bb31 100644
--- a/src/main/java/org/apache/sanselan/formats/ico/IcoImageParser.java
+++ b/src/main/java/org/apache/sanselan/formats/ico/IcoImageParser.java
@@ -24,6 +24,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
@@ -48,7 +49,6 @@
public IcoImageParser()
{
super.setByteOrder(BYTE_ORDER_LSB);
- // setDebug(true);
}
public String getName()
@@ -124,13 +124,13 @@
this.iconCount = iconCount;
}
- public void dump()
+ public void dump(PrintWriter pw)
{
- System.out.println("FileHeader");
- System.out.println("Reserved: " + reserved);
- System.out.println("IconType: " + iconType);
- System.out.println("IconCount: " + iconCount);
- System.out.println("");
+ pw.println("FileHeader");
+ pw.println("Reserved: " + reserved);
+ pw.println("IconType: " + iconType);
+ pw.println("IconCount: " + iconCount);
+ pw.println();
}
}
@@ -175,19 +175,17 @@
ImageOffset = imageOffset;
}
- public void dump()
+ public void dump(PrintWriter pw)
{
- System.out.println("IconInfo");
-
- System.out.println("Width: " + Width);
- System.out.println("Height: " + Height);
- System.out.println("ColorCount: " + ColorCount);
- System.out.println("Reserved: " + Reserved);
- System.out.println("Planes: " + Planes);
- System.out.println("BitCount: " + BitCount);
- System.out.println("ImageSize: " + ImageSize);
- System.out.println("ImageOffset: " + ImageOffset);
- System.out.println("");
+ pw.println("IconInfo");
+ pw.println("Width: " + Width);
+ pw.println("Height: " + Height);
+ pw.println("ColorCount: " + ColorCount);
+ pw.println("Reserved: " + Reserved);
+ pw.println("Planes: " + Planes);
+ pw.println("BitCount: " + BitCount);
+ pw.println("ImageSize: " + ImageSize);
+ pw.println("ImageOffset: " + ImageOffset);
}
}
@@ -240,23 +238,21 @@
ColorsImportant = colorsImportant;
}
- public void dump()
+ public void dump(PrintWriter pw)
{
- System.out.println("BitmapHeader");
+ pw.println("BitmapHeader");
- System.out.println("Size: " + Size);
- System.out.println("Width: " + Width);
- System.out.println("Height: " + Height);
- System.out.println("Planes: " + Planes);
- System.out.println("BitCount: " + BitCount);
- System.out.println("Compression: " + Compression);
- System.out.println("SizeImage: " + SizeImage);
- System.out.println("XPelsPerMeter: " + XPelsPerMeter);
- System.out.println("YPelsPerMeter: " + YPelsPerMeter);
- System.out.println("ColorsUsed: " + ColorsUsed);
- System.out.println("ColorsImportant: " + ColorsImportant);
-
- System.out.println("");
+ pw.println("Size: " + Size);
+ pw.println("Width: " + Width);
+ pw.println("Height: " + Height);
+ pw.println("Planes: " + Planes);
+ pw.println("BitCount: " + BitCount);
+ pw.println("Compression: " + Compression);
+ pw.println("SizeImage: " + SizeImage);
+ pw.println("XPelsPerMeter: " + XPelsPerMeter);
+ pw.println("YPelsPerMeter: " + YPelsPerMeter);
+ pw.println("ColorsUsed: " + ColorsUsed);
+ pw.println("ColorsImportant: " + ColorsImportant);
}
}
@@ -269,6 +265,14 @@
this.iconInfo = iconInfo;
}
+ public void dump(PrintWriter pw)
+ {
+ iconInfo.dump(pw);
+ pw.println();
+ dumpSubclass(pw);
+ }
+
+ protected abstract void dumpSubclass(PrintWriter pw);
public abstract BufferedImage readBufferedImage() throws ImageReadException;
}
@@ -290,12 +294,11 @@
return bufferedImage;
}
- public void dump()
+ protected void dumpSubclass(PrintWriter pw)
{
- System.out.println("BitmapIconData");
-
- iconInfo.dump();
- header.dump();
+ pw.println("BitmapIconData");
+ header.dump(pw);
+ pw.println();
}
}
@@ -314,11 +317,10 @@
return bufferedImage;
}
- public void dump()
+ protected void dumpSubclass(PrintWriter pw)
{
- System.out.println("PNGIconData");
-
- iconInfo.dump();
+ pw.println("PNGIconData");
+ pw.println();
}
}
@@ -486,13 +488,10 @@
is = byteSource.getInputStream();
FileHeader fileHeader = readFileHeader(is);
- // fileHeader.dump();
-
IconInfo fIconInfos[] = new IconInfo[fileHeader.iconCount];
for (int i = 0; i < fileHeader.iconCount; i++)
{
fIconInfos[i] = readIconInfo(is);
- // fIconInfos[i].dump();
}
IconData fIconDatas[] = new IconData[fileHeader.iconCount];
@@ -501,7 +500,6 @@
byte[] iconData = byteSource.getBlock(fIconInfos[i].ImageOffset,
fIconInfos[i].ImageSize);
fIconDatas[i] = readIconData(iconData, fIconInfos[i]);
- // fIconDatas[i].dump();
}
return new ImageContents(fileHeader, fIconDatas);
@@ -522,6 +520,16 @@
}
}
+ public boolean dumpImageFile(PrintWriter pw, ByteSource byteSource)
+ throws ImageReadException, IOException
+ {
+ ImageContents contents = readImage(byteSource);
+ contents.fileHeader.dump(pw);
+ for (int i = 0; i < contents.iconDatas.length; i++)
+ contents.iconDatas[i].dump(pw);
+ return true;
+ }
+
public final BufferedImage getBufferedImage(ByteSource byteSource,
Map params) throws ImageReadException, IOException
{
@@ -684,7 +692,7 @@
int row_padding = scanline_size - (bitCount * src.getWidth() + 7) / 8;
for (int y = src.getHeight() - 1; y >= 0; y--)
{
- for (int x = 0; x < src.getHeight(); x++)
+ for (int x = 0; x < src.getWidth(); x++)
{
int argb = src.getRGB(x, y);
if (bitCount < 8)