# bmeps 2.1.5

- Overview
- Download / Installation
- Usage
- Examples
- bmeps GUI
- mkpdfsls
- FAQ
- Change log
- Other projects
- PDF manual (en)
- PDF manual (de)
- Doxygen docu

## Change log

Please note: All versions containing only a major.minor are much older than those containing major.minor.micro.
Especially 1.54 - still found on some servers - is very old.

### Change log

- New feature (2.1.5)
  - The option ``-o predictor=name'' was added.
    When producing PDF output one can choose a predictor to be used in conjuction with flate compression, use one from ``none'' (no prediction), ``tiff'' (TIFF sub predictor, predicted color value = same as corresponding color value one point to the left), ``png-sub'' (PNG sub predictor, predicted byte value = same as corresponding byte value one point to the left), ``png-up'' (PNG up predictor, predicted byte value = same as corresponding byte value one row upwards), ``png-average'' (PNG average predictor, predicted byte value = average of corresponding byte values one point to the left and one row upwards) or ``png-paeth'' (PNG paeth predictor, predicted byte value is a function of the corresponding bytes one point to the left, one row upwards and point one left, see RFC 2083).
    See FAQ: What is a ``predictor'', should I use it? for details.
- Bugfix (2.1.4)
  - In previous versions the program complained about ``no configuration specified, no output filename specified...'' when the ``-r'' option was used.
    This message is removed now.
  - When running

        bmeps --configuration-file

    a line

        # @FILE-TYPES PNG JPEG NetPBM TIFF

    listing the supported file types is inserted (listing only the file types supported). This allows the bmeps GUI Java application to retrieve the list of supported file types easily.
- Bugfix (2.1.3)
  - Out-of-range execptions occured in the bmeps GUI when attempting to set options. 2 files not really up-to-date (BGS.java and BmepsController.java) were used.
    This is fixed now.
- Documentation (2.1.2)
  - Developer documentation (produced by doxygen) was added.
- Changes to mkpdfsls (2.1.1)
  - A new option ``use exif = boolean'' was added to allow the use of ``Comment'' EXIF tags in images as image descriptions.
    The Image::ExifTool and DKrause::LaTeXEncoder modules for Perl are needed.
- New features (2.1.0)
  - Script mkpdfsls.pl to create a slide show.
  - Previous versions of bmeps did an internal analysis of JPEG files and used DCT-encoded data directly only for positive analysis results, otherwise the Independent JPEG Group's library was used to decode the image and the image was re-compressed using run-length or flate compression.
    It turned out that my internal analysis of JPEG files failed for some JPEG files produced by digital cameras. Neithertheless tests showed that DCT-encoeded data from these files can be used in PDF and PS/EPS files without problems.
    So the default behaviour of bmeps was changed: The result of the internal analysis is ignored, direct DCT data passthrough is used for nearly all JPEG files now.
    You can restore the old behaviour by setting:

        force dct passthrough = no

- Bugfix and internal update (2.0.20)
  - In previous version there was no error message if the bmeps GUI failed to run the bmeps program (bmeps not in the PATH).
    Now the log window contains an error message if this problem occurs.
  - The dksf_must_rebuild() function is used to check whether a destination file is up to date or must be rebuild.
- Bugfixes (2.0.19)
  - In previous version the option -o m.s=0:0:100:100 resulted in a wrong bounding box 0 0 0 0. This is fixed now.
  - Changes in the makefiles: Now we run mkdir to create a directory only if the directory does not yet exist. We run rm only if the file exists.
    In previous versions the exit status of the mkdir and rm commands was simply ignored but some users were irritated by the error messages produced by these programs.
