You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by da...@apache.org on 2017/02/05 17:07:52 UTC

svn commit: r1781785 - in /commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx: PcxConstants.java PcxWriter.java

Author: damjan
Date: Sun Feb  5 17:07:51 2017
New Revision: 1781785

URL: http://svn.apache.org/viewvc?rev=1781785&view=rev
Log:
Allow giving PCX a hint as to the number of planes to use, and by default,
write 16 color images using 4 planes of 1 bit instead of 1 plane of 4 bits,
as GIMP and Apache OpenOffice support the former but not the latter.

Patch by: me

Modified:
    commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx/PcxConstants.java
    commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx/PcxWriter.java

Modified: commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx/PcxConstants.java
URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx/PcxConstants.java?rev=1781785&r1=1781784&r2=1781785&view=diff
==============================================================================
--- commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx/PcxConstants.java (original)
+++ commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx/PcxConstants.java Sun Feb  5 17:07:51 2017
@@ -22,6 +22,8 @@ public final class PcxConstants {
 
     public static final String PARAM_KEY_PCX_BIT_DEPTH = "PCX_BIT_DEPTH";
 
+    public static final String PARAM_KEY_PCX_PLANES = "PCX_PLANES";
+    
     private PcxConstants() {
     }
 }

Modified: commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx/PcxWriter.java
URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx/PcxWriter.java?rev=1781785&r1=1781784&r2=1781785&view=diff
==============================================================================
--- commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx/PcxWriter.java (original)
+++ commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx/PcxWriter.java Sun Feb  5 17:07:51 2017
@@ -33,6 +33,7 @@ import org.apache.commons.imaging.palett
 class PcxWriter {
     private int encoding;
     private int bitDepth = -1;
+    private int planes = -1;
     private PixelDensity pixelDensity;
     private final RleWriter rleWriter;
 
@@ -77,6 +78,17 @@ class PcxWriter {
                 bitDepth = ((Number) value).intValue();
             }
         }
