Skip to content
Commits on Apr 29, 2016
  1. Start roughing out a TIFF export dialog

    committed Apr 29, 2016
    The PNG export dialog serves as a great starting point, since TIFF
    supports comparable options and color-depths.  (Actually, TIFF supports
    even *more* color depths than PNG, but I'm going to ignore certain high
    bit-depths for now, since 32-bpp float export is ridiculous for a
    general-purpose photo editor like PD.)
  2. Harden against rare shutdown errors

    committed Apr 29, 2016
    On Windows 10, at least, the VB IDE can experience a lot of random
    issues (possibly due to subclassing, but who knows).  I'm trying to
    slowly harden against unexpected issues like objects that should always
    be instantiated randomly *not* being instantiated, but it's a long
    battle.  This is a start.
  3. Purge nearly all .frx files

    committed Apr 29, 2016
    There's just one left, for the batch processor dialog.  That dialog
    needs a bunch of work in the coming days, so I'm postponing any edits
    for now, but in the meantime, this cleans up the repository a bit.
Commits on Apr 28, 2016
  1. Metadata control: new function for retrieving null metadata settings

    committed Apr 28, 2016
    Export dialogs can use this to retrieve a stock "do not embed metadata"
    XML packet (which we do for web-optimized PNGs).
  2. JPEG thumbnails: skip creation of temp thumbnail file...

    committed Apr 28, 2016
    ...when metadata embedding is disabled for an image
  3. PNG export: add previews for lossy optimization settings

    committed Apr 28, 2016
    Estimated file size reduction is also provided, to give a better idea of
    the quality/file size trade-offs inherent in lossy PNG optimization.
    (A few other PNG-related bugfixes are also included in this commit,
  4. PNG export: web-optimization now available

    committed Apr 27, 2016
    Fixes #118, #55
    Well, this was a long time coming - but hopefully it was worth the wait.
    PD now supports full optimization for PNG files, including options for
    both lossy (via pngquant) and lossless (via optipng) compression.
    I've researched quite a few PNG optimization tools over the past two
    years, and I believe this combination yields the most bang for the buck.
    Both of these tools are open-source, actively developed, well-documented
    and well-tested.  I've also carefully researched the provided options,
    and automatically enabled the best settings for both tools, so beginners
    don't have to read a ton of documentation to get started.
    While all the major pieces are now in place, there are still two items
    left to "solve":
    - 1) Integration with batch processing.  I can't solve this until all
    image formats are migrated to the new export engine.  Once they are,
    upgrading the batch processor will be a trivial job, as the current
    dialogs can be used as-is.
    - 2) Live previews.  Because PNG optimization requires us to shell
    external .exes (especially important for pngquant, which has recently
    switched to GPL licensing), live previews aren't really feasible.  For
    lossless optimization settings this obviously doesn't matter, but for
    lossy ones, it's problematic, especially given the esoteric nature of
    some of the settings.
    As I see it, there are three possible solutions:
    1) Approximating the lossy results with our own internal algorithms
    2) Simply disabling previews for the web optimization panel
    3) Providing a "show me a new preview" button that the user can hit
    All three options have trade-offs, but I'm currently leaning toward the
    "show me a preview" button, as I consider it the least offensive of the
    bunch.  This lets the user play around with settings, and because we can
    bypass certain steps when previewing, performance shouldn't be *too*
    I'll experiment with this in the coming days, but I wanted to get the
    current solution uploaded so it can receive wider testing.
Commits on Apr 27, 2016
  1. PNG export: finish testing of standard options panel

    committed Apr 26, 2016
    All custom color + alpha modes should now work!
    As an added bonus, I've added an optimization setting to this panel, to
    allow a light lossless OptiPNG pass over the finished PNG.  This can
    further improve file size, at some trade-off to encoding speed.
    Next up: the web-optimized panel, which will allow for both lossy and
    lossless optimization options.
  2. PNG export: implement saving of more manual color modes

    committed Apr 26, 2016
    All high bit-depth modes have now been implemented (64-bpp RGBA, 48-bpp
    RGB, 32-bpp grayscale (which is expanded to 64-bpp RGBA due to FreeImage
    limitations), and 16-bpp grayscale).
    Also, bkgd chunks will now be created when requested.
Commits on Apr 26, 2016
  1. PNG export: restore correct automatic color-depth detection

    committed Apr 26, 2016
    Automatic color-depth detection *should* be working again for PNG
    export.  (Manual color-depth settings have not been tested, so use at
    your own risk.)
    Still to-do is enabling OptiPNG for possible tRNS chunk reduction; this
    would fix a glaring hole in FreeImage's PNG support, while enabling
    smaller PNGs, so hopefully I can get it working.
  2. PNG export: all standard export modes support live previews

    committed Apr 25, 2016
    This was an absolutely massive project, but I hope the end result is
    worth it.  PNGs support so many different color modes and alpha modes
    and bit-depths (including HDR modes) and getting them all working has
    been a huge headache.
    (I also needed to sort all this out prior to implementing web-optimized
    PNGs, so very nice to have this done!)
    PLEASE NOTE: PNGs are not actually exported with the selected color and
    alpha settings.  That's my next task.  (At present, PNGs are output at
    32-bpp because the PNG export chain is still leaning the old export
    engine.  This will be fixed shortly.)
  3. FreeImage interface: many new features

    committed Apr 25, 2016
    Expanded PNG support is kicking my ass, but I think I've finally sorted
    through the messiest conversion approaches.  8-bpp conversions have
    received a ton of love with this update, and we now use a highly
    optimized, much higher quality mechanism for generating 8-bpp images
    with transparency.  (The GIF export plugin also benefits from this work,
    so wins all around!)
    FreeImage has a lot of weird feature gaps that make color conversions
    problematic.  In particular, their support for 8-bpp images with
    transparency is really strange.  It's like a bastard child between GIF
    features and PNG features, but it doesn't really work right for either.
    This requires us to manually perform a lot of color transformation work,
    but the end result should be much higher-quality images than PD has
    historically exported.  (And we should be able to do it much more
    quickly, to boot.)
  4. pdDIB: a bunch of new transparency processing features

    committed Apr 25, 2016
    These are required by the export engine.  Older, non-optimal versions of
    some of these functions still exist; I hope to remove them in the near
    future, pending additional testing.