- Bugfix (2.0.18)
  If size information is used (either resolution chunk or paper size) we have to calculate scaling and - depending on the image and the paper size - rotation and translation.
  In theory the translation values are 0 or positive numbers. On some systems the translation calculation resulted in very small number (in the range of 10^14) instead of 0. The fprintf("%lg", ...); function prints these numbers in a notation not understood by PDF viewers.
  I can not change the behaviour of fprintf() nor the mathematics library. So all translations are set to 0.0 if the absolute value of the translation is below 0.001 to solve the problem.
  Additionally we make sure to print all double values without exponent notation using dkma_fputs_double_no_exp() or dkstream_puts_double().
- Bugfix (2.0.17)
  There was a typo in the code for image scaling and translating.
  This is fixed now.
- Change in the Bmeps GUI (2.0.16)
  A command line argument can be used to specify the directory in which the bmeps GUI is running.
- Change in the Bmeps GUI (2.0.15)
  The code was reorganized, the classes from the dklibsj.jar file are packaged to bmepsgui.jar too. So we have to deal with one jar file only to run the application. A splash screen is shown while the application starts.
- Change in the Bmeps GUI (2.0.14)
  The panel contents is placed in the left top corner of panels in the options dialog.
- Some GUI elements in Bmep GUI are disabled temporarily while the background thread is running.
- Bugfix (2.0.13)
  The file name of the bmepsgui.jar file was corrected in the bmeps-gui script. (Not all systems use case-insensitive file names.)
- Changes in BmepsGUI (2.0.12)
  The transfer handler for drag and drop is not only set for the main windows panel but for panel contents too. This allows to release the mouse over one of the labes or the icon when finishing a drop operation.
- Bugfix for resolution chunks (2.0.11)
  When using the input image resolution chunk previous versions of bmeps wrote translate instructions to center the HiResBoundingBox in the BoundingBox. On request of a user this co-ordinates transformation was removed, a HiResBounding box is added to PS/EPS output, the /MediaBox entry in PDF files is expressed in real numbers.
  The user requesting this change told me he converted a PNG image to PDF/EPS using bmeps and the PDF/EPS back to PNG (without telling which program was used). The result of the two conversions differed from the original. The bugfix can improve the situation a little bit but you should not expect the result of a forward-and-backward conversion to be 100 percent equal to the original.
  Why? See the FAQ.
- Docu update (2.0.10)
  The text printed at the end of the configure script was updated.
- Bugfix (2.0.9)
  The installation of the bmeps-gui script was moved from the dklibs projects makefiles into the bmeps makefiles (of course it belongs to here). Thanks to Ph. Loewen for the bug report.
- Multiple changes (2.0.8)
  - Return of the Bmeps GUI
    A new GUI was written in Java.
  - Additional progress messages
    When running on a directory bmeps produces progress messages for each input file converted now.
  - Change in PDF output driver
    When transferring an alpha channel to PDF output PDF page attributes now contain

        /Group <</S /Transparency /I true /CS /DeviceRGB>>

    This allows to create standalone PDF image containing an alpha channel.
    This feature can be controlled using the

        allow pdf page attributes = ...
        a.p.p.a=...

    option.
  - bmeps --configuratioin-file
    now shows a line

        # @PLATFORM filename case-sensitive

    or

        # @PLATFORM filename case-insensitive

    to indicate whether or not file names are case-sensitive. This feature is used by the Bmeps GUI to decide whether or not to use case-sensitive comparisons for file names.
- Changes in the Windows version (bmeps 2.0.7)
  If standard output was switched to binary mode before writing ouptut, standard output is switched bach to the original binary or text mode after output is finished.
- New feature: Codepage support used when showing the configuration (bmeps 2.0.6)
  The -C (--show-configuration) option now uses codepage support if available. This should show german umlauts and ligatures correctly on Windows systems.
- Bugfix: Uninitialized variable (bmeps 2.0.5)
  In previous versions there was an uninitialized variable in the code reading bitmap images from standard input. This is fixed now.
