Release Notes for libdmtx version 0.7.0 - March 2, 2009

A high quality API, one that offers both a clean interface and
long term stability, is the product of a delicate balancing act.
Sometimes an API change is the only way to clarify intentions or
fix a naming inconsistency, but the disruptions caused by even a
minor change can easily outweigh the benefits. We have tried to
avoid these changes, with the hopes that eventually we'd find a
convenient time to perform this basic housekeeping.

The 0.7 release required a break in the C API to accommodate a
fundamental change in the way images are handled, so we took this
opportunity to update the API with the backlog of updates that
didn't justify the disruption individually. We hope the new API
will provide a stable base on which to continue work, and that
major changes can be minimized in the future as a result.

But this release is about a lot more than just the API! It also
offers many improvements, some of which will expose libdmtx to
large new audiences. For example, it contains:

  * A Java wrapper! (thanks Pete and Dikran!)
  * A C#/.NET wrapper! (thanks Vali and Joe!)
  * A set of Visual Studio 9.0 files! (thanks Cameron!)

Also, as mentioned above the library now handles image data using
a completely new approach. It removes the need for programs to
transform or copy their pixel data into libdmtx-allocated memory,
helping to:

  * Shrink overall memory footprint
  * Eliminate cycles spent copying pixels
  * Reduce code by eliminating pixel transformation

And other improvements:

  * Improved support for Text/C40 reading (thanks Robin!)
  * Changed from GraphicsMagick to ImageMagick dependency
  * dmtxwrite support for major image formats, including SVG
  * Several bug and compiler warning fixes
  * Cocoa wrapper works again (thanks Romain!)
  * More cross platform improvements

Many individuals made this release possible with their generous
contributions; THANKS! In fact, 0.7 was supposed to be released
several weeks earlier, but patch after patch of impossible-to-
live-without fixes and enhancements kept arriving.

For the next release, efforts will focus on improving scans of
multiple barcodes within the same image. Overall we believe that
significant room exists to further improve scanning performance,
and will now attempt to realize the bulk of this potential.

On this note, please consider donating your barcode images to the
libdmtx sample image database; Especially those that are unusual
or suffer from poor scan performance. To donate, send images to
mike at dragonflylogic dot com, along with the name of the
copyright holder (hopefully you) and any special instructions
(e.g., "no restrictions", "not for use outside of libdmtx
testing", Creative Commons license, etc...).

As always, please let us know if you find any bugs or have
trouble installing the software. Messages should be sent to the
open mailing list:

If you are a C developer affected by the 0.7 API changes, please
see below for a summary of the changes. You can also reference
any of the "test", "util", or "wrapper" programs in the source
package to see working code samples.

0.7 API Change Summary

Simple Renames
DMTX_TRUE                  is now DmtxTrue   [type: DmtxBoolean]
DMTX_FALSE                 is now DmtxFalse  [type: DmtxBoolean]
DMTX_SUCCESS               is now DmtxPass   [type: DmtxPassFail]
DMTX_FAILURE               is now DmtxFail   [type: DmtxPassFail]
DMTX_VERSION               is now DmtxVersion
DMTX_BAD_OFFSET            is now DmtxUndefined
DMTX_SYMBOL_SQUARE_COUNT   is now DmtxSymbolSquareCount
DMTX_SYMBOL_RECT_COUNT     is now DmtxSymbolRectCount
DMTX_SYMBOL_SQUARE_COUNT   is now DmtxSymbolSquareCount
dmtxDecodeStructInit()     is now dmtxDecodeCreate()
dmtxDecodeStructDeInit()   is now dmtxDecodeDestroy()
dmtxDecodeFindNextRegion() is now dmtxRegionFindNext()
dmtxEncodeStructInit()     is now dmtxEncodeCreate()
dmtxEncodeStructDeInit()   is now dmtxEncodeDestroy()
dmtxImageMalloc()          is now dmtxImageCreate()
dmtxImageFree()            is now dmtxImageDestroy()
dmtxMessageMalloc()        is now dmtxMessageCreate()
dmtxMessageFree()          is now dmtxMessageDestory()

Things That No Longer Exist
DMTX_REGION_FOUND     [dmtxRegionFindNext() now returns pointer]
DMTX_REGION_NOT_FOUND [dmtxRegionFindNext() now returns pointer]
DMTX_REGION_TIMEOUT   [dmtxRegionFindNext() now returns pointer]
DMTX_REGION_EOF       [dmtxRegionFindNext() now returns pointer]
DmtxRgb               [DmtxImage now has variable color depth]
DmtxPropShrinkMin     [dmtxDecodeCreate() now receives one scale]
DmtxPropShrinkMax     [dmtxDecodeCreate() now receives one scale]
DmtxPropScaledWidth   [use dmtxDecodeGetProp(dec,DmtxPropWidth)]
DmtxPropScaledHeight  [use dmtxDecodeGetProp(dec,DmtxPropHeight)]

Parameter Changes
dmtxEncodeDataMatrix()   [see simple_test.c or dmtxwrite.c]
dmtxImageCreate()        [see simple_test.c or dmtxread.c]
dmtxDecodeMatrixRegion() [see simple_test.c or dmtxread.c]