Skip to content

Tags: richmit/mraster

Tags

v20.12.0

Toggle v20.12.0's commit message
Feature Release

Details

  - Examples
    - Many examples have been improved
    - New:
      - newton_max_back.cpp'
      - newton_min_root.cpp
      - mandelbrot_ltrap.cpp
      - mandelbrot_pickover.cpp
      - biomorphMorph.cpp
      - mandelbrot_precomp.cpp
      - julia.cpp
      - juliaM2.cpp
      - juliaM.cpp
      - newton_modified.cpp
    - Renamed:
  	- mandelbrot_cycles.cpp -> mandelbrot_1n2cycles.cpp
    - New/updated web pages:
      - https://www.mitchr.me/SS/biomorphMorph/index.html
      - https://www.mitchr.me/SS/newton/index.html
    - Removed:
      - newton_bm_*.cpp
      - mandelbrot_distance_old.cpp
      - mandelbrot_bm_real_eqop.cpp
      - mandelbrot_1n2cycles.cpp
  - Bugs
    - mjr::ramCanvasTpl::expandCanvas.  Fixed a bug with monochrome
      images.  Changed the behavior when x1 or y1 is off the
      canvas. Fixed a bug with non-zero x1 argument.
    - Swapped mjr::ramCanvasTpl::rotate90CW &
      mjr::ramCanvasTpl::rotate90CW
    - mjr::ramCanvasTpl::autoMaxHistStrech(). Fixed bug when RGB were not
      on default channels.
  - New functionality
    - ramCanvasTpl::getCanvasWidD()
    - New canvas converter: rcConverterMonoIntensity
    - ramCanvasTpl::adjoinCanvasRight()
    - ramCanvasTpl::adjoinCanvasLeft()
    - ramCanvasTpl::adjoinCanvasBottom()
    - ramCanvasTpl::adjoinCanvasTop()
    - ramCanvasTpl::insertCanvas() -- insert a canvas into another canvas
    - mjr::sgn() -- the sign function
    - mjr::point2d now has a conversion operator for complex numbers
    - ramCanvasTpl now has coordinate conversion methods that work
      with point2d allowing code like this:
        std::complex<double> c = theRamCanvas.int2real(x, y);
      - mjr::ramCanvasTpl::int2real
      - mjr::ramCanvasTpl::real2int
    - mjr::fmtInt(int inInt, int width, char fill) -- Strings with
      formatted integers in them.  Someday when compilers support the
      C++20 formatting features, we won't need this...
    - colorTpl::distDeltaE1976(colorArgType aColor) -- The LAB Delta E*(1976) distance
    - colorTpl::distDeltaE1994(colorArgType aColor) -- The LAB Delta E*(1994) distance
    - Real coordinate overloads for:
      - ramCanvasTpl::drawHersheyGlyph
      - ramCanvasTpl::drawString
      - ramCanvasTpl::drawStringBox
    - Polynomial routines
      - mjr::evalBiPoly -- bivariate polynomial evaluation
      - mjr::maxExpBiPoly -- figure out maximum theoretical exponent of a bivariate polynomial
      - mjr::evalUniPoly -- univariate polynomial evaluation
    - New log transformation function colorTpl::tfrmLn(double scale) -- note new name for
      the old version of this function: tfrmLn1()
  - API Change
    - colorTpl::tfrmLn()  renamed to tfrmLn1()
    - ramCanvasTpl::autoMaxHistStrech renamed to autoMaxHistStrechRGB
  - Updated/New experimental geometric transformations functionality (geomTfrmRev* methods)
    These feel like they are approaching a final state, but I'm going to keep them classified
    as "experimental" for now.
    - Fixed a clipping bug for existing geomTfrmRef functions:
      - ramCanvasTpl::geomTfrmRevRPoly
      - ramCanvasTpl::geomTfrmRevAff
      - ramCanvasTpl::geomTfrmRevArb
    - Transform methods now take a uniform set of shift & scale arguments:
      - Xo -- X coordinate for the offset from image center.
      - Yo -- Y coordinate for the offset from image center.
      - oScale -- Scale to apply after transform but before reverse translation
  - Started making some unit tests for mjrmath.hpp.  Coverage right now is just for the new
    polynomial routines.

v20.11.0

Toggle v20.11.0's commit message
Feature Release