- New features: Configuration file reading and writing, information about alpha channels converted to PDF (bmeps 2.0.4)
  Two new options were added:
  - Use

        bmeps --configuration-file

    to list the configurations currently available.
  - Use

        bmeps --write-configuration-file

    and type configuration data to save it to $HOME/.defaults/bmeps.conf.
    The purpose of these options is to allow other programmers to write a GUI wrapper around bmeps. The GUI application can "ask" bmeps which configurations are available. If the application provides configuration management, the user-specific configurations can be saved.
  - An information text is issued if an alpha channel was transferred into a PDF output file.
    If a PDF file containing an alpha channel is referenced by a *.tex file, the document preamble should contain a special line

        \ifpdf\pdfpageattr{/Group <</S /Transparency /I true /CS /DeviceRGB>>}\fi

    to prevent PDF viewers from using CMYK as an intermediate colorspace for calculations.
    The `-A` command line option can be used to suppress this message.
- Bugfix for compiler problem (bmeps 2.0.3)
  The project failed to build if no JPEG library developer support was installed.
  This is fixed now.
- New feature: Automatic output configuration selection based on the output file name suffix (bmeps 2.0.2)
  If no configuration was specified using the ``-l language'' option bmeps attempts to find an output configuration based on the output file name suffix. If the ``-l'' option is missing all options to overwrite configuration entries must be placed after the output file name.
  Now the most simple ways to run bmeps are

      bmeps input.png output.eps
      bmeps input.png output.pdf
      bmeps input.png output.bb

- New feature: Automatic output file name selection (bmeps 2.0.1)
  There was a request to generate output file names automatically based on the input file name and the output driver.
  You can use the ``-a'' option (automatically create output file name) like

      bmeps -a -lbb graphic.png

  to create the graphic.bb file.
  The purpose of this feature is easier integration to the Windows desktop.
- Complete rewrite November 24th, 2006 (bmeps 2.0.0)
  Bmeps was rewritten completely from scratch to provide the following new features:
  - Create EPS and PDF files.
  - Create multiple data sources in EPS output to enable run-length compression of areas and horizontal lines in the same color.
  - DCT-pass-through of JPEG files.
    Only JPEG file which passed some tests are used directly as DCT-encoded data. When in doubt, bmeps falls back to the classical combination of compression and encoding mechanisms.
  - Choices for image size:
    - 1 pixel = 1 PS point
      This is the default setting.
      Scaling and rotating is left up to DTP applications (i.e. LaTeX) which include the resulting EPS or PDF files.
    - Use resolution data contained in the input file.
    - Fit to a paper size, rotate if necessary.
  - New configuration and options mechanism. The goal is to type a minimum of command line options to run bmeps. Instead we can use predefined configurations or create a configuration file for customized configurations.
    On the command line we only need to select one configuration.
  - Partial support for TIFF files. Bmeps can use all the TIFF files which can be read using the TIFFReadRGBAImage() function from the libtiff library.
    The goal was to convert TIFF files generated by a fax gateway to PDF for better viewing. This was tested successfully.
- Bugfix August 25th, 2006 (bmeps 1.2.7)
  - Previous versions of bmeps did not handle grayscaled JPEG images properly. This is fixed now.
- Java-based GUI added June 15th, 2006 (bmeps 1.2.6)
  - A Java based GUI was added. JRE 5 and dklibs 1.11.2 are needed to use the bmeps GUI.
- Documentation update March 30th, 2005 (bmeps 1.2.5)
  - The man page was updated to show the -t option too.
- Bugfix March 22th, 2005 (bmeps 1.2.4)
  - License change: This project uses a BSD-style license now.
  - Previous versions returned a wrong exit status code after processing NetPBM files. This is fixed now.
- Update March 15th, 2005 (bmeps 1.2.3)
  - Configure script changed again to detect the ranlib program. The previous version did not find it on Mac OS systems.
