<?xml version="1.0"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->

<!--
This file is used by the maven-changes-plugin to generate the release notes.
Useful ways of finding items to add to this file are:

1.  Add items when you fix a bug or add a feature (this makes the 
release process easy :-).

2.  Do a Jira search for tickets closed since the previous release.

3.  Use the report generated by the maven-changelog-plugin to see all
CVS commits.  Set the project.properties' maven.changelog.range 
property to the number of days since the last release.


To generate the release notes from this file:

mvn changes:announcement-generate -Prelease-notes [-Dchanges.version=nnn]

then tweak the source formatting if necessary and regenerate, then commit

The <action> type attribute can be add,update,fix,remove.
-->

<document>
  <properties>
    <title>Apache Commons Imaging Release Notes</title>
  </properties>
  <body>
    <release version="1.0-alpha3" date="2022-05-13" description="Third 1.0 alpha release">
      <action issue="IMAGING-330" dev="kinow" type="fix" due-to="Gary Lucas">
        Add PNG predictor to reduce output size.
      </action>
      <action issue="IMAGING-327" dev="kinow" type="fix" due-to="Gary Lucas">
        Change getExif name to getOutputSet.
      </action>
      <action issue="IMAGING-325" dev="kinow" type="fix" due-to="Jin Wang">
        Prevent OutOfMemoryError in BmpImageParser. This can happen when the color palette length is
        a large negative number.
      </action>
      <action issue="IMAGING-320" dev="kinow" type="fix" due-to="Gary Lucas">
        Read TIFFs with 32-bit samples.
      </action>
      <action issue="IMAGING-159" dev="kinow" type="fix" due-to="Bruno P. Kinoshita, Gary Lucas, Matt Juntunen">
        The Imaging ImageParser's used HashMap's before, but on this issue we replaced the maps by proper
        ImagingParameter classes, that encapsulate the parameters for each image format.

        The Imaging class also had the HashMap methods removed, but we also removed the public methods that
        supported parameters. This was due to the complexity to handle cases where users could provide a byte
        array, or file, and parameters. In Java, with or without generics, it was rather difficult to handle
        the cases where users could provide a PNG image stream with TIFF parameters.

        To prevent issues like this, we will improve the ImageParser's API's, and work on either providing
        other ways to customize and create parsers (factories, builders, etc.) or similar ways to use
        the Imaging entry class (like merging parameters or using parameter builders.)

        This was the last blocker issue of the 1.0 release vote, rolled a few years ago.
      </action>
      <action issue="IMAGING-168" dev="kinow" type="fix" due-to="Yavuz Kavus">
        Encoding Support for IPTC metadata.
      </action>
      <action issue="IMAGING-283" dev="kinow" type="add" due-to="Wanja Gayk">
        Add CIELAB and DIN99 conversion, reduce code duplication, and issues related to zero-division and precision.
      </action>
      <action issue="IMAGING-279" dev="kinow" type="fix">
        Array sizes not checked for overflow in BmpImageParser.
      </action>
      <action dev="kinow" type="update" due-to="Dependabot">
        Bump animal-sniffer-maven-plugin from 1.19 to 1.21 #120, #199.
      </action>
      <action dev="kinow" type="update" due-to="Dependabot">
        Bump maven-checkstyle-plugin from 3.1.1 to 3.1.2 #117.
      </action>
      <action dev="kinow" type="update" due-to="Dependabot">
        Bump spotbugs from 4.0.6 to 4.7.0 #111 #118 #123 #128 #156 #160 #167 #174 #185 #188 #191 #208 #218.
      </action>
      <action dev="kinow" type="update" due-to="Dependabot">
        Bump spotbugs-maven-plugin from 4.0.4 to 4.6.0.0 #111 #115 #125 #129 #157 #171 #176 #180 #186 #192 #211.
      </action>
      <action dev="kinow" type="update" due-to="Dependabot">
        Bump maven-pmd-plugin from 3.13.0 to 3.15.0 #109 #166.
      </action>
      <action issue="IMAGING-216" dev="kinow" type="add" due-to="Gary Lucas">
        Imaging.getBufferedImage() drops alpha layer for TIFF images.
      </action>
      <action issue="IMAGING-269" dev="kinow" type="add" due-to="Gary Lucas">
        Consolidate redundant methods in TIFF datareaders.
      </action>
      <action issue="IMAGING-268" dev="kinow" type="add" due-to="Gary Lucas">
        Add list of TIFF files and example survey application.
      </action>
      <action issue="IMAGING-265" dev="kinow" type="fix" due-to="Gary Lucas">
        ArrayIndexOutOfBoundsException on reading simple GeoTIFF.
      </action>
      <action dev="kinow" type="update" due-to="Dependabot">
        Bump actions/setup-java from v1.4.0 to v3 #92 #95 #101 #127 #213.
      </action>
      <action dev="kinow" type="update" due-to="Dependabot">
        Bump commons-io from 2.7 to 2.11.0 #96 #152 #153, #158.
      </action>
      <action dev="kinow" type="update" due-to="Dependabot">
        Bump junit-jupiter from 5.6.2 to 5.8.2 #97 #119 #151 #170 #172 #187.
      </action>
      <action dev="kinow" type="update" due-to="Dependabot">
        Bump actions/checkout from v2.3.2 to v3 #99 #107 #175 #181 #205.
      </action>
      <action issue="IMAGING-264" dev="kinow" type="fix">
        BMP Parser physicalWidthDpi and physicalHeightDpi truncated before rounding off.
      </action>
      <action issue="IMAGING-263" dev="kinow" type="fix" due-to="Gary Lucas">
        Failure when reading a partial raster from a floating-point TIFF
      </action>
      <action issue="IMAGING-291" dev="kinow" type="fix" due-to="Arturo Bernal">
        Fix typos
      </action>
      <action issue="IMAGING-289" dev="kinow" type="fix" due-to="Arturo Bernal">
        Fix javadoc
      </action>
      <action issue="IMAGING-290" dev="kinow" type="update" due-to="Arturo Bernal">
        Remove redundant local variable
      </action>
      <action issue="IMAGING-288" dev="kinow" type="update" due-to="Arturo Bernal">
        Java 8 improvements
      </action>
      <action issue="IMAGING-287" dev="kinow" type="update" due-to="Arturo Bernal">
        Simplify assertions in tests
      </action>
      <action issue="IMAGING-295" dev="kinow" type="update" due-to="Arturo Bernal">
        Use 'compare()' method to compare numbers
      </action>
      <action issue="IMAGING-294" dev="kinow" type="update" due-to="Arturo Bernal">
        Use java style array declaration
      </action>
      <action issue="IMAGING-298" dev="kinow" type="update" due-to="OSS-Fuzz">
        Throw ImageReadException if the PNG parser is given an image with invalid ICC Profile.
      </action>
      <action issue="IMAGING-300" dev="kinow" type="update" due-to="OSS-Fuzz">
        Throw ImageReadException if the GIF parser is given an image with invalid image data instead of throwing IndexOutOfBoundsException.
      </action>
      <action issue="IMAGING-301" dev="kinow" type="update" due-to="OSS-Fuzz">
        Throw ImageReadException if the GIF parser is given an image with invalid Lzw table instead of throwing IndexOutOfBoundsException.
      </action>
      <action issue="IMAGING-302" dev="kinow" type="update" due-to="OSS-Fuzz">
        Throw ImageReadException if the JPEG parser is given an image with a negative number of segments in SOF0Segment.
      </action>
      <action issue="IMAGING-304" dev="kinow" type="update" due-to="Arturo Bernal">
        Use Comparator combinator
      </action>
      <action issue="IMAGING-303" dev="kinow" type="update" due-to="Arturo Bernal">
        Simplify If-else conditions
      </action>
      <action issue="IMAGING-305" dev="kinow" type="update" due-to="Arturo Bernal">
        Replace Collections.sort with list.sort
      </action>
      <action issue="IMAGING-308" dev="kinow" type="fix" due-to="Gary Lucas">
        Fix IptcParserTest on Windows
      </action>
      <action issue="IMAGING-266" dev="kinow" type="fix" due-to="Gary Lucas">
        Read integer data from GeoTIFFS
      </action>
      <action issue="IMAGING-312" dev="kinow" type="fix" due-to="Gary Lucas">
        Corrected handling of ExtraSamples tag
      </action>
      <action issue="IMAGING-285" dev="kinow" type="fix" due-to="Gary Lucas">
        Decoding of Rational Numbers broken when large values present
      </action>
      <action issue="IMAGING-314" dev="kinow" type="fix" due-to="Gary Lucas">
        Update examples, add GeoTIFF metadata to output
      </action>
      <action issue="IMAGING-311" dev="kinow" type="fix" due-to="Gary Lucas">
        Read TIFFs with multiple floating-point sampless
      </action>
      <action issue="IMAGING-315" dev="kinow" type="update" due-to="Arturo Bernal">
        Remove redundant variables
      </action>
      <action issue="IMAGING-317" dev="kinow" type="fix" due-to="OSS-Fuzz">
        A PNG image using indexed color type but no PLTE chunks throws NPE.
      </action>
      <action issue="IMAGING-318" dev="kinow" type="fix" due-to="OSS-Fuzz">
        Validate when accessing GIF color table array.
      </action>
      <action dev="kinow" type="update" due-to="Dependabot">
        Bump github/codeql-action from 1 to 2 #216
      </action>
    </release>
    <release version="1.0-alpha2" date="2020-08-01" description="Second 1.0 alpha release">
      <action issue="IMAGING-258" dev="kinow" type="update" due-to="Gary Lucas">
        Prevent exception in TIFF when reading EXIF directory
      </action>
      <action issue="IMAGING-260" dev="kinow" type="update">
        Fix mvn site failure with JavaNCSS parse error
      </action>
      <action issue="IMAGING-259" dev="kinow" type="update" due-to="Gary Lucas">
        Enhance TIFF DataReaders speed for compressed RGB
      </action>
      <action issue="IMAGING-247" dev="kinow" type="fix" due-to="Gary Lucas">
        Fix crash when reading TIFF using PackBits
      </action>
      <action issue="IMAGING-251" dev="kinow" type="update" due-to="Gary Lucas">
        Support for TIFF floating-point formats
      </action>
      <action issue="IMAGING-254" dev="kinow" type="update">
        Small code improvements
      </action>
      <action issue="IMAGING-253" dev="kinow" type="update" due-to="David Hrbacek">
        ByteSourceInputStream has initialized its length when reading starts
      </action>
      <action issue="IMAGING-249" dev="kinow" type="update">
        Make IPTCBlock members private and add getter/setter
      </action>
      <action issue="IMAGING-248" dev="kinow" type="add" due-to="Greg Shrago">
        ICNS: missing element types; some safety checks
      </action>
      <action issue="IMAGING-246" dev="kinow" type="fix">
        Invalid Block Size error prevents handling of block 1084, Macintosh NSPrintInfo
      </action>
      <action issue="IMAGING-163" dev="kinow" type="fix">
        Add XmpEmbedabble interface to parsers that support it
      </action>
      <action issue="IMAGING-245" dev="kinow" type="add" due-to="Christoffer Rydberg">
        Add disposal method to GIF metadata
      </action>
      <action issue="IMAGING-146" dev="kinow" type="add">
        Add documentation for the color package
      </action>
      <action issue="IMAGING-244" dev="kinow" type="add">
        Use isEmpty instead of comparing size() with integers
      </action>
      <action issue="IMAGING-151" dev="kinow" type="fix">
        ColorGroup.color_counts is mutable public List and is multiply sorted
      </action>
      <action issue="IMAGING-243" dev="kinow" type="add" due-to="Andreas Menze">
        PNG Writer Indexed Color with semi-transparent Pixels and Better Compression
      </action>
      <action issue="IMAGING-242" dev="kinow" type="fix">
        Upgrade to JUnit 5
      </action>
      <action issue="IMAGING-241" dev="kinow" type="fix">
        Copy byte arrays fixing TODO markers
      </action>
      <action issue="IMAGING-136" dev="kinow" type="fix" due-to="Michael Groß">
        Imaging.getImageInfo() fails to read JPEG file
      </action>
      <action issue="IMAGING-238" dev="kinow" type="fix">
        Return copied byte arrays in Png Chunk and Png Chunk ICCP
      </action>
      <action issue="IMAGING-239" dev="kinow" type="add" due-to="Paul Austin">
        Add inflate (deflate algorithm) to TIFF files
      </action>
      <action issue="IMAGING-164" dev="kinow" type="add" due-to="Michael Groß">
        Simplify code in IcoImageParser::writeImage
      </action>
      <action issue="IMAGING-165" dev="kinow" type="add" due-to="Michael Groß">
        Add the fields from TiffReader.Collector to TiffContents
      </action>
      <action issue="IMAGING-230" dev="kinow" type="fix">
        Properly close resources with try-with-resources in T4AndT6Compression
      </action>
      <action issue="IMAGING-134" dev="kinow" type="fix" due-to="Michael Sommerville">
        Invalid (RST) marker found in entropy data
      </action>
      <action issue="IMAGING-130" dev="kinow" type="fix" due-to="Michael Sommerville">
        Reading of some GIF images throws java.io.IOException: AddStringToTable: codes: 4096 code_size: 12
      </action>
      <action issue="IMAGING-228" dev="kinow" type="add">
        Remove private method PhotometricInterpreterLogLuv#cube by Math.pow
      </action>
      <action issue="IMAGING-224" dev="kinow" type="fix">
        Fix build errors in Travis
      </action>
      <action issue="IMAGING-167" dev="kinow" type="fix" due-to="Michael Groß">
        Possible infinite loop at XpmImageParser::writeImage
      </action>
      <action issue="IMAGING-211" dev="kinow" type="fix">
      	Imaging.getBufferedImage fails throwing java.lang.ArrayIndexOutOfBoundsException for specific inputs
      </action>
      <action issue="IMAGING-210" dev="kinow" type="fix">
        Imaging.getBufferedImage fails throwing NegativeArraySizeException for specific inputs
      </action>
      <action issue="IMAGING-236" dev="kinow" type="add" due-to="Christoffer Rydberg">
        Add support to read multiple images from GIF
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Update tests from commons-io:commons-io 2.6 to 2.7.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot">
        Update commons-parent from 50 to 51 #88.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot">
        Update actions/checkout from v1 to v2.3.1 #87.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot">
        Update junit-jupiter from 5.5.2 to 5.6.2 #86.
      </action>
    </release>
    <release version="1.0-alpha1" date="2019-04-28" description="First 1.0 alpha release">
      <action issue="IMAGING-199" dev="kinow" type="fix" due-to="Ric Emery">
        All tEXt chunks are not returned from PngImageParser.getMetadata
      </action>
      <action issue="IMAGING-220" dev="kinow" type="fix">
        JpegDecoder takes a long time (+10s) to decode a bad JPEG
      </action>
      <action issue="IMAGING-219" dev="kinow" type="fix">
        Imaging gets stuck parsing a RGBE input file
      </action>
      <action issue="IMAGING-154" dev="kinow" type="update">
        Remove Debug class
      </action>
      <action issue="IMAGING-124" dev="kinow" type="update" due-to="Jens Kapitza">
        Tidy up IconParser
      </action>
      <action issue="IMAGING-215" dev="kinow" type="fix">
        ArrayIndexOutOfBoundsException in DhtSegment
      </action>
      <action issue="IMAGING-203" dev="kinow" type="fix" due-to="Rody Kersten">
        JPEG segment size not validated
      </action>
      <action issue="IMAGING-123" dev="kinow" type="update" due-to="Jens Kapitza">
        remove duplicated lines in T4AndT6Compression
      </action>
      <action issue="IMAGING-209" dev="kinow" type="fix" due-to="Isak Wertwein">
        PnmImageParser throws ImageWriteException when writing if PnmImageParser.PARAM_KEY_PNM_RAWBITS is provided
      </action>
      <action issue="IMAGING-205" dev="kinow" type="fix">
        Imaging (Apache Sanselan) produces "odd offsets" in (EXIF) metadata
      </action>
      <action issue="IMAGING-195" dev="britter" type="fix" due-to="Keith Strydom">
        Incorrect Maven coordinates on project website
      </action>
      <action issue="IMAGING-190" dev="sebb" type="fix">
        ImageDataReader.decompress() overwrites its input
      </action>
      <action issue="IMAGING-193" dev="sebb" type="fix">
        Duplicate class names
      </action>
      <action issue="IMAGING-189" dev="sebb" type="fix">
        parseXpmValuesSection uses &amp;&amp; instead of ||
      </action>
      <action issue="IMAGING-181" dev="damjan" type="fix">
        EXIF lens metadata tags missing in Commons Imaging but recognized in exiftool
      </action>
      <action issue="IMAGING-172" dev="damjan" type="fix">
        Microsoft tags are not seen in MS Windows Properties/Details dialog.
      </action>
      <action issue="IMAGING-186" dev="britter" type="update" due-to="Ric Emery">
        Add sCAL support to PNG reading and writing.
      </action>
      <action issue="IMAGING-176" dev="britter" type="fix" due-to="Gabriel Axel">
        TiffImageParser.getImageInfo() throws exception when "Compression" field is missing.
      </action>
      <action issue="IMAGING-178" dev="britter" type="fix" due-to="emopers">
        PnmImageParser does not check the validity of input PAM header.
      </action>
      <action issue="IMAGING-184" dev="ggregory" type="update">
        Update platform from Java 5 to 7
      </action>
      <action issue="IMAGING-112" dev="britter" type="update" due-to="Xavier Dury">
        JpegIptcRewriter.removeIPTC() does not remove all metadata
      </action>
      <action issue="IMAGING-171" dev="britter" type="fix" due-to="Jan Helbich">
        MicrosoftTagTest rewrite image exif fails in some environments
      </action>
      <action issue="IMAGING-169" dev="britter" type="fix" due-to="Nebu Pookins">
        PnmImageParser throws NumberFormatException instead of ImageReadException when parsing invalid images
      </action>
      <action issue="IMAGING-166" dev="britter" type="update" due-to="Michael Groß">
        ByteSourceImageTest: Local variable hides a field
      </action>
      <action issue="IMAGING-156" dev="britter" type="update">
        Refactor TagConstants
      </action>
      <action issue="IMAGING-144" dev="britter" type="fix" due-to="Paul Hartmann">
        TiffOutputSet.setGPSInDegrees should make sure, GPSVersionID is set
      </action>
      <action issue="IMAGING-126" dev="britter" type="update" due-to="Gary Lucas">
        TIFF and PNG images should not be bigger than the ones created by java ImageIO
      </action>
      <action issue="IMAGING-147" dev="britter" type="update" due-to="Stephan Koeninger">
        Add color constants
      </action>
      <action issue="IMAGING-150" dev="britter" type="update" due-to="Stephan Koeninger">
        Implement equals and hashcode on color classes
      </action>
      <action issue="IMAGING-117" dev="sebb" type="fix">
        Classes should not expose mutable arrays
      </action>
      <action issue="IMAGING-145" dev="ggregory" type="fix" due-to="Chris Carman">
        DumpImage method for JPEG reports it's coming from TIFF.
      </action>
      <action issue="IMAGING-137" dev="damjan" type="fix">
        Can not set EXIF_TAG_EXIF_VERSION tag.
      </action>
      <action issue="IMAGING-140" dev="damjan" type="fix" due-to="Gavin Shiels">
        ExifReWriter always writes EXIF segment before JFIF segment.
      </action>
      <action issue="IMAGING-131" dev="damjan" type="fix">
        Allow null parameters in PngImageParser.getBufferedImage(), and add some tests for null parameters.
      </action>
      <action issue="IMAGING-121" dev="damjan" type="fix" due-to="Piyush Kapoor">
        Null Pointer exception while extracting metadata for CR2 image.
      </action>
      <action issue="IMAGING-115" dev="damjan" type="fix">
        DhtSegment class contains mutable public arrays.
      </action>
      <action issue="IMAGING-117" dev="damjan" type="fix">
        SofnSegment.components - public mutable array.
      </action>
      <action issue="IMAGING-116" dev="damjan" type="fix">
        GenericSegment.bytes - public mutable array.
      </action>
      <action issue="IMAGING-118" dev="damjan" type="fix">
        interface RgbeConstants contains mutable array.
      </action>
      <action issue="IMAGING-114" dev="damjan" type="fix">
        ComSegment.comment is a public final byte array.
      </action>
      <action issue="IMAGING-109" dev="damjan" type="fix">
        Several files contain non-UTF8 characters.
      </action>
      <action issue="IMAGING-113" dev="damjan" type="fix">
        Cannot read multipage tiff.
      </action>
      <action issue="IMAGING-108" dev="damjan" type="fix">
        JPEG EOI marker could not be found at expected location.
      </action>
      <action issue="IMAGING-101" dev="ggregory" type="fix" due-to="Colm O hEigeartaigh">
        GIF dimensions transposed.
      </action>
      <action issue="IMAGING-23" dev="cmchen" type="fix">
        JpegXMPWriter throws NullPointerException.
      </action>
      <action issue="IMAGING-75" dev="cmchen" type="add">
        Added accessor methods for a number of ImageInfo properties.
      </action>
      <action issue="IMAGING-71" dev="cmchen" type="add" due-to="Nicolas Richeton">
        Applied patch contributed by Nicolas Richeton, adding getEXIFThumbnailSize() and getEXIFThumbnailData() methods to JpegImageMetadata.
      </action>
      <action issue="IMAGING-74" dev="cmchen" type="fix">
        Fixed a couple of platform-dependent paths in the tests.
        Constantized the magic numbers used when guessing formats.  
        Added a test for the format guessing.
      </action>
      <action issue="IMAGING-2" dev="cmchen" type="fix">
        SanselanGuessFormatTest and SanselanTestConstants use Java 1.5 method String.replace(CharSequence, CharSequence).
      </action>
      <action issue="IMAGING-80" dev="niallp" type="fix">
        Sanselan tests fail on Windows.
      </action>
      <action issue="IMAGING-18" dev="cmchen" type="fix" due-to="James E-J">
        Fix for "JpegImageMetadata getEXIFThumbnail only works on Jpeg thumbnails stored as Tiff images" issue.
        Jpeg thumbnails are read using ImageIO.
      </action>
      <action issue="IMAGING-48" dev="sebb" type="fix">
        JpegImageMetadata getEXIFThumbnail may raise a null pointer exception.
      </action>
      <action issue="IMAGING-56" dev="cmchen" type="add" due-to="damjan">
        Add support for the ICNS icon format.
      </action>
      <action issue="IMAGING-52" dev="cmchen" type="fix" due-to="damjan">
        Implement dumpImageFile for ICO files and fix a typo.
      </action>
       <action issue="IMAGING-58" dev="damjan" type="add">
        Add support for PCX, DCX, WBMP, XBM and XPM images.
      </action>
      <action issue="IMAGING-12" dev="damjan" type="fix" due-to="gwlucas">
        Tiff (exif) tags of type double written in wrong byte order.
      </action>
      <action issue="IMAGING-30" dev="damjan" type="fix" due-to="clement.escoffier">
        The isTransparent flag is not set on transparent PNGs.
      </action>
      <action issue="IMAGING-11" dev="damjan" type="fix">
        Ignore TIFF entries that have invalid offsets and/or lengths when we are not in strict mode.
      </action>
      <action issue="IMAGING-78" dev="damjan" type="fix">
        readDirectory method in TiffReader doesn't gracefully handle exceptions that can be thrown from ByteSource implementations.
      </action>
      <action issue="IMAGING-24" dev="damjan" type="fix">
        Search all tags instead of just EXIF tags when parsing TIFF metadata tags, and try to match on directory type as well.
      </action>
      <action issue="IMAGING-21" dev="damjan" type="fix">
        Don't allow very large TIFF lengths to be interpreted as negative because they have the highest order bit set.
      </action>
      <action issue="IMAGING-50" dev="damjan" type="fix">
        Make JPEG parsing highly resilient: skip all bytes after the end of a segment until the next segment (0xFF followed by non-0xFF).
      </action>
      <action issue="IMAGING-16" dev="damjan" type="fix">
        Fix reading ASCII tags in TIFF files.
      </action>
      <action issue="IMAGING-3" dev="damjan" type="fix">
        Ignore string differences in our tests when 7 bit unclean TIFF string are copied.
      </action>
      <action issue="IMAGING-41" dev="damjan" type="fix">
        Don't redefine BYTE_ORDER_BIG_ENDIAN and BYTE_ORDER_LITTLE_ENDIAN in UnicodeMetricsUTF16.
      </action>
      <action issue="IMAGING-64" dev="damjan" type="add">
        Add support for TIFF files with compression=2, (CCITT Group 3 1-Dimensional Modified Huffman run length encoding).
      </action>
      <action issue="IMAGING-35" dev="cmchen" type="fix">
        Fixed issue "FieldTypeASCII does not conform to the EXIF specification," identified by Libor Nenadál.
      </action>
      <action issue="IMAGING-31" dev="cmchen" type="fix">
        Fixed a bug in which gifs have incorrect size information in the the Logical Screen Descriptor.
        This appears to be a bug in how Microsoft Office writes gifs. The Image Descriptor has the correct value.
      </action>
      <action issue="IMAGING-13" dev="cmchen" type="fix">
        Added checks in ByteSource's getBlock() methods for invalid params.
      </action>
      <action issue="IMAGING-46" dev="cmchen" type="fix">
        Fixed a possible NPE in Sanselan.getICCProfile pointed out by Jon Weygandt.
      </action>
      <action issue="IMAGING-76" dev="cmchen" type="fix" due-to="damjan">
        Improve ICO file support.
      </action>
      <action issue="IMAGING-49" dev="damjan" type="fix">
        Preserve the byte range occupied by the Maker Notes, so rewriting it doesn't corrupt it.
      </action>
      <action issue="IMAGING-29" dev="damjan" type="fix" due-to="alexvigdor">
        Read in the full IPTC block before trying to ignore it, so we don't lose our position in the stream.
      </action>
      <action issue="IMAGING-45" dev="damjan" type="fix" due-to="pkapoor">
        Fix the GIF BitsPerPixel formula in GifImageParser's getImageInfo().
      </action>
      <action issue="IMAGING-77" dev="damjan" type="add">
        Add a type-safe high-level API for writing TIFF fields.
      </action>
      <action issue="IMAGING-51" dev="damjan" type="add">
        Add TagInfoXpText for fields like XPTITLE, and encode/decode it using UTF-16LE like Windows does.
      </action>
      <action issue="IMAGING-39" dev="damjan" type="fix">
        Fix various problems with reading and writing EXIF tags.
      </action>
      <action issue="IMAGING-60" dev="damjan" type="add" due-to="proyal">
        Added support for reading the RGBE / Radiance HDR image format.
      </action>
      <action issue="IMAGING-68" dev="damjan" type="add">
        Add a field to IptcRecord that contains its raw bytes, and a getter for this value.
      </action>
      <action issue="IMAGING-73" dev="damjan" type="add">
        Provide a way to write EXIF data into files using Sanselan.writeImage().
      </action>
      <action issue="IMAGING-22" dev="damjan" type="fix">
        Eliminate or hide public mutable final arrays in the API.
      </action>
      <action issue="IMAGING-47" dev="damjan" type="add" due-to="adrian2k7">
        Run a Findbugs analysis on "mvn site". Also audit and fix resource leaks.
      </action>
      <action issue="IMAGING-43" dev="damjan" type="fix" due-to="pkapoor">
        If the TIFF rows per strip is not present, assume it is the image length.
      </action>
      <action issue="IMAGING-65" dev="damjan" type="add">
        Provide a way to write the pixel density (DPI) into an image.
      </action>
      <action issue="IMAGING-17" dev="damjan" type="fix" due-to="pkapoor">
        Make BitInputStream sensitive to byte order. Allows 48 BPP TIFF files to load.
      </action>
      <action issue="IMAGING-38" dev="damjan" type="fix" due-to="tjoris">
        Fix the PhysicalWidthDpi calculation for JPEG images.
      </action>
      <action issue="IMAGING-19" dev="damjan" type="fix" due-to="vvd">
        Fix reading DPI for TIFF files.
      </action>
      <action issue="IMAGING-44" dev="damjan" type="fix" due-to="vvd">
        Fix reading DPI for PNG files.
      </action>
      <action issue="IMAGING-40" dev="damjan" type="fix" due-to="pkapoor">
        Add the Software TIFF tag, and get the byte order after reading the first TIFF directory.
      </action>
      <action issue="IMAGING-6" dev="damjan" type="fix">
        Correct the expected size of the decompressed TIFF image data, and improve sample depth scaling for PNG images.
      </action>
      <action issue="IMAGING-15" dev="damjan" type="fix" due-to="pkapoor">
        Stop JpegImageMetadata from throwing NPE if the exif field is null.
      </action>
      <action issue="IMAGING-67" dev="damjan" type="fix" due-to="gwlucas">
        Speed up reading paletted TIFF files.
      </action>
      <action issue="IMAGING-8" dev="damjan" type="fix">
        Allow TIFF fields to change size during encoding. Fix a broken test that assumes they never do.
      </action>
      <action issue="IMAGING-36" dev="damjan" type="fix">
        Fix sample usage links on the website.
      </action>
      <action issue="IMAGING-70" dev="damjan" type="fix" due-to="gwlucas">
        Reduce memory usage when reading TIFF files.
      </action>
      <action issue="IMAGING-33" dev="damjan" type="fix">
        Fixed the differencing predictor for tiled TIFF images.
      </action>
      <action issue="IMAGING-5" dev="damjan" type="fix">
        Update website, fix some broken links and remove old code.
      </action>
      <action issue="IMAGING-61" dev="damjan" type="add" due-to="gwlucas">
        Include a test utility for timing and memory in project example classes.
      </action>
      <action issue="IMAGING-69" dev="damjan" type="fix" due-to="gwlucas">
        Add a streamlined TIFF reader that reduces load time by a factor of 5.
      </action>
      <action issue="IMAGING-81" dev="damjan" type="add" due-to="gwlucas">
        Add more Javadoc to main package.
      </action>
      <action issue="IMAGING-82" dev="damjan" type="fix" due-to="pkapoor">
        Fix BMP width and height DPI.
      </action>
      <action issue="IMAGING-86" dev="damjan" type="fix">
        Fix the lengths for DateTimeOriginal and DateTimeDigitized TIFF/EXIF tags.
      </action>
      <action issue="IMAGING-88" dev="damjan" type="fix" due-to="craigkelly">
        Method lowerBound in org.apache.commons.imaging.common.itu_t4.T4AndT6Compression has a division error.
      </action>
      <action issue="IMAGING-89" dev="damjan" type="add">
        Detect the YCCK color space/type in JPEG files' APP14 segment.
      </action>
      <action issue="IMAGING-92" dev="damjan" type="fix" due-to="hmarmy">
        Issue trying to update GPS metadata info in a JPG.
      </action>
      <action issue="IMAGING-91" dev="damjan" type="update">
         ByteSourceInputStream.streamLength could be a long.
      </action>
      <action issue="IMAGING-95" dev="damjan" type="update" due-to="amitgupt">
         Some tiff processing takes very long.
      </action>
      <action issue="IMAGING-93" dev="damjan" type="fix" due-to="gwlucas">
         Tiled TIFF images do not correctly load partial tiles.
      </action>
      <action issue="IMAGING-90" dev="damjan" type="fix">
         Allow non-1 TIFF field lengths when parsing offset fields in non-strict mode.
      </action>
      <action issue="IMAGING-99" dev="damjan" type="fix" due-to="st.h">
         java.io.IOException: Could not read block
      </action>
      <action issue="IMAGING-94" dev="damjan" type="add" due-to="gwlucas">
         Add ability to load partial TIFF images
      </action>
      <action issue="IMAGING-223" dev="ggregory" type="update" due-to="Gary Gregory">
         Update from Java 7 to Java 8.
      </action>
    </release>
    
  </body>
</document>