Details

  - Removed recently introduced GCC'isms.  The code now compiles
    cleanly with clang and msvc.
  - New examples:
    - pickoverPopcorn.cpp
    - mandelbrot_biomorph.cpp
    - mandelbrot_simple.cpp
    - invertedMandelbrot.cpp
    - tippets.cpp
    - multibrotSnaps.cpp
    - multibrotMovie.cpp
    - tricornMovie.cpp
    - tricorn.cpp
    - collatz.cpp
  - New web pages for examples:
    - https://www.mitchr.me/SS/BurningShip/index.html
    - https://www.mitchr.me/SS/multibrot/index.html
    - https://www.mitchr.me/SS/tricorn/index.html
    - https://www.mitchr.me/SS/collatz/index.html
    - https://www.mitchr.me/SS/tippets/index.html
    - https://www.mitchr.me/SS/PickoverPopcorn/index.html
    - https://www.mitchr.me/SS/mandelbrotBiomorph/index.html
    - https://www.mitchr.me/SS/mandelbrotInv/index.html
  - Updated examples:
    - sic.cpp -- Updated the comment on the colorizer object to
      reference another way to do the same thing illustrated in the
      pickoverPopcorn.cpp example.
    - biomorph2.cpp & biomorph1.cpp -- Cleaned up the way colors were
      set.
    - mandelbrot_bm_real.cpp & mandelbrot_bm_real_eqop.cpp -- Fixed
      typos in header.
  - New feature:
    - ramCanvasTpl::rcConverterColorScheme -- Colorize a ramCanvasTpl
      with integer channels using a color scheme.  This gives one the
      ability to produce a ramCanvasTpl with some data in it, and then
      colorize it when the image files are written out.  For example,
      we could store the L function for a Mandelbrot render in a
      grayscale image, and then write out any number of RGB images
      with different color schemes.
    - New class of color schemes: common fractal schemes
      - colorTpl::csCCfractal0RYBCW
      - colorTpl::csCCfractalYR
      - colorTpl::csCCfractalYB
    - New class of color schemes: Ramp from black to corner
      - colorTpl::csCCu0W -- Ramp from black to white
      - colorTpl::csCCu0R -- Ramp from black to red
      - colorTpl::csCCu0B -- Ramp from black to blue
      - colorTpl::csCCu0G -- Ramp from black to green
      - colorTpl::csCCu0C -- Ramp from black to cyan
      - colorTpl::csCCu0M -- Ramp from black to magenta
      - colorTpl::csCCu0Y -- Ramp from black to yellow

v20.10.5

Toggle v20.10.5's commit message
Public Release

Details

  I'm done with major changes, and the code feels solid.

v20.10.0rc3

Toggle v20.10.0rc3's commit message
Unit tests. New features.

Details

  Release Candidate #3

  - Last time I removed the filter option from the file write APIs,
    and that annoyed some people. ;) So I have added filters back, but
    the new filters are more capable in that they can be used for not
    just homogeneous transforms but geometric ones too.
    - Removed: pixelFormatEnum
    - New converter classes inside ramCanvasTpl:
      - ramCanvasTpl::rcConverterIdentity
      - ramCanvasTpl::rcConverterRGBbyte
      - ramCanvasTpl::rcConverterRGBAbyte
      - ramCanvasTpl::rcConverterRGBdbl
      - ramCanvasTpl::rcConverterRGBAdbl
    - convertRawToTIFF.cpp illustrates the new API
  - New: "Canonical Color Types" -- color types with unsigned byte and
    floating point channels in RGB, RGBA, and numChan.  These provide a
    handy interface for conversions with the two most common channel
    types people use, and are useful for working with external
    interfaces.
    - Set color from a canonical color type
      - colorTpl& colorTpl::setChans_dbl(colConALLdbl dblColor)
      - colorTpl& colorTpl::setChans_byte(colConALLbyte byteColor)
      - colorTpl& colorTpl::setChansRGBA_dbl(colConRGBAdbl dblColor)
      - colorTpl& colorTpl::setChansRGB_dbl(colConRGBdbl dblColor)
      - colorTpl& colorTpl::setChansRGBA_byte(colConRGBAbyte byteColor)
      - colorTpl& colorTpl::setChansRGB_byte(colConRGBbyte byteColor)
    - convert color to a canonical color type
      - colConALLdbl   colorTpl::getColCon_dbl()
      - colConALLbyte  colorTpl::getColCon_byte()
      - colConRGBAdbl  colorTpl::getColConRGBA_dbl()
      - colConRGBdbl   colorTpl::getColConRGB_dbl()
      - colConRGBAbyte colorTpl::getColConRGBA_byte()
      - colConRGBbyte  colorTpl::getColConRGB_byte()
    - typedefs for  canonical color types
      - colorTpl::colConRGBdbl
      - colorTpl::colConRGBAdbl
      - colorTpl::colConRGBbyte
      - colorTpl::colConRGBAbyte
      - colorTpl::colConALLdbl
      - colorTpl::colConALLbyte
  - New integer axis orientation predicates
    - ramCanvasTpl::isIntAxOrientationNaturalX()
    - ramCanvasTpl::isIntAxOrientationNaturalY()
  - New helpers to guess named channel.  These are helpful when
    we have a color with unknown structure, and want to get the
    best option for a named color channel.
    - colorTpl::bestRedChan()
    - colorTpl::bestGreenChan()
    - colorTpl::bestBlueChan()
    - colorTpl::bestAlphaChan()
  - Unit tests
    - colorTpl::colCon*
    - colorTpl::best*Chan
  - sic.cpp now uses the filter instead of making a new ramCanvasTpl
    object -- like it did in the past.
  - Added DO_CIRCLE to bmark.cpp
  - Doxygen tag files & links into doxygen docs.
  - Unit tests for ramCanvasTpl simple geom transforms