- Update March 9th, 2005 (bmeps 1.2.2)
  - Short summary:
    - Problems with missing invokation of `ranlib` fixed.
    - Configure script searches for the DOS/Windows-specific version of `setmode()`.
  - Details:
    - The ranlib program.
      I was notified that on some systems a simple

            ar <library> <object(s)>

      is not sufficient to build a library, an additional

            ranlib <library>

      is necessary.
      The ranlib commands were added to the Makefile(s).
    - The setmode() function.
      On DOS/Windows systems there is a function

            int setmode(int, int);
            int _setmode(int, int);

      which can be used to force binary mode for a filedeskriptor.
      BSD systems have a function

            void *setmode(const char *);

      which has something to do with converting a file permission string to mode_t settings.
      Simply checking for the presence of a setmode() function in the configure script is not sufficient, a new preprocessor definition HAVE_DOSWIN_SETMODE was added. The configure script tries to compile test code. When building DOS/Windows versions without the configure script the definition is taken from dkconfd.h, it is activated if either __BORLANDC__ is defined or _MSC_VER> 1100. When using other compilers without running the configure script you should set the definition manually.
- Update February, 17th 2005 (bmeps 1.2.1)
  - As the ${prefix}/share directory is a better place for documentation than ${prefix}/lib the bmeps.pdf file is installed there.
- Bugfix and API-change February, 8th 2005 (bmeps 1.2.0)
  - Short summary:
    - Previous versions of bmeps silently ignored corrupted input files. This is fixed now.
    - In some situations the program dumped core when processing a corrupt PNG file. This is fixed now
    - A command line option "-V" was added for verbose mode. In the EPSOUTPUT environment variable use the character "V" to enter verbose mode.
    - If the input file is corrupt an error message is printed as PostScript comment to the output file.
    - New functions were added to the library:
      - void bmeps_set_verb(int);
        int bmeps_get_verb(void);
        can be used to set verbose mode and to check whether verbose mode is enabled.
      - void bmeps_set_app(int);
        int bmeps_get_app(void);
        can be used to set "normal application" mode and to check for this mode. Most applications should use

              bmeps_set_app(1);

        before converting the first image.
      - void bmeps_show_error_text(FILE *, char **);
        prints error messages. This function is invoked from the image processing modules.
  - Details:
    - The libpng library uses the setjmp() mechanism. If an error is encountered in an input file the jmpbuf component of png_struct type is used. It is necessary to initialize this component using

            if(setjmp(pp->jmpbuf)) {
              /* error recovery */
            } else {
              /* normal processing */
            }

      before running png_init_io().
      Previous versions of bmeps did not do that.
    - Previous version of bmeps silently ignored errors in input files. On error a zero length output was created.
      This version writes error messages as PostScript comments to the output. If verbose mode is enabled ("-V" option or "V" character in EPSOUTPUT) the error messages is also written to stderr.
    - Application programmers should set "normal application" mode for error messages. "Normal" means that error messages start at the beginning of lines. Some "special" applications (i.e. dvips -- for which libbmeps is intended) need an additional Newline before the error message begins.
  - Known issues:
    - The library functions reading NetPBM images exit when processing corrupt NetPBM images. This can not be fixed in libbmeps because the exit() is run from the NetPBM library functions.
- Update January, 12th 2005 (bmeps 1.1.1)
  - A VB macro was provided by Krishna Kant to export MS excel charts to EPS by first exporting the charts to PNG files and running bmeps on them. The macro is placed in contrib/kant_krishna/excel_to_eps.vbs.
  - No further changes to the code.