+        
+        if (params.containsKey(PcxConstants.PARAM_KEY_PCX_PLANES)) {
+            final Object value = params.remove(PcxConstants.PARAM_KEY_PCX_PLANES);
+            if (value != null) {
+                if (!(value instanceof Number)) {
+                    throw new ImageWriteException(
+                            "Invalid planes parameter: " + value);
+                }
+                planes = ((Number) value).intValue();
+            }
+        }
 
         if (params.containsKey(ImagingConstants.PARAM_KEY_PIXEL_DENSITY)) {
             final Object value = params.remove(ImagingConstants.PARAM_KEY_PIXEL_DENSITY);
@@ -114,7 +126,11 @@ class PcxWriter {
         } else if (palette.length() > 16 || bitDepth == 8) {
             write256ColorPCX(src, palette, bos);
         } else if (palette.length() > 2 || bitDepth == 4) {
-            write16ColorPCX(src, palette, bos);
+            if (planes == 1) {
+                write16ColorPCXIn1Plane(src, palette, bos);
+            } else {
+                write16ColorPCXIn4Planes(src, palette, bos);
+            }
         } else {
             boolean onlyBlackAndWhite = true;
             if (palette.length() >= 1) {
@@ -132,7 +148,11 @@ class PcxWriter {
             if (onlyBlackAndWhite) {
                 writeBlackAndWhitePCX(src, bos);
             } else {
-                write16ColorPCX(src, palette, bos);
+                if (planes == 1) {
+                    write16ColorPCXIn1Plane(src, palette, bos);
+                } else {
+                    write16ColorPCXIn4Planes(src, palette, bos);
+                }
             }
         }
     }
@@ -264,7 +284,7 @@ class PcxWriter {
         rleWriter.flush(bos);
     }
 
-    private void write16ColorPCX(final BufferedImage src, final SimplePalette palette,
+    private void write16ColorPCXIn1Plane(final BufferedImage src, final SimplePalette palette,
             final BinaryOutputStream bos) throws ImageWriteException, IOException {
         int bytesPerLine = (src.getWidth() + 1) / 2;
         if (bytesPerLine % 2 != 0) {
@@ -316,6 +336,71 @@ class PcxWriter {
         }
         rleWriter.flush(bos);
     }
+
+    private void write16ColorPCXIn4Planes(final BufferedImage src, final SimplePalette palette,
+            final BinaryOutputStream bos) throws ImageWriteException, IOException {
+        int bytesPerLine = (src.getWidth() + 7) / 8;
+        if (bytesPerLine % 2 != 0) {
+            ++bytesPerLine;
+        }
+
+        final byte[] palette16 = new byte[16 * 3];
+        for (int i = 0; i < 16; i++) {
+            int rgb;
+            if (i < palette.length()) {
+                rgb = palette.getEntry(i);
+            } else {
+                rgb = 0;
+            }
+            palette16[3 * i + 0] = (byte) (0xff & (rgb >> 16));
+            palette16[3 * i + 1] = (byte) (0xff & (rgb >> 8));
+            palette16[3 * i + 2] = (byte) (0xff & rgb);
+        }
+
+        // PCX header
+        bos.write(10); // manufacturer
+        bos.write(5); // version
+        bos.write(encoding); // encoding
+        bos.write(1); // bits per pixel
+        bos.write2Bytes(0); // xMin
+        bos.write2Bytes(0); // yMin
+        bos.write2Bytes(src.getWidth() - 1); // xMax
+        bos.write2Bytes(src.getHeight() - 1); // yMax
+        bos.write2Bytes((short) Math.round(pixelDensity.horizontalDensityInches())); // hDpi
+        bos.write2Bytes((short) Math.round(pixelDensity.verticalDensityInches())); // vDpi
+        bos.write(palette16); // 16 color palette
+        bos.write(0); // reserved
+        bos.write(4); // planes
+        bos.write2Bytes(bytesPerLine); // bytes per line
+        bos.write2Bytes(1); // palette info
+        bos.write2Bytes(0); // hScreenSize
+        bos.write2Bytes(0); // vScreenSize
+        bos.write(new byte[54]);
+
+        final byte[] plane0 = new byte[bytesPerLine];
+        final byte[] plane1 = new byte[bytesPerLine];
+        final byte[] plane2 = new byte[bytesPerLine];
+        final byte[] plane3 = new byte[bytesPerLine];
+        for (int y = 0; y < src.getHeight(); y++) {
+            Arrays.fill(plane0, (byte)0);
+            Arrays.fill(plane1, (byte)0);
+            Arrays.fill(plane2, (byte)0);
+            Arrays.fill(plane3, (byte)0);
+            for (int x = 0; x < src.getWidth(); x++) {
+                final int argb = src.getRGB(x, y);
+                final int index = palette.getPaletteIndex(0xffffff & argb);
+                plane0[x >>> 3] |= (index & 1) << (7 - (x & 7));
+                plane1[x >>> 3] |= ((index & 2) >> 1) << (7 - (x & 7));
+                plane2[x >>> 3] |= ((index & 4) >> 2) << (7 - (x & 7));
+                plane3[x >>> 3] |= ((index & 8) >> 3) << (7 - (x & 7));
+            }
+            rleWriter.write(bos, plane0);
+            rleWriter.write(bos, plane1);
+            rleWriter.write(bos, plane2);
+            rleWriter.write(bos, plane3);
+        }
+        rleWriter.flush(bos);
+    }
 
     private void write256ColorPCX(final BufferedImage src, final SimplePalette palette,
             final BinaryOutputStream bos) throws ImageWriteException, IOException {



Re: svn commit: r1781785 - in /commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx: PcxConstants.java PcxWriter.java

Posted by Gary Gregory <ga...@gmail.com>.
On Feb 5, 2017 11:00 AM, "Benedikt Ritter" <br...@apache.org> wrote:

Hi,

> Am 05.02.2017 um 18:59 schrieb Gary Gregory <ga...@gmail.com>:
>
> An alternative would be to have a 0.98 now as a milestone and say that big
> changes are coming next in a 1.0 beta 1.

I don’t think it’s an option to push out 0.98. That would require to
separate non breaking changes from breaking changes and reapply them based
on the old maven coords (sanselan).
Let’s just work on 1.0 and push that out of the door.


Ok.

Gary


Regards,
Benedikt

>
> Gary
>
> On Feb 5, 2017 9:55 AM, "Benedikt Ritter" <br...@apache.org> wrote:
>
> Hello Damjan,
>
>> Am 05.02.2017 um 18:53 schrieb Damjan Jovanovic <da...@apache.org>:
>>
>> Thank you.
>>
>> I have tons of changes I want to make, many of them large and affecting
> the
>> API. If we have to make a release soon, maybe a 0.98 would be better?
>
> Let’s change the API now and then push the release. Let us know how we can
> help with the development. There may be people out there willing to
> contribute to the project.
>
> Regards,
> Benedikt
>
>>
>> Regards
>> Damjan
>>
>> On Sun, Feb 5, 2017 at 7:09 PM, Benedikt Ritter <br...@apache.org>
> wrote:
>>
>>> Hi Damjan,
>>>
>>> It’s nice to see some activity in IMAGING again. Do you think the code
>>> base is ready for an RC? I’d like to finally push out a release of this
>>> component.
>>>
>>> Regards,
>>> Benedikt
>>>
>>>> Am 05.02.2017 um 18:07 schrieb damjan@apache.org:
>>>>
>>>> Author: damjan
>>>> Date: Sun Feb  5 17:07:51 2017
>>>> New Revision: 1781785
>>>>
>>>> URL: http://svn.apache.org/viewvc?rev=1781785&view=rev
>>>> Log:
>>>> Allow giving PCX a hint as to the number of planes to use, and by
>>> default,
>>>> write 16 color images using 4 planes of 1 bit instead of 1 plane of 4
>>> bits,
>>>> as GIMP and Apache OpenOffice support the former but not the latter.
>>>>
>>>> Patch by: me
>>>>
>>>> Modified:
>>>>  commons/proper/imaging/trunk/src/main/java/org/apache/
>>> commons/imaging/formats/pcx/PcxConstants.java
>>>>  commons/proper/imaging/trunk/src/main/java/org/apache/
>>> commons/imaging/formats/pcx/PcxWriter.java
>>>>
>>>> Modified: commons/proper/imaging/trunk/src/main/java/org/apache/
>>> commons/imaging/formats/pcx/PcxConstants.java
>>>> URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/
>>> src/main/java/org/apache/commons/imaging/formats/pcx/
>>> PcxConstants.java?rev=1781785&r1=1781784&r2=1781785&view=diff
>>>> ============================================================
>>> ==================
>>>> --- commons/proper/imaging/trunk/src/main/java/org/apache/
>>> commons/imaging/formats/pcx/PcxConstants.java (original)
>>>> +++ commons/proper/imaging/trunk/src/main/java/org/apache/
>>> commons/imaging/formats/pcx/PcxConstants.java Sun Feb  5 17:07:51 2017
>>>> @@ -22,6 +22,8 @@ public final class PcxConstants {
>>>>
>>>>   public static final String PARAM_KEY_PCX_BIT_DEPTH = "PCX_BIT_DEPTH";
>>>>
>>>> +    public static final String PARAM_KEY_PCX_PLANES = "PCX_PLANES";
>>>> +
>>>>   private PcxConstants() {
>>>>   }
>>>> }
>>>>
>>>> Modified: commons/proper/imaging/trunk/src/main/java/org/apache/
>>> commons/imaging/formats/pcx/PcxWriter.java
>>>> URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/
>>> src/main/java/org/apache/commons/imaging/formats/pcx/
>>> PcxWriter.java?rev=1781785&r1=1781784&r2=1781785&view=diff
>>>> ============================================================
>>> ==================
>>>> --- commons/proper/imaging/trunk/src/main/java/org/apache/
>>> commons/imaging/formats/pcx/PcxWriter.java (original)
>>>> +++ commons/proper/imaging/trunk/src/main/java/org/apache/
>>> commons/imaging/formats/pcx/PcxWriter.java Sun Feb  5 17:07:51 2017
>>>> @@ -33,6 +33,7 @@ import org.apache.commons.imaging.palett
>>>> class PcxWriter {
>>>>   private int encoding;
>>>>   private int bitDepth = -1;
>>>> +    private int planes = -1;
>>>>   private PixelDensity pixelDensity;
>>>>   private final RleWriter rleWriter;
>>>>
>>>> @@ -77,6 +78,17 @@ class PcxWriter {
>>>>               bitDepth = ((Number) value).intValue();
>>>>           }
>>>>       }
>>>> +
>>>> +        if (params.containsKey(PcxConstants.PARAM_KEY_PCX_PLANES)) {
>>>> +            final Object value = params.remove(PcxConstants.
>>> PARAM_KEY_PCX_PLANES);
>>>> +            if (value != null) {
>>>> +                if (!(value instanceof Number)) {
>>>> +                    throw new ImageWriteException(
>>>> +                            "Invalid planes parameter: " + value);
>>>> +                }
>>>> +                planes = ((Number) value).intValue();
>>>> +            }
>>>> +        }
>>>>
>>>>       if (params.containsKey(ImagingConstants.PARAM_KEY_PIXEL_DENSITY))
>>> {
>>>>           final Object value = params.remove(
>>> ImagingConstants.PARAM_KEY_PIXEL_DENSITY);
>>>> @@ -114,7 +126,11 @@ class PcxWriter {
>>>>       } else if (palette.length() > 16 || bitDepth == 8) {
>>>>           write256ColorPCX(src, palette, bos);
>>>>       } else if (palette.length() > 2 || bitDepth == 4) {
>>>> -            write16ColorPCX(src, palette, bos);
>>>> +            if (planes == 1) {
>>>> +                write16ColorPCXIn1Plane(src, palette, bos);
>>>> +            } else {
>>>> +                write16ColorPCXIn4Planes(src, palette, bos);
>>>> +            }
>>>>       } else {
>>>>           boolean onlyBlackAndWhite = true;
>>>>           if (palette.length() >= 1) {
>>>> @@ -132,7 +148,11 @@ class PcxWriter {
>>>>           if (onlyBlackAndWhite) {
>>>>               writeBlackAndWhitePCX(src, bos);
>>>>           } else {
>>>> -                write16ColorPCX(src, palette, bos);
>>>> +                if (planes == 1) {
>>>> +                    write16ColorPCXIn1Plane(src, palette, bos);
>>>> +                } else {
>>>> +                    write16ColorPCXIn4Planes(src, palette, bos);
>>>> +                }
>>>>           }
>>>>       }
>>>>   }
>>>> @@ -264,7 +284,7 @@ class PcxWriter {
>>>>       rleWriter.flush(bos);
>>>>   }
>>>>
>>>> -    private void write16ColorPCX(final BufferedImage src, final
>>> SimplePalette palette,
>>>> +    private void write16ColorPCXIn1Plane(final BufferedImage src,
final
>>> SimplePalette palette,
>>>>           final BinaryOutputStream bos) throws ImageWriteException,
>>> IOException {
>>>>       int bytesPerLine = (src.getWidth() + 1) / 2;
>>>>       if (bytesPerLine % 2 != 0) {
>>>> @@ -316,6 +336,71 @@ class PcxWriter {
>>>>       }
>>>>       rleWriter.flush(bos);
>>>>   }
>>>> +
>>>> +    private void write16ColorPCXIn4Planes(final BufferedImage src,
>>> final SimplePalette palette,
>>>> +            final BinaryOutputStream bos) throws ImageWriteException,
>>> IOException {
>>>> +        int bytesPerLine = (src.getWidth() + 7) / 8;
>>>> +        if (bytesPerLine % 2 != 0) {
>>>> +            ++bytesPerLine;
>>>> +        }
>>>> +
>>>> +        final byte[] palette16 = new byte[16 * 3];
>>>> +        for (int i = 0; i < 16; i++) {
>>>> +            int rgb;
>>>> +            if (i < palette.length()) {
>>>> +                rgb = palette.getEntry(i);
>>>> +            } else {
>>>> +                rgb = 0;
>>>> +            }
>>>> +            palette16[3 * i + 0] = (byte) (0xff & (rgb >> 16));
>>>> +            palette16[3 * i + 1] = (byte) (0xff & (rgb >> 8));
>>>> +            palette16[3 * i + 2] = (byte) (0xff & rgb);
>>>> +        }
>>>> +
>>>> +        // PCX header
>>>> +        bos.write(10); // manufacturer
>>>> +        bos.write(5); // version
>>>> +        bos.write(encoding); // encoding
>>>> +        bos.write(1); // bits per pixel
>>>> +        bos.write2Bytes(0); // xMin
>>>> +        bos.write2Bytes(0); // yMin
>>>> +        bos.write2Bytes(src.getWidth() - 1); // xMax
>>>> +        bos.write2Bytes(src.getHeight() - 1); // yMax
>>>> +        bos.write2Bytes((short) Math.round(pixelDensity.
> horizontalDensityInches()));
>>> // hDpi
>>>> +        bos.write2Bytes((short) Math.round(pixelDensity.
> verticalDensityInches()));
>>> // vDpi
>>>> +        bos.write(palette16); // 16 color palette
>>>> +        bos.write(0); // reserved
>>>> +        bos.write(4); // planes
>>>> +        bos.write2Bytes(bytesPerLine); // bytes per line
>>>> +        bos.write2Bytes(1); // palette info
>>>> +        bos.write2Bytes(0); // hScreenSize
>>>> +        bos.write2Bytes(0); // vScreenSize
>>>> +        bos.write(new byte[54]);
>>>> +
>>>> +        final byte[] plane0 = new byte[bytesPerLine];
>>>> +        final byte[] plane1 = new byte[bytesPerLine];
>>>> +        final byte[] plane2 = new byte[bytesPerLine];
>>>> +        final byte[] plane3 = new byte[bytesPerLine];
>>>> +        for (int y = 0; y < src.getHeight(); y++) {
>>>> +            Arrays.fill(plane0, (byte)0);
>>>> +            Arrays.fill(plane1, (byte)0);
>>>> +            Arrays.fill(plane2, (byte)0);
>>>> +            Arrays.fill(plane3, (byte)0);
>>>> +            for (int x = 0; x < src.getWidth(); x++) {
>>>> +                final int argb = src.getRGB(x, y);
>>>> +                final int index = palette.getPaletteIndex(0xffffff &
>>> argb);
>>>> +                plane0[x >>> 3] |= (index & 1) << (7 - (x & 7));
>>>> +                plane1[x >>> 3] |= ((index & 2) >> 1) << (7 - (x &
7));
>>>> +                plane2[x >>> 3] |= ((index & 4) >> 2) << (7 - (x &
7));
>>>> +                plane3[x >>> 3] |= ((index & 8) >> 3) << (7 - (x &
7));
>>>> +            }
>>>> +            rleWriter.write(bos, plane0);
>>>> +            rleWriter.write(bos, plane1);
>>>> +            rleWriter.write(bos, plane2);
>>>> +            rleWriter.write(bos, plane3);
>>>> +        }
>>>> +        rleWriter.flush(bos);
>>>> +    }
>>>>
>>>>   private void write256ColorPCX(final BufferedImage src, final
>>> SimplePalette palette,
>>>>           final BinaryOutputStream bos) throws ImageWriteException,
>>> IOException {
>>>>
>>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>>> For additional commands, e-mail: dev-help@commons.apache.org
>>>
>>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org

Re: svn commit: r1781785 - in /commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx: PcxConstants.java PcxWriter.java

Posted by Benedikt Ritter <br...@apache.org>.
Hi,

> Am 05.02.2017 um 18:59 schrieb Gary Gregory <ga...@gmail.com>:
> 
> An alternative would be to have a 0.98 now as a milestone and say that big
> changes are coming next in a 1.0 beta 1.

I don’t think it’s an option to push out 0.98. That would require to separate non breaking changes from breaking changes and reapply them based on the old maven coords (sanselan).
Let’s just work on 1.0 and push that out of the door.

Regards,
Benedikt

> 
> Gary
> 
> On Feb 5, 2017 9:55 AM, "Benedikt Ritter" <br...@apache.org> wrote:
> 
> Hello Damjan,
> 
>> Am 05.02.2017 um 18:53 schrieb Damjan Jovanovic <da...@apache.org>:
>> 
>> Thank you.
>> 
>> I have tons of changes I want to make, many of them large and affecting
> the
>> API. If we have to make a release soon, maybe a 0.98 would be better?
> 
> Let’s change the API now and then push the release. Let us know how we can
> help with the development. There may be people out there willing to
> contribute to the project.
> 
> Regards,
> Benedikt
> 
>> 
>> Regards
>> Damjan
>> 
>> On Sun, Feb 5, 2017 at 7:09 PM, Benedikt Ritter <br...@apache.org>
> wrote:
>> 
>>> Hi Damjan,
>>> 
>>> It’s nice to see some activity in IMAGING again. Do you think the code
>>> base is ready for an RC? I’d like to finally push out a release of this
>>> component.
>>> 
>>> Regards,
>>> Benedikt
>>> 
>>>> Am 05.02.2017 um 18:07 schrieb damjan@apache.org:
>>>> 
>>>> Author: damjan
>>>> Date: Sun Feb  5 17:07:51 2017
>>>> New Revision: 1781785
>>>> 
>>>> URL: http://svn.apache.org/viewvc?rev=1781785&view=rev
>>>> Log:
>>>> Allow giving PCX a hint as to the number of planes to use, and by
>>> default,
>>>> write 16 color images using 4 planes of 1 bit instead of 1 plane of 4
>>> bits,
>>>> as GIMP and Apache OpenOffice support the former but not the latter.
>>>> 
>>>> Patch by: me
>>>> 
>>>> Modified:
>>>>  commons/proper/imaging/trunk/src/main/java/org/apache/
>>> commons/imaging/formats/pcx/PcxConstants.java
>>>>  commons/proper/imaging/trunk/src/main/java/org/apache/
>>> commons/imaging/formats/pcx/PcxWriter.java
>>>> 
>>>> Modified: commons/proper/imaging/trunk/src/main/java/org/apache/
>>> commons/imaging/formats/pcx/PcxConstants.java
>>>> URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/
>>> src/main/java/org/apache/commons/imaging/formats/pcx/
>>> PcxConstants.java?rev=1781785&r1=1781784&r2=1781785&view=diff
>>>> ============================================================
>>> ==================
>>>> --- commons/proper/imaging/trunk/src/main/java/org/apache/
>>> commons/imaging/formats/pcx/PcxConstants.java (original)
>>>> +++ commons/proper/imaging/trunk/src/main/java/org/apache/
>>> commons/imaging/formats/pcx/PcxConstants.java Sun Feb  5 17:07:51 2017
>>>> @@ -22,6 +22,8 @@ public final class PcxConstants {
>>>> 
>>>>   public static final String PARAM_KEY_PCX_BIT_DEPTH = "PCX_BIT_DEPTH";
>>>> 
>>>> +    public static final String PARAM_KEY_PCX_PLANES = "PCX_PLANES";
>>>> +
>>>>   private PcxConstants() {
>>>>   }
>>>> }
>>>> 
>>>> Modified: commons/proper/imaging/trunk/src/main/java/org/apache/
>>> commons/imaging/formats/pcx/PcxWriter.java
>>>> URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/
>>> src/main/java/org/apache/commons/imaging/formats/pcx/
>>> PcxWriter.java?rev=1781785&r1=1781784&r2=1781785&view=diff
>>>> ============================================================
>>> ==================
>>>> --- commons/proper/imaging/trunk/src/main/java/org/apache/
>>> commons/imaging/formats/pcx/PcxWriter.java (original)
>>>> +++ commons/proper/imaging/trunk/src/main/java/org/apache/
>>> commons/imaging/formats/pcx/PcxWriter.java Sun Feb  5 17:07:51 2017
>>>> @@ -33,6 +33,7 @@ import org.apache.commons.imaging.palett
>>>> class PcxWriter {
>>>>   private int encoding;
>>>>   private int bitDepth = -1;
>>>> +    private int planes = -1;
>>>>   private PixelDensity pixelDensity;
>>>>   private final RleWriter rleWriter;
>>>> 
>>>> @@ -77,6 +78,17 @@ class PcxWriter {
>>>>               bitDepth = ((Number) value).intValue();
>>>>           }
>>>>       }
>>>> +
>>>> +        if (params.containsKey(PcxConstants.PARAM_KEY_PCX_PLANES)) {
>>>> +            final Object value = params.remove(PcxConstants.
>>> PARAM_KEY_PCX_PLANES);
>>>> +            if (value != null) {
>>>> +                if (!(value instanceof Number)) {
>>>> +                    throw new ImageWriteException(
>>>> +                            "Invalid planes parameter: " + value);
>>>> +                }
>>>> +                planes = ((Number) value).intValue();
>>>> +            }
>>>> +        }
>>>> 
>>>>       if (params.containsKey(ImagingConstants.PARAM_KEY_PIXEL_DENSITY))
>>> {
>>>>           final Object value = params.remove(
>>> ImagingConstants.PARAM_KEY_PIXEL_DENSITY);
>>>> @@ -114,7 +126,11 @@ class PcxWriter {
>>>>       } else if (palette.length() > 16 || bitDepth == 8) {
>>>>           write256ColorPCX(src, palette, bos);
>>>>       } else if (palette.length() > 2 || bitDepth == 4) {
>>>> -            write16ColorPCX(src, palette, bos);
>>>> +            if (planes == 1) {
>>>> +                write16ColorPCXIn1Plane(src, palette, bos);
>>>> +            } else {
>>>> +                write16ColorPCXIn4Planes(src, palette, bos);
>>>> +            }
>>>>       } else {
>>>>           boolean onlyBlackAndWhite = true;
>>>>           if (palette.length() >= 1) {
>>>> @@ -132,7 +148,11 @@ class PcxWriter {
>>>>           if (onlyBlackAndWhite) {
>>>>               writeBlackAndWhitePCX(src, bos);
>>>>           } else {
>>>> -                write16ColorPCX(src, palette, bos);
>>>> +                if (planes == 1) {
>>>> +                    write16ColorPCXIn1Plane(src, palette, bos);
>>>> +                } else {
>>>> +                    write16ColorPCXIn4Planes(src, palette, bos);
>>>> +                }
>>>>           }
>>>>       }
>>>>   }
>>>> @@ -264,7 +284,7 @@ class PcxWriter {
>>>>       rleWriter.flush(bos);
>>>>   }
>>>> 
>>>> -    private void write16ColorPCX(final BufferedImage src, final
>>> SimplePalette palette,
>>>> +    private void write16ColorPCXIn1Plane(final BufferedImage src, final
>>> SimplePalette palette,
>>>>           final BinaryOutputStream bos) throws ImageWriteException,
>>> IOException {
>>>>       int bytesPerLine = (src.getWidth() + 1) / 2;
>>>>       if (bytesPerLine % 2 != 0) {
>>>> @@ -316,6 +336,71 @@ class PcxWriter {
>>>>       }
>>>>       rleWriter.flush(bos);
>>>>   }
>>>> +
>>>> +    private void write16ColorPCXIn4Planes(final BufferedImage src,
>>> final SimplePalette palette,
>>>> +            final BinaryOutputStream bos) throws ImageWriteException,
>>> IOException {
>>>> +        int bytesPerLine = (src.getWidth() + 7) / 8;
>>>> +        if (bytesPerLine % 2 != 0) {
>>>> +            ++bytesPerLine;
>>>> +        }
>>>> +
>>>> +        final byte[] palette16 = new byte[16 * 3];
>>>> +        for (int i = 0; i < 16; i++) {
>>>> +            int rgb;
>>>> +            if (i < palette.length()) {
>>>> +                rgb = palette.getEntry(i);
>>>> +            } else {
>>>> +                rgb = 0;
>>>> +            }
>>>> +            palette16[3 * i + 0] = (byte) (0xff & (rgb >> 16));
>>>> +            palette16[3 * i + 1] = (byte) (0xff & (rgb >> 8));
>>>> +            palette16[3 * i + 2] = (byte) (0xff & rgb);
>>>> +        }
>>>> +
>>>> +        // PCX header
>>>> +        bos.write(10); // manufacturer
>>>> +        bos.write(5); // version
>>>> +        bos.write(encoding); // encoding
>>>> +        bos.write(1); // bits per pixel
>>>> +        bos.write2Bytes(0); // xMin
>>>> +        bos.write2Bytes(0); // yMin
>>>> +        bos.write2Bytes(src.getWidth() - 1); // xMax
>>>> +        bos.write2Bytes(src.getHeight() - 1); // yMax
>>>> +        bos.write2Bytes((short) Math.round(pixelDensity.
> horizontalDensityInches()));
>>> // hDpi
>>>> +        bos.write2Bytes((short) Math.round(pixelDensity.
> verticalDensityInches()));
>>> // vDpi
>>>> +        bos.write(palette16); // 16 color palette
>>>> +        bos.write(0); // reserved
>>>> +        bos.write(4); // planes
>>>> +        bos.write2Bytes(bytesPerLine); // bytes per line
>>>> +        bos.write2Bytes(1); // palette info
>>>> +        bos.write2Bytes(0); // hScreenSize
>>>> +        bos.write2Bytes(0); // vScreenSize
>>>> +        bos.write(new byte[54]);
>>>> +
>>>> +        final byte[] plane0 = new byte[bytesPerLine];
>>>> +        final byte[] plane1 = new byte[bytesPerLine];
>>>> +        final byte[] plane2 = new byte[bytesPerLine];
>>>> +        final byte[] plane3 = new byte[bytesPerLine];
>>>> +        for (int y = 0; y < src.getHeight(); y++) {
>>>> +            Arrays.fill(plane0, (byte)0);
>>>> +            Arrays.fill(plane1, (byte)0);
>>>> +            Arrays.fill(plane2, (byte)0);
>>>> +            Arrays.fill(plane3, (byte)0);
>>>> +            for (int x = 0; x < src.getWidth(); x++) {
>>>> +                final int argb = src.getRGB(x, y);
>>>> +                final int index = palette.getPaletteIndex(0xffffff &
>>> argb);
>>>> +                plane0[x >>> 3] |= (index & 1) << (7 - (x & 7));
>>>> +                plane1[x >>> 3] |= ((index & 2) >> 1) << (7 - (x & 7));
>>>> +                plane2[x >>> 3] |= ((index & 4) >> 2) << (7 - (x & 7));
>>>> +                plane3[x >>> 3] |= ((index & 8) >> 3) << (7 - (x & 7));
>>>> +            }
>>>> +            rleWriter.write(bos, plane0);
>>>> +            rleWriter.write(bos, plane1);
>>>> +            rleWriter.write(bos, plane2);
>>>> +            rleWriter.write(bos, plane3);
>>>> +        }
>>>> +        rleWriter.flush(bos);
>>>> +    }
>>>> 
>>>>   private void write256ColorPCX(final BufferedImage src, final
>>> SimplePalette palette,
>>>>           final BinaryOutputStream bos) throws ImageWriteException,
>>> IOException {
>>>> 
>>>> 
>>> 
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>>> For additional commands, e-mail: dev-help@commons.apache.org
>>> 
>>> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: svn commit: r1781785 - in /commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx: PcxConstants.java PcxWriter.java

Posted by Gary Gregory <ga...@gmail.com>.
An alternative would be to have a 0.98 now as a milestone and say that big
changes are coming next in a 1.0 beta 1.

Gary

On Feb 5, 2017 9:55 AM, "Benedikt Ritter" <br...@apache.org> wrote:

Hello Damjan,

> Am 05.02.2017 um 18:53 schrieb Damjan Jovanovic <da...@apache.org>:
>
> Thank you.
>
> I have tons of changes I want to make, many of them large and affecting
the
> API. If we have to make a release soon, maybe a 0.98 would be better?

Let’s change the API now and then push the release. Let us know how we can
help with the development. There may be people out there willing to
contribute to the project.

Regards,
Benedikt

>
> Regards
> Damjan
>
> On Sun, Feb 5, 2017 at 7:09 PM, Benedikt Ritter <br...@apache.org>
wrote:
>
>> Hi Damjan,
>>
>> It’s nice to see some activity in IMAGING again. Do you think the code
>> base is ready for an RC? I’d like to finally push out a release of this
>> component.
>>
>> Regards,
>> Benedikt
>>
>>> Am 05.02.2017 um 18:07 schrieb damjan@apache.org:
>>>
>>> Author: damjan
>>> Date: Sun Feb  5 17:07:51 2017
>>> New Revision: 1781785
>>>
>>> URL: http://svn.apache.org/viewvc?rev=1781785&view=rev
>>> Log:
>>> Allow giving PCX a hint as to the number of planes to use, and by
>> default,
>>> write 16 color images using 4 planes of 1 bit instead of 1 plane of 4
>> bits,
>>> as GIMP and Apache OpenOffice support the former but not the latter.
>>>
>>> Patch by: me
>>>
>>> Modified:
>>>   commons/proper/imaging/trunk/src/main/java/org/apache/
>> commons/imaging/formats/pcx/PcxConstants.java
>>>   commons/proper/imaging/trunk/src/main/java/org/apache/
>> commons/imaging/formats/pcx/PcxWriter.java
>>>
>>> Modified: commons/proper/imaging/trunk/src/main/java/org/apache/
>> commons/imaging/formats/pcx/PcxConstants.java
>>> URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/
>> src/main/java/org/apache/commons/imaging/formats/pcx/
>> PcxConstants.java?rev=1781785&r1=1781784&r2=1781785&view=diff
>>> ============================================================
>> ==================
>>> --- commons/proper/imaging/trunk/src/main/java/org/apache/
>> commons/imaging/formats/pcx/PcxConstants.java (original)
>>> +++ commons/proper/imaging/trunk/src/main/java/org/apache/
>> commons/imaging/formats/pcx/PcxConstants.java Sun Feb  5 17:07:51 2017
>>> @@ -22,6 +22,8 @@ public final class PcxConstants {
>>>
>>>    public static final String PARAM_KEY_PCX_BIT_DEPTH = "PCX_BIT_DEPTH";
>>>
>>> +    public static final String PARAM_KEY_PCX_PLANES = "PCX_PLANES";
>>> +
>>>    private PcxConstants() {
>>>    }
>>> }
>>>
>>> Modified: commons/proper/imaging/trunk/src/main/java/org/apache/
>> commons/imaging/formats/pcx/PcxWriter.java
>>> URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/
>> src/main/java/org/apache/commons/imaging/formats/pcx/
>> PcxWriter.java?rev=1781785&r1=1781784&r2=1781785&view=diff
>>> ============================================================
>> ==================
>>> --- commons/proper/imaging/trunk/src/main/java/org/apache/
>> commons/imaging/formats/pcx/PcxWriter.java (original)
>>> +++ commons/proper/imaging/trunk/src/main/java/org/apache/
>> commons/imaging/formats/pcx/PcxWriter.java Sun Feb  5 17:07:51 2017
>>> @@ -33,6 +33,7 @@ import org.apache.commons.imaging.palett
>>> class PcxWriter {
>>>    private int encoding;
>>>    private int bitDepth = -1;
>>> +    private int planes = -1;
>>>    private PixelDensity pixelDensity;
>>>    private final RleWriter rleWriter;
>>>
>>> @@ -77,6 +78,17 @@ class PcxWriter {
>>>                bitDepth = ((Number) value).intValue();
>>>            }
>>>        }
>>> +
>>> +        if (params.containsKey(PcxConstants.PARAM_KEY_PCX_PLANES)) {
>>> +            final Object value = params.remove(PcxConstants.
>> PARAM_KEY_PCX_PLANES);
>>> +            if (value != null) {
>>> +                if (!(value instanceof Number)) {
>>> +                    throw new ImageWriteException(
>>> +                            "Invalid planes parameter: " + value);
>>> +                }
>>> +                planes = ((Number) value).intValue();
>>> +            }
>>> +        }
>>>
>>>        if (params.containsKey(ImagingConstants.PARAM_KEY_PIXEL_DENSITY))
>> {
>>>            final Object value = params.remove(
>> ImagingConstants.PARAM_KEY_PIXEL_DENSITY);
>>> @@ -114,7 +126,11 @@ class PcxWriter {
>>>        } else if (palette.length() > 16 || bitDepth == 8) {
>>>            write256ColorPCX(src, palette, bos);
>>>        } else if (palette.length() > 2 || bitDepth == 4) {
>>> -            write16ColorPCX(src, palette, bos);
>>> +            if (planes == 1) {
>>> +                write16ColorPCXIn1Plane(src, palette, bos);
>>> +            } else {
>>> +                write16ColorPCXIn4Planes(src, palette, bos);
>>> +            }
>>>        } else {
>>>            boolean onlyBlackAndWhite = true;
>>>            if (palette.length() >= 1) {
>>> @@ -132,7 +148,11 @@ class PcxWriter {
>>>            if (onlyBlackAndWhite) {
>>>                writeBlackAndWhitePCX(src, bos);
>>>            } else {
>>> -                write16ColorPCX(src, palette, bos);
>>> +                if (planes == 1) {
>>> +                    write16ColorPCXIn1Plane(src, palette, bos);
>>> +                } else {
>>> +                    write16ColorPCXIn4Planes(src, palette, bos);
>>> +                }
>>>            }
>>>        }
>>>    }
>>> @@ -264,7 +284,7 @@ class PcxWriter {
>>>        rleWriter.flush(bos);
>>>    }
>>>
>>> -    private void write16ColorPCX(final BufferedImage src, final
>> SimplePalette palette,
>>> +    private void write16ColorPCXIn1Plane(final BufferedImage src, final
>> SimplePalette palette,
>>>            final BinaryOutputStream bos) throws ImageWriteException,
>> IOException {
>>>        int bytesPerLine = (src.getWidth() + 1) / 2;
>>>        if (bytesPerLine % 2 != 0) {
>>> @@ -316,6 +336,71 @@ class PcxWriter {
>>>        }
>>>        rleWriter.flush(bos);
>>>    }
>>> +
>>> +    private void write16ColorPCXIn4Planes(final BufferedImage src,
>> final SimplePalette palette,
>>> +            final BinaryOutputStream bos) throws ImageWriteException,
>> IOException {
>>> +        int bytesPerLine = (src.getWidth() + 7) / 8;
>>> +        if (bytesPerLine % 2 != 0) {
>>> +            ++bytesPerLine;
>>> +        }
>>> +
>>> +        final byte[] palette16 = new byte[16 * 3];
>>> +        for (int i = 0; i < 16; i++) {
>>> +            int rgb;
>>> +            if (i < palette.length()) {
>>> +                rgb = palette.getEntry(i);
>>> +            } else {
>>> +                rgb = 0;
>>> +            }
>>> +            palette16[3 * i + 0] = (byte) (0xff & (rgb >> 16));
>>> +            palette16[3 * i + 1] = (byte) (0xff & (rgb >> 8));
>>> +            palette16[3 * i + 2] = (byte) (0xff & rgb);
>>> +        }
>>> +
>>> +        // PCX header
>>> +        bos.write(10); // manufacturer
>>> +        bos.write(5); // version
>>> +        bos.write(encoding); // encoding
>>> +        bos.write(1); // bits per pixel
>>> +        bos.write2Bytes(0); // xMin
>>> +        bos.write2Bytes(0); // yMin
>>> +        bos.write2Bytes(src.getWidth() - 1); // xMax
>>> +        bos.write2Bytes(src.getHeight() - 1); // yMax
>>> +        bos.write2Bytes((short) Math.round(pixelDensity.
horizontalDensityInches()));
>> // hDpi
>>> +        bos.write2Bytes((short) Math.round(pixelDensity.
verticalDensityInches()));
>> // vDpi
>>> +        bos.write(palette16); // 16 color palette
>>> +        bos.write(0); // reserved
>>> +        bos.write(4); // planes
>>> +        bos.write2Bytes(bytesPerLine); // bytes per line
>>> +        bos.write2Bytes(1); // palette info
>>> +        bos.write2Bytes(0); // hScreenSize
>>> +        bos.write2Bytes(0); // vScreenSize
>>> +        bos.write(new byte[54]);
>>> +
>>> +        final byte[] plane0 = new byte[bytesPerLine];
>>> +        final byte[] plane1 = new byte[bytesPerLine];
>>> +        final byte[] plane2 = new byte[bytesPerLine];
>>> +        final byte[] plane3 = new byte[bytesPerLine];
>>> +        for (int y = 0; y < src.getHeight(); y++) {
>>> +            Arrays.fill(plane0, (byte)0);
>>> +            Arrays.fill(plane1, (byte)0);
>>> +            Arrays.fill(plane2, (byte)0);
>>> +            Arrays.fill(plane3, (byte)0);
>>> +            for (int x = 0; x < src.getWidth(); x++) {
>>> +                final int argb = src.getRGB(x, y);
>>> +                final int index = palette.getPaletteIndex(0xffffff &
>> argb);
>>> +                plane0[x >>> 3] |= (index & 1) << (7 - (x & 7));
>>> +                plane1[x >>> 3] |= ((index & 2) >> 1) << (7 - (x & 7));
>>> +                plane2[x >>> 3] |= ((index & 4) >> 2) << (7 - (x & 7));
>>> +                plane3[x >>> 3] |= ((index & 8) >> 3) << (7 - (x & 7));
>>> +            }
>>> +            rleWriter.write(bos, plane0);
>>> +            rleWriter.write(bos, plane1);
>>> +            rleWriter.write(bos, plane2);
>>> +            rleWriter.write(bos, plane3);
>>> +        }
>>> +        rleWriter.flush(bos);
>>> +    }
>>>
>>>    private void write256ColorPCX(final BufferedImage src, final
>> SimplePalette palette,
>>>            final BinaryOutputStream bos) throws ImageWriteException,
>> IOException {
>>>
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>> For additional commands, e-mail: dev-help@commons.apache.org
>>
>>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org

Re: svn commit: r1781785 - in /commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx: PcxConstants.java PcxWriter.java

Posted by Benedikt Ritter <br...@apache.org>.
Hello Damjan,

> Am 05.02.2017 um 18:53 schrieb Damjan Jovanovic <da...@apache.org>:
> 
> Thank you.
> 
> I have tons of changes I want to make, many of them large and affecting the
> API. If we have to make a release soon, maybe a 0.98 would be better?

Let’s change the API now and then push the release. Let us know how we can help with the development. There may be people out there willing to contribute to the project.

Regards,
Benedikt

> 
> Regards
> Damjan
> 
> On Sun, Feb 5, 2017 at 7:09 PM, Benedikt Ritter <br...@apache.org> wrote:
> 
>> Hi Damjan,
>> 
>> It’s nice to see some activity in IMAGING again. Do you think the code
>> base is ready for an RC? I’d like to finally push out a release of this
>> component.
>> 
>> Regards,
>> Benedikt
>> 
>>> Am 05.02.2017 um 18:07 schrieb damjan@apache.org:
>>> 
>>> Author: damjan
>>> Date: Sun Feb  5 17:07:51 2017
>>> New Revision: 1781785
>>> 
>>> URL: http://svn.apache.org/viewvc?rev=1781785&view=rev
>>> Log:
>>> Allow giving PCX a hint as to the number of planes to use, and by
>> default,
>>> write 16 color images using 4 planes of 1 bit instead of 1 plane of 4
>> bits,
>>> as GIMP and Apache OpenOffice support the former but not the latter.
>>> 
>>> Patch by: me
>>> 
>>> Modified:
>>>   commons/proper/imaging/trunk/src/main/java/org/apache/
>> commons/imaging/formats/pcx/PcxConstants.java
>>>   commons/proper/imaging/trunk/src/main/java/org/apache/
>> commons/imaging/formats/pcx/PcxWriter.java
>>> 
>>> Modified: commons/proper/imaging/trunk/src/main/java/org/apache/
>> commons/imaging/formats/pcx/PcxConstants.java
>>> URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/
>> src/main/java/org/apache/commons/imaging/formats/pcx/
>> PcxConstants.java?rev=1781785&r1=1781784&r2=1781785&view=diff
>>> ============================================================
>> ==================
>>> --- commons/proper/imaging/trunk/src/main/java/org/apache/
>> commons/imaging/formats/pcx/PcxConstants.java (original)
>>> +++ commons/proper/imaging/trunk/src/main/java/org/apache/
>> commons/imaging/formats/pcx/PcxConstants.java Sun Feb  5 17:07:51 2017
>>> @@ -22,6 +22,8 @@ public final class PcxConstants {
>>> 
>>>    public static final String PARAM_KEY_PCX_BIT_DEPTH = "PCX_BIT_DEPTH";
>>> 
>>> +    public static final String PARAM_KEY_PCX_PLANES = "PCX_PLANES";
>>> +
>>>    private PcxConstants() {
>>>    }
>>> }
>>> 
>>> Modified: commons/proper/imaging/trunk/src/main/java/org/apache/
>> commons/imaging/formats/pcx/PcxWriter.java
>>> URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/
>> src/main/java/org/apache/commons/imaging/formats/pcx/
>> PcxWriter.java?rev=1781785&r1=1781784&r2=1781785&view=diff
>>> ============================================================
>> ==================
>>> --- commons/proper/imaging/trunk/src/main/java/org/apache/
>> commons/imaging/formats/pcx/PcxWriter.java (original)
>>> +++ commons/proper/imaging/trunk/src/main/java/org/apache/
>> commons/imaging/formats/pcx/PcxWriter.java Sun Feb  5 17:07:51 2017
>>> @@ -33,6 +33,7 @@ import org.apache.commons.imaging.palett
>>> class PcxWriter {
>>>    private int encoding;
>>>    private int bitDepth = -1;
>>> +    private int planes = -1;
>>>    private PixelDensity pixelDensity;
>>>    private final RleWriter rleWriter;
>>> 
>>> @@ -77,6 +78,17 @@ class PcxWriter {
>>>                bitDepth = ((Number) value).intValue();
>>>            }
>>>        }
>>> +
>>> +        if (params.containsKey(PcxConstants.PARAM_KEY_PCX_PLANES)) {
>>> +            final Object value = params.remove(PcxConstants.
>> PARAM_KEY_PCX_PLANES);
>>> +            if (value != null) {
>>> +                if (!(value instanceof Number)) {
>>> +                    throw new ImageWriteException(
>>> +                            "Invalid planes parameter: " + value);
>>> +                }
>>> +                planes = ((Number) value).intValue();
>>> +            }
>>> +        }
>>> 
>>>        if (params.containsKey(ImagingConstants.PARAM_KEY_PIXEL_DENSITY))
>> {
>>>            final Object value = params.remove(
>> ImagingConstants.PARAM_KEY_PIXEL_DENSITY);
>>> @@ -114,7 +126,11 @@ class PcxWriter {
>>>        } else if (palette.length() > 16 || bitDepth == 8) {
>>>            write256ColorPCX(src, palette, bos);
>>>        } else if (palette.length() > 2 || bitDepth == 4) {
>>> -            write16ColorPCX(src, palette, bos);
>>> +            if (planes == 1) {
>>> +                write16ColorPCXIn1Plane(src, palette, bos);
>>> +            } else {
>>> +                write16ColorPCXIn4Planes(src, palette, bos);
>>> +            }
>>>        } else {
>>>            boolean onlyBlackAndWhite = true;
>>>            if (palette.length() >= 1) {
>>> @@ -132,7 +148,11 @@ class PcxWriter {
>>>            if (onlyBlackAndWhite) {
>>>                writeBlackAndWhitePCX(src, bos);
>>>            } else {
>>> -                write16ColorPCX(src, palette, bos);
>>> +                if (planes == 1) {
>>> +                    write16ColorPCXIn1Plane(src, palette, bos);
>>> +                } else {
>>> +                    write16ColorPCXIn4Planes(src, palette, bos);
>>> +                }
>>>            }
>>>        }
>>>    }
>>> @@ -264,7 +284,7 @@ class PcxWriter {
>>>        rleWriter.flush(bos);
>>>    }
>>> 
>>> -    private void write16ColorPCX(final BufferedImage src, final
>> SimplePalette palette,
>>> +    private void write16ColorPCXIn1Plane(final BufferedImage src, final
>> SimplePalette palette,
>>>            final BinaryOutputStream bos) throws ImageWriteException,
>> IOException {
>>>        int bytesPerLine = (src.getWidth() + 1) / 2;
>>>        if (bytesPerLine % 2 != 0) {
>>> @@ -316,6 +336,71 @@ class PcxWriter {
>>>        }
>>>        rleWriter.flush(bos);
>>>    }
>>> +
>>> +    private void write16ColorPCXIn4Planes(final BufferedImage src,
>> final SimplePalette palette,
>>> +            final BinaryOutputStream bos) throws ImageWriteException,
>> IOException {
>>> +        int bytesPerLine = (src.getWidth() + 7) / 8;
>>> +        if (bytesPerLine % 2 != 0) {
>>> +            ++bytesPerLine;
>>> +        }
>>> +
>>> +        final byte[] palette16 = new byte[16 * 3];
>>> +        for (int i = 0; i < 16; i++) {
>>> +            int rgb;
>>> +            if (i < palette.length()) {
>>> +                rgb = palette.getEntry(i);
>>> +            } else {
>>> +                rgb = 0;
>>> +            }
>>> +            palette16[3 * i + 0] = (byte) (0xff & (rgb >> 16));
>>> +            palette16[3 * i + 1] = (byte) (0xff & (rgb >> 8));
>>> +            palette16[3 * i + 2] = (byte) (0xff & rgb);
>>> +        }
>>> +
>>> +        // PCX header
>>> +        bos.write(10); // manufacturer
>>> +        bos.write(5); // version
>>> +        bos.write(encoding); // encoding
>>> +        bos.write(1); // bits per pixel
>>> +        bos.write2Bytes(0); // xMin
>>> +        bos.write2Bytes(0); // yMin
>>> +        bos.write2Bytes(src.getWidth() - 1); // xMax
>>> +        bos.write2Bytes(src.getHeight() - 1); // yMax
>>> +        bos.write2Bytes((short) Math.round(pixelDensity.horizontalDensityInches()));
>> // hDpi
>>> +        bos.write2Bytes((short) Math.round(pixelDensity.verticalDensityInches()));
>> // vDpi
>>> +        bos.write(palette16); // 16 color palette
>>> +        bos.write(0); // reserved
>>> +        bos.write(4); // planes
>>> +        bos.write2Bytes(bytesPerLine); // bytes per line
>>> +        bos.write2Bytes(1); // palette info
>>> +        bos.write2Bytes(0); // hScreenSize
>>> +        bos.write2Bytes(0); // vScreenSize
>>> +        bos.write(new byte[54]);
>>> +
>>> +        final byte[] plane0 = new byte[bytesPerLine];
>>> +        final byte[] plane1 = new byte[bytesPerLine];
>>> +        final byte[] plane2 = new byte[bytesPerLine];
>>> +        final byte[] plane3 = new byte[bytesPerLine];
>>> +        for (int y = 0; y < src.getHeight(); y++) {
>>> +            Arrays.fill(plane0, (byte)0);
>>> +            Arrays.fill(plane1, (byte)0);
>>> +            Arrays.fill(plane2, (byte)0);
>>> +            Arrays.fill(plane3, (byte)0);
>>> +            for (int x = 0; x < src.getWidth(); x++) {
>>> +                final int argb = src.getRGB(x, y);
>>> +                final int index = palette.getPaletteIndex(0xffffff &
>> argb);
>>> +                plane0[x >>> 3] |= (index & 1) << (7 - (x & 7));
>>> +                plane1[x >>> 3] |= ((index & 2) >> 1) << (7 - (x & 7));
>>> +                plane2[x >>> 3] |= ((index & 4) >> 2) << (7 - (x & 7));
>>> +                plane3[x >>> 3] |= ((index & 8) >> 3) << (7 - (x & 7));
>>> +            }
>>> +            rleWriter.write(bos, plane0);
>>> +            rleWriter.write(bos, plane1);
>>> +            rleWriter.write(bos, plane2);
>>> +            rleWriter.write(bos, plane3);
>>> +        }
>>> +        rleWriter.flush(bos);
>>> +    }
>>> 
>>>    private void write256ColorPCX(final BufferedImage src, final
>> SimplePalette palette,
>>>            final BinaryOutputStream bos) throws ImageWriteException,
>> IOException {
>>> 
>>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>> For additional commands, e-mail: dev-help@commons.apache.org
>> 
>> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: svn commit: r1781785 - in /commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx: PcxConstants.java PcxWriter.java

Posted by Damjan Jovanovic <da...@apache.org>.
Thank you.

I have tons of changes I want to make, many of them large and affecting the
API. If we have to make a release soon, maybe a 0.98 would be better?

Regards
Damjan

On Sun, Feb 5, 2017 at 7:09 PM, Benedikt Ritter <br...@apache.org> wrote:

> Hi Damjan,
>
> It’s nice to see some activity in IMAGING again. Do you think the code
> base is ready for an RC? I’d like to finally push out a release of this
> component.
>
> Regards,
> Benedikt
>
> > Am 05.02.2017 um 18:07 schrieb damjan@apache.org:
> >
> > Author: damjan
> > Date: Sun Feb  5 17:07:51 2017
> > New Revision: 1781785
> >
> > URL: http://svn.apache.org/viewvc?rev=1781785&view=rev
> > Log:
> > Allow giving PCX a hint as to the number of planes to use, and by
> default,
> > write 16 color images using 4 planes of 1 bit instead of 1 plane of 4
> bits,
> > as GIMP and Apache OpenOffice support the former but not the latter.
> >
> > Patch by: me
> >
> > Modified:
> >    commons/proper/imaging/trunk/src/main/java/org/apache/
> commons/imaging/formats/pcx/PcxConstants.java
> >    commons/proper/imaging/trunk/src/main/java/org/apache/
> commons/imaging/formats/pcx/PcxWriter.java
> >
> > Modified: commons/proper/imaging/trunk/src/main/java/org/apache/
> commons/imaging/formats/pcx/PcxConstants.java
> > URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/
> src/main/java/org/apache/commons/imaging/formats/pcx/
> PcxConstants.java?rev=1781785&r1=1781784&r2=1781785&view=diff
> > ============================================================
> ==================
> > --- commons/proper/imaging/trunk/src/main/java/org/apache/
> commons/imaging/formats/pcx/PcxConstants.java (original)
> > +++ commons/proper/imaging/trunk/src/main/java/org/apache/
> commons/imaging/formats/pcx/PcxConstants.java Sun Feb  5 17:07:51 2017
> > @@ -22,6 +22,8 @@ public final class PcxConstants {
> >
> >     public static final String PARAM_KEY_PCX_BIT_DEPTH = "PCX_BIT_DEPTH";
> >
> > +    public static final String PARAM_KEY_PCX_PLANES = "PCX_PLANES";
> > +
> >     private PcxConstants() {
> >     }
> > }
> >
> > Modified: commons/proper/imaging/trunk/src/main/java/org/apache/
> commons/imaging/formats/pcx/PcxWriter.java
> > URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/
> src/main/java/org/apache/commons/imaging/formats/pcx/
> PcxWriter.java?rev=1781785&r1=1781784&r2=1781785&view=diff
> > ============================================================
> ==================
> > --- commons/proper/imaging/trunk/src/main/java/org/apache/
> commons/imaging/formats/pcx/PcxWriter.java (original)
> > +++ commons/proper/imaging/trunk/src/main/java/org/apache/
> commons/imaging/formats/pcx/PcxWriter.java Sun Feb  5 17:07:51 2017
> > @@ -33,6 +33,7 @@ import org.apache.commons.imaging.palett
> > class PcxWriter {
> >     private int encoding;
> >     private int bitDepth = -1;
> > +    private int planes = -1;
> >     private PixelDensity pixelDensity;
> >     private final RleWriter rleWriter;
> >
> > @@ -77,6 +78,17 @@ class PcxWriter {
> >                 bitDepth = ((Number) value).intValue();
> >             }
> >         }
> > +
> > +        if (params.containsKey(PcxConstants.PARAM_KEY_PCX_PLANES)) {
> > +            final Object value = params.remove(PcxConstants.
> PARAM_KEY_PCX_PLANES);
> > +            if (value != null) {
> > +                if (!(value instanceof Number)) {
> > +                    throw new ImageWriteException(
> > +                            "Invalid planes parameter: " + value);
> > +                }
> > +                planes = ((Number) value).intValue();
> > +            }
> > +        }
> >
> >         if (params.containsKey(ImagingConstants.PARAM_KEY_PIXEL_DENSITY))
> {
> >             final Object value = params.remove(
> ImagingConstants.PARAM_KEY_PIXEL_DENSITY);
> > @@ -114,7 +126,11 @@ class PcxWriter {
> >         } else if (palette.length() > 16 || bitDepth == 8) {
> >             write256ColorPCX(src, palette, bos);
> >         } else if (palette.length() > 2 || bitDepth == 4) {
> > -            write16ColorPCX(src, palette, bos);
> > +            if (planes == 1) {
> > +                write16ColorPCXIn1Plane(src, palette, bos);
> > +            } else {
> > +                write16ColorPCXIn4Planes(src, palette, bos);
> > +            }
> >         } else {
> >             boolean onlyBlackAndWhite = true;
> >             if (palette.length() >= 1) {
> > @@ -132,7 +148,11 @@ class PcxWriter {
> >             if (onlyBlackAndWhite) {
> >                 writeBlackAndWhitePCX(src, bos);
> >             } else {
> > -                write16ColorPCX(src, palette, bos);
> > +                if (planes == 1) {
> > +                    write16ColorPCXIn1Plane(src, palette, bos);
> > +                } else {
> > +                    write16ColorPCXIn4Planes(src, palette, bos);
> > +                }
> >             }
> >         }
> >     }
> > @@ -264,7 +284,7 @@ class PcxWriter {
> >         rleWriter.flush(bos);
> >     }
> >
> > -    private void write16ColorPCX(final BufferedImage src, final
> SimplePalette palette,
> > +    private void write16ColorPCXIn1Plane(final BufferedImage src, final
> SimplePalette palette,
> >             final BinaryOutputStream bos) throws ImageWriteException,
> IOException {
> >         int bytesPerLine = (src.getWidth() + 1) / 2;
> >         if (bytesPerLine % 2 != 0) {
> > @@ -316,6 +336,71 @@ class PcxWriter {
> >         }
> >         rleWriter.flush(bos);
> >     }
> > +
> > +    private void write16ColorPCXIn4Planes(final BufferedImage src,
> final SimplePalette palette,
> > +            final BinaryOutputStream bos) throws ImageWriteException,
> IOException {
> > +        int bytesPerLine = (src.getWidth() + 7) / 8;
> > +        if (bytesPerLine % 2 != 0) {
> > +            ++bytesPerLine;
> > +        }
> > +
> > +        final byte[] palette16 = new byte[16 * 3];
> > +        for (int i = 0; i < 16; i++) {
> > +            int rgb;
> > +            if (i < palette.length()) {
> > +                rgb = palette.getEntry(i);
> > +            } else {
> > +                rgb = 0;
> > +            }
> > +            palette16[3 * i + 0] = (byte) (0xff & (rgb >> 16));
> > +            palette16[3 * i + 1] = (byte) (0xff & (rgb >> 8));
> > +            palette16[3 * i + 2] = (byte) (0xff & rgb);
> > +        }
> > +
> > +        // PCX header
> > +        bos.write(10); // manufacturer
> > +        bos.write(5); // version
> > +        bos.write(encoding); // encoding
> > +        bos.write(1); // bits per pixel
> > +        bos.write2Bytes(0); // xMin
> > +        bos.write2Bytes(0); // yMin
> > +        bos.write2Bytes(src.getWidth() - 1); // xMax
> > +        bos.write2Bytes(src.getHeight() - 1); // yMax
> > +        bos.write2Bytes((short) Math.round(pixelDensity.horizontalDensityInches()));
> // hDpi
> > +        bos.write2Bytes((short) Math.round(pixelDensity.verticalDensityInches()));
> // vDpi
> > +        bos.write(palette16); // 16 color palette
> > +        bos.write(0); // reserved
> > +        bos.write(4); // planes
> > +        bos.write2Bytes(bytesPerLine); // bytes per line
> > +        bos.write2Bytes(1); // palette info
> > +        bos.write2Bytes(0); // hScreenSize
> > +        bos.write2Bytes(0); // vScreenSize
> > +        bos.write(new byte[54]);
> > +
> > +        final byte[] plane0 = new byte[bytesPerLine];
> > +        final byte[] plane1 = new byte[bytesPerLine];
> > +        final byte[] plane2 = new byte[bytesPerLine];
> > +        final byte[] plane3 = new byte[bytesPerLine];
> > +        for (int y = 0; y < src.getHeight(); y++) {
> > +            Arrays.fill(plane0, (byte)0);
> > +            Arrays.fill(plane1, (byte)0);
> > +            Arrays.fill(plane2, (byte)0);
> > +            Arrays.fill(plane3, (byte)0);
> > +            for (int x = 0; x < src.getWidth(); x++) {
> > +                final int argb = src.getRGB(x, y);
> > +                final int index = palette.getPaletteIndex(0xffffff &
> argb);
> > +                plane0[x >>> 3] |= (index & 1) << (7 - (x & 7));
> > +                plane1[x >>> 3] |= ((index & 2) >> 1) << (7 - (x & 7));
> > +                plane2[x >>> 3] |= ((index & 4) >> 2) << (7 - (x & 7));
> > +                plane3[x >>> 3] |= ((index & 8) >> 3) << (7 - (x & 7));
> > +            }
> > +            rleWriter.write(bos, plane0);
> > +            rleWriter.write(bos, plane1);
> > +            rleWriter.write(bos, plane2);
> > +            rleWriter.write(bos, plane3);
> > +        }
> > +        rleWriter.flush(bos);
> > +    }
> >
> >     private void write256ColorPCX(final BufferedImage src, final
> SimplePalette palette,
> >             final BinaryOutputStream bos) throws ImageWriteException,
> IOException {
> >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
>
>

Re: svn commit: r1781785 - in /commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx: PcxConstants.java PcxWriter.java

Posted by Benedikt Ritter <br...@apache.org>.
Hi Damjan,

It’s nice to see some activity in IMAGING again. Do you think the code base is ready for an RC? I’d like to finally push out a release of this component.

Regards,
Benedikt

> Am 05.02.2017 um 18:07 schrieb damjan@apache.org:
> 
> Author: damjan
> Date: Sun Feb  5 17:07:51 2017
> New Revision: 1781785
> 
> URL: http://svn.apache.org/viewvc?rev=1781785&view=rev
> Log:
> Allow giving PCX a hint as to the number of planes to use, and by default,
> write 16 color images using 4 planes of 1 bit instead of 1 plane of 4 bits,
> as GIMP and Apache OpenOffice support the former but not the latter.
> 
> Patch by: me
> 
> Modified:
>    commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx/PcxConstants.java
>    commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx/PcxWriter.java
> 
> Modified: commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx/PcxConstants.java
> URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx/PcxConstants.java?rev=1781785&r1=1781784&r2=1781785&view=diff
> ==============================================================================
> --- commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx/PcxConstants.java (original)
> +++ commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx/PcxConstants.java Sun Feb  5 17:07:51 2017
> @@ -22,6 +22,8 @@ public final class PcxConstants {
> 
>     public static final String PARAM_KEY_PCX_BIT_DEPTH = "PCX_BIT_DEPTH";
> 
> +    public static final String PARAM_KEY_PCX_PLANES = "PCX_PLANES";
> +    
>     private PcxConstants() {
>     }
> }
> 
> Modified: commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx/PcxWriter.java
> URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx/PcxWriter.java?rev=1781785&r1=1781784&r2=1781785&view=diff
> ==============================================================================
> --- commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx/PcxWriter.java (original)
> +++ commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pcx/PcxWriter.java Sun Feb  5 17:07:51 2017
> @@ -33,6 +33,7 @@ import org.apache.commons.imaging.palett
> class PcxWriter {
>     private int encoding;
>     private int bitDepth = -1;
> +    private int planes = -1;
>     private PixelDensity pixelDensity;
>     private final RleWriter rleWriter;
> 
> @@ -77,6 +78,17 @@ class PcxWriter {
>                 bitDepth = ((Number) value).intValue();
>             }
>         }
> +        
> +        if (params.containsKey(PcxConstants.PARAM_KEY_PCX_PLANES)) {
> +            final Object value = params.remove(PcxConstants.PARAM_KEY_PCX_PLANES);
> +            if (value != null) {
> +                if (!(value instanceof Number)) {
> +                    throw new ImageWriteException(
> +                            "Invalid planes parameter: " + value);
> +                }
> +                planes = ((Number) value).intValue();
> +            }
> +        }
> 
>         if (params.containsKey(ImagingConstants.PARAM_KEY_PIXEL_DENSITY)) {
>             final Object value = params.remove(ImagingConstants.PARAM_KEY_PIXEL_DENSITY);
> @@ -114,7 +126,11 @@ class PcxWriter {
>         } else if (palette.length() > 16 || bitDepth == 8) {
>             write256ColorPCX(src, palette, bos);
>         } else if (palette.length() > 2 || bitDepth == 4) {
> -            write16ColorPCX(src, palette, bos);
> +            if (planes == 1) {
> +                write16ColorPCXIn1Plane(src, palette, bos);
> +            } else {
> +                write16ColorPCXIn4Planes(src, palette, bos);
> +            }
>         } else {
>             boolean onlyBlackAndWhite = true;
>             if (palette.length() >= 1) {
> @@ -132,7 +148,11 @@ class PcxWriter {
>             if (onlyBlackAndWhite) {
>                 writeBlackAndWhitePCX(src, bos);
>             } else {
> -                write16ColorPCX(src, palette, bos);
> +                if (planes == 1) {
> +                    write16ColorPCXIn1Plane(src, palette, bos);
> +                } else {
> +                    write16ColorPCXIn4Planes(src, palette, bos);
> +                }
>             }
>         }
>     }
> @@ -264,7 +284,7 @@ class PcxWriter {
>         rleWriter.flush(bos);
>     }
> 
> -    private void write16ColorPCX(final BufferedImage src, final SimplePalette palette,
> +    private void write16ColorPCXIn1Plane(final BufferedImage src, final SimplePalette palette,
>             final BinaryOutputStream bos) throws ImageWriteException, IOException {
>         int bytesPerLine = (src.getWidth() + 1) / 2;
>         if (bytesPerLine % 2 != 0) {
> @@ -316,6 +336,71 @@ class PcxWriter {
>         }
>         rleWriter.flush(bos);
>     }
> +
> +    private void write16ColorPCXIn4Planes(final BufferedImage src, final SimplePalette palette,
> +            final BinaryOutputStream bos) throws ImageWriteException, IOException {
> +        int bytesPerLine = (src.getWidth() + 7) / 8;
> +        if (bytesPerLine % 2 != 0) {
> +            ++bytesPerLine;
> +        }
> +
> +        final byte[] palette16 = new byte[16 * 3];
> +        for (int i = 0; i < 16; i++) {
> +            int rgb;
> +            if (i < palette.length()) {
> +                rgb = palette.getEntry(i);
> +            } else {
> +                rgb = 0;
> +            }
> +            palette16[3 * i + 0] = (byte) (0xff & (rgb >> 16));
> +            palette16[3 * i + 1] = (byte) (0xff & (rgb >> 8));
> +            palette16[3 * i + 2] = (byte) (0xff & rgb);
> +        }
> +
> +        // PCX header
> +        bos.write(10); // manufacturer
> +        bos.write(5); // version
> +        bos.write(encoding); // encoding
> +        bos.write(1); // bits per pixel
> +        bos.write2Bytes(0); // xMin
> +        bos.write2Bytes(0); // yMin
> +        bos.write2Bytes(src.getWidth() - 1); // xMax
> +        bos.write2Bytes(src.getHeight() - 1); // yMax
> +        bos.write2Bytes((short) Math.round(pixelDensity.horizontalDensityInches())); // hDpi
> +        bos.write2Bytes((short) Math.round(pixelDensity.verticalDensityInches())); // vDpi
> +        bos.write(palette16); // 16 color palette
> +        bos.write(0); // reserved
> +        bos.write(4); // planes
> +        bos.write2Bytes(bytesPerLine); // bytes per line
> +        bos.write2Bytes(1); // palette info
> +        bos.write2Bytes(0); // hScreenSize
> +        bos.write2Bytes(0); // vScreenSize
> +        bos.write(new byte[54]);
> +
> +        final byte[] plane0 = new byte[bytesPerLine];
> +        final byte[] plane1 = new byte[bytesPerLine];
> +        final byte[] plane2 = new byte[bytesPerLine];
> +        final byte[] plane3 = new byte[bytesPerLine];
> +        for (int y = 0; y < src.getHeight(); y++) {
> +            Arrays.fill(plane0, (byte)0);
> +            Arrays.fill(plane1, (byte)0);
> +            Arrays.fill(plane2, (byte)0);
> +            Arrays.fill(plane3, (byte)0);
> +            for (int x = 0; x < src.getWidth(); x++) {
> +                final int argb = src.getRGB(x, y);
> +                final int index = palette.getPaletteIndex(0xffffff & argb);
> +                plane0[x >>> 3] |= (index & 1) << (7 - (x & 7));
> +                plane1[x >>> 3] |= ((index & 2) >> 1) << (7 - (x & 7));
> +                plane2[x >>> 3] |= ((index & 4) >> 2) << (7 - (x & 7));
> +                plane3[x >>> 3] |= ((index & 8) >> 3) << (7 - (x & 7));
> +            }
> +            rleWriter.write(bos, plane0);
> +            rleWriter.write(bos, plane1);
> +            rleWriter.write(bos, plane2);
> +            rleWriter.write(bos, plane3);
> +        }
> +        rleWriter.flush(bos);
> +    }
> 
>     private void write256ColorPCX(final BufferedImage src, final SimplePalette palette,
>             final BinaryOutputStream bos) throws ImageWriteException, IOException {
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org