v20.9.0rc2

Toggle v20.9.0rc2's commit message
Bug fixes. Unit tests. New features. Better platform support.

Details

  Release Candidate #2

  - Bugs:
    - ramCanvasTpl::writeFile
      - Failed to pass return code from stream write helper function.
      - Potential beyond buffer access
  - New features:
    - ramCanvasTpl::readRAWfile
  - Breaking Changes
    - Replaced the toTRU & filter arguments with an enum to convert to
      8-bit RGB/RGBA. In addition, writeTIFF* no longer has an alpha
      argument -- the enum takes care of that too.
  - Unit tests for ramCanvasTpl now use isEqual and readRAWfile instead
    of comparing file content.
  - Platform Support
    - Tested with several OS/compiler combinations
      - Windows with MSVC, MSYS2 MSVC, MSYS2 clang, and MSYS2 GCC
      - Debian 11 with GCC-10, and GCC-11
      - MacOS with Apple clang and homebrew GCC
    - Made several little code changes for better platform support.
    - The big change is a couple of macros controlling conditional
      compilation of code.  This allows the code to be compiled, with
      some reduced functionality, using some older compilers.
      - Added a couple of conditional compiles:
        - MISSING_P0476R2 -- Omits code using bit_cast
        - MISSING_P1907R1 -- Omits code using floating point template parameters
      - Added cmake rules for conditional code:
        - Detect GCC version and set MISSING_P0476R2 & MISSING_P1907R1 as required.
        - Set MISSING_P1907R1 for clang (both regular and Apple)
        - Set MISSING_P0476R2 for Apple clang

v20.8.2rc1

Toggle v20.8.2rc1's commit message
Unit tests for ramCanvasTpl.

Details

  This is release candidate #1!  Please test and report back!

v20.8.1b

Toggle v20.8.1b's commit message
Unit tests for ramCanvasTpl. Bugs. New stuff.

Details

  I'm still calling it a beta, but it's pretty solid right now.

  Please test and report back!

  - New predefined ramCanvas types:
    - ramCanvas4c64b
    - ramCanvas3c64b
    - ramCanvasRGBA64b
    - ramCanvasRGB64b
    - ramCanvas1c32F
    - ramCanvas1c64F
  - Added const:
    - colorTpl::rgb2GreyDotProd
    - colorTpl::luminanceRGB
    - colorTpl::intensityRGB
    - colorTpl::intensity
    - colorTpl::intensityScaledRGB
    - colorTpl::intensityScaled
    - colorTpl::getMaxC
    - colorTpl::getMinC
    - colorTpl::getMaxRGB
    - colorTpl::getMinRGB
    - colorTpl::dotProd
    - colorTpl::distHypot
    - colorTpl::distSumAbs
    - colorTpl::distMaxAbs
    - colorTpl::isClose
    - colorTpl::isCloseRGB
    - colorTpl::isEqual
    - colorTpl::isEqualRGB
    - colorTpl::isNotEqual
    - colorTpl::isBlack
    - colorTpl::isBlackRGB
  - ramCanvasTpl::drawFillTriangleUtl
    - Better comment for cases & code
    - Much better organization of code for each case
    - Much faster for degenerate triangles using barycentric coloring
    - Much more accurate barycentric coloring, but a slight performance hit.
    - More accurate edges.
  - ramCanvasTpl::triangleEdger
    - Added code to find min/max for each y value...
    - I plan on updating this to support cropped triangles at some point.

v20.8.0b

Toggle v20.8.0b's commit message
ramCanvasTpl refactor. clang support. Cleanup.

Details

  Still beta, but approaching production.

  Please test and report back!

  - ramCanvasTpl refactor
    - Data member naming consistency
    - Fixed get/set methods to use uniform naming
    - Added requires
    - Comment cleanup
  - Clang support
    - Duplicated requires clauses as necessary
    - Added conditional compile around floating point template parameters
    - Added defines to CMakeLists.txt
    - Added warnings about missing examples to CMakeLists.txt
    - Propagated requires outside of class definition
  - Bugs
    - colorTpl::distHypot
    - colorTpl::rgb2GreyDotProd
  - Upgrades
    - colorTpl::cmpRGBcornerDGradiant -- Faster & safer.
  - Removed FLTK from CMakeLists.txt -- it was not used.