- Update September, 7th 2004 (bmeps 1.1.0)
  - The file "Makefile-shared-solaris-workshop" is created by "configure" to build libbmeps as a shared library on Solaris using the Workshop compiler.
    Dealing with shared libraries is recommended only for advanced users, developers and those people creating binary installation packages for Linux distributions or LaTeX distributions. For normal users I recommend to build a static library and binary as usual.
  - One user requested an option to use the same resolution in the EPS output as specified in the PNG files pHYs chunk. Use command line option `-q` or EPSOUTPUT character `e`.
    Use of this feature is not recommended when producing EPS images for use with LaTeX or DTP applications. But it might be usefull to create images for standalone viewing.
    This feature is new (and not yet well-tested, let's say beta-level).
  - API change in the libbmeps library:
    An additional parameter usr (use resolution) was added to the bmeps_setup() function.
    A new function bmeps_set_gsave_done() was added indicating that "gsave" was already printed. This function sets a module-internal static variable in bmeps.o which is reset automatically.
- Update August, 16th 2004 (bmeps 1.0.10)
  The configure script was changed as suggested by Ralf Corsepius to allowing linking against different versions of the NetPBM library/libraries (either "-lpnm -lppm -lpgm -lpbm" or "-lnetpbm").
  Anders Lennartson suggested to provide a makefile to build a shared library libbmeps.so. As the compiler flags to build shared executables differ between gcc and other compilers (i.e. Sun Workshop) we use different makefiles. They are named "Makefile" to build a static binary and "Makefile-shared-xxx" for using shared libraries. At this time there is only a "Makefile-shared-linux".
  Dealing with shared libraries is recommended only for advanced users, developers and those people creating binary installation packages for Linux distributions or LaTeX distributions. For normal users I recommend to build a static library and binary as usual.
- Update July, 26th 2004 (bmeps 1.0.9)
  For bmeps 1.0.9 and above bmeps does not use the showpage operator by default. You can turn the showpage operator on using the -o option (or the `h` character in the EPSOUTPUT environment variable or the -I dvips option).
  For PS level 2 and above the dictionary entries /pstr and /inputf are removed from the currentdict dictionary.
  A separated dictionary can be used for /pstr and /inputf for PS level 2 and above by specifying the -u option (or using the `u` character in EPSOUTPUT).
  Garbage collection in the local memory can be forced by adding a "1 vmreclaim" line using the -r option (or the `v` character in EPSOUTPUT).
- Bugfix July, 19th 2004 (bmeps 1.0.8)
  Two bugs were found and fixed:
  - Memory leak in the pnmeps module.
    Memory was allocated for the PNM image but not released.
  - Uninitialized pointers in the jpgeps module
    The colormap pointers were set to NULL instead of the color maps.
- Upgrade June, 9th 2004 (bmeps 1.0.7c)
  File "makefile.msc" added.
- Upgrade June, 18th 2003 (bmeps 1.0.7)
  Support for using bmeps.exe as a filter on Windows systems was fixed. When running as a filter the program uses the setmode() function to switch standard input into binary mode.
- Upgrade May, 5th 2003 (bmeps 1.0.6b)
  Suggestions for modifications to dvips 5.92 were added. A .spec file for RPM creation was provided by Guido Gonzato.
- Upgrade November, 18th 2002 (bmeps 1.0.6a)
  Some users asked for a Win32 static binary to avoid DLL version collisions. I added it, it is in the `WIN32BIN\static` directory.
  The `WIN32BIN\dynamic` directory contains a dynamic binary and the DLLs needed to run it.
- Upgrade November, 6th 2002 (bmeps 1.0.6)
  - In the LaTeX newsgroups I found the information that the TIFF graphics format uses LZW compression. The LZW compression algorithm is covered by a patent, it must not be used without obtaining a license.
    TIFF support in bmeps used the libtiff library without LZW compression kit, bmeps failed to convert LZW compressed images.
    TIFF support was removed.
  - The HTML documentation was updated, clicking on a sample option set in usage.html brings you to a sample output page.
- Upgrade October, 8th 2002 (bmeps 1.0.5)
  - Added suggestions for a modified dvips(k) 5.90a.
  - Example PS output files in DOCU/EXAMPLES updated to reflect the output of the current bmeps version (I did not do this since December 2000).
- UpgradeSeptember, 3rd 2002 (bmeps 1.0.3)
  Win32 binary versions of bmeps.exe now use DLLs for the used libraries.
- Bugfix March, 6th 2002 (bmeps 1.0.2)
  In former versions I misunderstood something in the Adobe DSC specification.
  Recent versions of Ghostview/Ghostscript complained about my errors and exited.
  I corrected my errors:
  - procedure declaration now between BeginProlog/EndProlog instead of BeginSetup/EndSetup and
  - `Page: Image1 1` instead of `Page: 1 1`.
  Now `bmeps` does not issue any DSC comment by default (except BoundingBox), you must specify the `-s` command line switch or the `x` character in the `EPSOUTPUT` environment variable to obtain DSC comments.
- Update June, 15th 2001 (bmeps package)
  The `configure` scripts for both `bmeps` and the `dvips` modifications were renewed.
  The former `configure` scripts sometimes failed to find the NetPBM-library.
- Update February, 20th 2001 (bmeps package)
  Documentation enhanced, step-by-step guide how to build a Win32 version in HTML documentation (faq.html).
- Update February, 16th 2001 (bmeps package)
  Support for PNM/PPM/PGM/PBM enabled by using the `netpbm-9.2.tgz` library.
- Update December, 18th 2000 (bmeps package)
  Documentation enhanced. Examples for alpha channel usage.
  No new functionality.
- Update September, 21th 2000 (bmeps package)
  Features added to alpha channel support. Alpha channel support is not longer experimental.
- Update September, 20th 2000 (bmeps and dvips package)
  Dictionary images are now used for masked images only.
- Update+Bugfix September, 19th 2000 (bmeps package)
  Support for PNG alpha channels was added on some users request. This support is still experimental.
  The alpha channels contents must be mapped to simple draw/mask decision in EPS level 3. Every pixel having some opacity is drawn.
  Furthermore two bugs were detected and fixed:
  - Grayscaled PNGs were not processed properly.
  - The version information showed the names of all the used libraries except zlib.
- Update September, 7th 2000 (dvips and libbmeps package)
  Support for the JPEG file format was added using the Independent JPEG Group's Free Software.
- Change September, 6th 2000 (libbmeps package)
  A special configuration header `bmepsco.h` was introduced for easier configuration on systems where `./configure` cannot be run.
- Bugfix September, 5th 2000 (libbmeps package)
  Tom Kacvinsky detected an error when using flate decoding.
  Parts of the image were offset and colors were changed.
  I rewrote the flate encoding parted completely and improved it a little bit to get it faster. Fortunately the bug disappeared.
- Bugfix September, 4th 2000 (libbmeps package)
  Added include files `sys/types.h` and `string.h` for `size_t` type and `str...` prototypes.
- Change August, 28th 2000 (dvips package)
  A directory `pngdocu` was added containing a copy of these HTML pages.
- Change August, 22th 2000 (libbmeps package)
  `bmeps-1.19.tar.gz`
  The `bmeps` program is changed. It now uses the `EPSOUTPUT` environment variable to retrieve default settings before command line options are processed.
  This variable can have the same contents as the option string argument given to `-I`.
  Example:
  `#! /bin/csh`
  `setenv EPSOUTPUT 2gr8`
  can be used to specify PS level 2, grayscaled printing, run-length and ASCII-85-encoding.
- Change August, 18th 2000 (libbmeps and dvips package)
  `bmeps-1.17.tar.gz / dvips-5.86-png-1.3.tar.gz`
  Some cleaning up in the sources, configure scripts...
- Bugfix August, 16th 2000 (dvips package)
  `dvips-5.86-png.tar.gz`
  The changes introduced yesterday contained a bug.
  The 1:1 copy of unknown file types was disabled.
  The solution is to call a filename checker function for handler table entries with wildcard file name extension "*".
- Change August, 15th 2000 (libbmeps and dvips package)
  Changes to separate the bitmap to EPS conversion code in library `bmeps`.
  Adding support for further bitmap types now requires changes in the library only, not in dvips.c or output.c.
- Release August, 9th 2000
  First version released.