Tags: richmit/mraster
Tags
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.
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
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
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
Unit tests for ramCanvasTpl. Details This is release candidate #1! Please test and report back!
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.
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.
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.
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
PreviousNext