v20.7.0b

Toggle v20.7.0b's commit message
New Features. Bug Fixes. Unit Tests.

Details

  Still beta, but approaching production.

  Please test and report back!

  - Many more unit tests
  - Bug Fixes (mostly related to getC# refactor)
    - setRGBfromUnitHSL
    - cmpRGBcornerDGradiant
    - isBlackRGB
    - isEqualRGB
    - cmpGradiant
    - rgb2colorSpace
    - tfrmStdPowRGB
    - rgb2GreyDotProd
    - luminanceRGB
    - getMaxRGB
    - getMinRGB
  - New
    - isClose
    - isCloseRGB
    - linearInterpolateRGB
    - csCCdivBWR
    - csCCdivCWM
    - setChansToMean()
  - The color space colorTpl<double, 3> typedef is colSpaceDbl3
  - Fixed color swatch names for web safe pallets in documentation.
  - Fixed bug with csWSprotanopia class name
  - Fixed class names for binary schemes.
  - SDL2 support
    - Added SDL2 to CMakeLists.txt so it's easy to add SDL code.
    - Added a new example: displayImageSDL2.cpp
  - Better support for msys2 on windows:
    Added options in CMakeLists.txt to make GLUT, FLTK, & SDL2 code be
    compiled as a "GUI" application instead of a "console" application
    as before.  The console applications would fail to open a window
    when run within some contexts.  I may need to do something for
    MSVC too, but I don't know as much about that environment...
  - Color documentation (ColorSchemes.org)
    - Added binary pallets
    - Added three segment CC diverging color schemes
    - Added continuous swatches to fixed pallets
    - Added cross reference
  - Various documentation updates.

v20.6.0b

Toggle v20.6.0b's commit message
Refactor, Bug Fixs, Unit Tests

Details

  Still beta.  Still a few API changes, but things are stabilizing.

  Please test and report back!

  - Tons of unit tests
  - Rearranged some code in colorTpl for better Doxygen results.
  - colorTpl::csFP_tpl now provides both discreet and continuous color
    schemes via overloads to the c member.  Much like csCB_tpl.
  - New:
    - colorTpl::csWS_tpl -- A color scheme template for web safe colors
    - colorTpl::setRGBAfromLogPackIntBGRA
    - colorTpl::setRGBfromLogPackIntBGRA
  - Fixed bugs
    - colorTpl::tfrmDiracTot
    - colorTpl::tfrmStdPowRGB
    - colorTpl::tfrmLn
    - colorTpl::tfrmLinearGreyLevelScaleRGB
    - colorTpl::tfrmWebSafeRGB
      - When clrChanT wasn't uint8_t, this function would scale the
        components incorrectly.  Not sure this is really a bug as "web
        safe" doesn't really apply to such images.  Still, it's fixed.
      - Now only operates on the red, blue, and green channels.
    - colorTpl::intensityScaledRGB
      Scaling was incorrect for images with more than 3 channels.
      - RGBA Bugs Fixed (using getC instead of getRed/Blue/Green/Alpha)
        - colorTpl::tfrmGreyScaleRGB
        - colorTpl::tfrmWebSafePro216
        - colorTpl::tfrmWebSafeDeu216
        - colorTpl::tfrmWebSafeTri216
  - Renamed
    - tfrmWebSafe216              -> tfrmWebSafeRGB
    - interplColors(dbl, c1, c2)  -> linearInterpolate
    - interplColors(dbl, col)     ->  tfrmMix
  - Removed:
    - colorTpl::tfrmGmeanClamp
    - colorTpl::colorComp2CloseColorComp
    - colorTpl::tfrmWebSafePro216
    - colorTpl::tfrmWebSafeDeu216
    - colorTpl::tfrmWebSafeTri216
    - colorTpl::tfrmLinearGreyLevelScale taking colorTpl
  - Web safe color schemes
    - Now use csWS_tpl instead of csFP_tpl.
    - Provide a setter that takes a color object
    - Renamed:
      - csFPwebSafeNormalVision    -> csWSnormalVision
      - csFPwXebSafeProtanopia     -> csWSnrotanopia
      - csFPwXebSafeDeutanopia     -> csWSdeutanopia
      - csFPwXebSafeTritanoptia    -> csWStritanoptia
      - csFPwXebSafeProtanopiaAlt  -> csWSprotanopiaAlt
      - csFPwXebSafeDeutanopiaAlt  -> csWSdeutanopiaAlt
      - csFPwXebSafeTritanoptiaAlt -> csWStritanoptiaAlt