Commits on Apr 25, 2016
Commits on Apr 23, 2016
  1. Grayscale conversion: fix potential premultiplied alpha bug

    committed Apr 23, 2016
    Also, added some additional performance optimizations
  2. BMP export: fix palette size in grayscale mode

    committed Apr 23, 2016
    Grayscale mode was accidentally picking up the palette size from RGB
    mode (where the palette size is settable).
Commits on Apr 22, 2016
  1. PNG Export dialog: implement main settings UI

    committed Apr 22, 2016
    The PNG export dialog is broken into two main panels: standard PNGs, and
    web-optimized PNGs.  After a lot of research, mockups, and testing, I
    think this is the most sensible separation, as web-optimized PNGs
    include a bunch of weird, non-standard options (like lossy processing)
    that are very different from how PNG export dialogs work in other
    The "standard PNG" panel UI is in place as of this commit.  A ton of
    settings need to be shown or hidden contingent on other settings, so the
    UI code is fairly involved, but I think the end result is a "dream come
    true" for power users, while also hiding a lot of the most confusing
    bits from beginners.
    (The "web-optimized" panel is coming soon, but given its complexity, I
    wanted to get the standard settings panel sorted out first.)
    Previews and actual saving of PNGs according to the displayed settings
    is totally broken, FYI.
Commits on Apr 21, 2016
  1. Fix PD not appearing in Alt+Tab list on old OSes

    committed Apr 21, 2016
    Many thanks to Chen Lin for not just tracking this down, but also
    suggesting an elegant fix.
  2. LittleCMS: initialize by default at start-up

    committed Apr 21, 2016
    And similarly, free by default as shutdown.
    Version-checking the DLL using native LCMS functions has also been
  3. Auto-translate function: fix errors if IE is uninstalled

    committed Apr 20, 2016
    Thank you to Chen Lin for reporting
Commits on Apr 20, 2016
  1. OptiPNG: now available as a plugin

    committed Apr 20, 2016
    I'm going all-in on PNG optimization for 7.0, with full options for both
    lossy or lossless (or both!) optimizations.
    (I also needed OptiPNG in place before creating the new PNG export
  2. Plugin management: total overhaul

    committed Apr 20, 2016
    In the early days of PD, I tried to write every new program feature from
    scratch.  As PD has grown more complex, NIH syndrome has become
    increasingly problematic because there are some areas (file format
    support, color management, metadata handling) where VB's performance and
    capabilities are simply a bad fit for the tasks involved.
    So as time goes by, I'm more and more prone to offload complex
    functionality to well-known, open-source 3rd party libraries.  This
    frees me up to write novel code instead of just reinventing the wheel!
    For the 7.0 release in particular, I'm looking to add in quite a bit of
    new functionality via 3rd-party libraries, which in turn means a *lot*
    of new plugin code.
    Prior to this commit, plugin management code was spewed across a bunch
    of different modules, classes, and dialogs.  This made it incredibly
    difficult to add new plugins, and it also made it very hard to manage
    plugin-specific features.
    But no more!  High-level plugin management has now been condensed into a
    single module (PluginManager), and only that module needs to be touched
    when adding a new 3rd-party library to PD.  (Obviously you'll still need
    to write plugin-specific code for any features, but the plugin manager
    will properly handle updates, initialization, and other steps for you.)
    This fix also required a total overhaul of the Plugin Manager dialog.
    That dialog is now completely generated at run-time, with all relevant
    information pulled from the PluginManager module.  This frees me from
    having to do any UI work when adding new 3rd-party plugins, and as a
    bonus, it also trimmed down the Plugin Dialog UI by a large amount.
    (Translations and theming are also supported by that dialog now - yay!)
Commits on Apr 19, 2016
  1. Fix broken accelerator behavior

    committed Apr 19, 2016
    Thank you to Chen Lin for reporting.
    Hotkeys in the layer toolbox are momentarily suspended, pending an
    upgrade to a dedicated layer toolbox solution.
Commits on Apr 18, 2016
  1. Updated Chinese language file

    committed Apr 18, 2016
    Many thanks to Chen Lin for his continued work!
  2. LittleCMS: include as an official plugin

    committed Apr 18, 2016
    As I continue work on the image import and export engines, various color
    management bits will be migrated over to the far-superior LittleCMS
    So as of this build, LittleCMS is included by default, and it is now
    considered an integral part of the program.
  3. Plugin Manager: UI overhaul

    committed Apr 18, 2016
    Still quite a bit of work left to do, but this is a good start.
    (Replacing the old VB label-based "hyperlink" controls was particularly
    nice, as it killed off the stupid .frx file!)
Something went wrong with that request. Please try again.