libCZI
Reading CZI documents made easy
libCZI::Utils Class Reference

A bunch of utility functions. More...

#include <libCZI_Utilities.h>

Static Public Member Functions

static char DimensionToChar (libCZI::DimensionIndex dim)
 
static libCZI::DimensionIndex CharToDimension (char c)
 
static int CalcMd5SumHash (libCZI::IBitmapData *bm, std::uint8_t *ptrHash, int hashSize)
 
static int CalcMd5SumHash (const void *ptrData, size_t sizeData, std::uint8_t *ptrHash, int hashSize)
 
static std::vector< std::uint8_t > Create8BitLookUpTableFromSplines (int tableElementCnt, float blackPoint, float whitePoint, const std::vector< libCZI::IDisplaySettings::SplineData > &splineData)
 
static std::vector< std::uint8_t > Create8BitLookUpTableFromGamma (int tableElementCnt, float blackPoint, float whitePoint, float gamma)
 
static std::vector< libCZI::IDisplaySettings::SplineDataCalcSplineDataFromPoints (int pointCnt, std::function< std::tuple< double, double >(int idx)> getPoint)
 
static std::shared_ptr< libCZI::IBitmapDataNearestNeighborResize (libCZI::IBitmapData *bmSrc, int dstWidth, int dstHeight)
 
static std::shared_ptr< libCZI::IBitmapDataNearestNeighborResize (libCZI::IBitmapData *bmSrc, int dstWidth, int dstHeight, const DblRect &roiSrc, const DblRect &roiDest)
 
static float CalcZoom (const libCZI::IntRect &logicalRect, const libCZI::IntSize &physicalSize)
 
static float CalcZoom (const libCZI::IntSize &logicalSize, const libCZI::IntSize &physicalSize)
 
static const char * PixelTypeToInformalString (libCZI::PixelType pixeltype)
 
static const char * CompressionModeToInformalString (libCZI::CompressionMode compressionMode)
 
static std::string DimCoordinateToString (const libCZI::IDimCoordinate *coord)
 
static bool StringToDimCoordinate (const char *sz, libCZI::CDimCoordinate *coord)
 
static std::string DimBoundsToString (const libCZI::IDimBounds *bounds)
 
static std::shared_ptr< libCZI::IIndexSetIndexSetFromString (const std::wstring &s)
 
static libCZI::PixelType TryDeterminePixelTypeForChannel (libCZI::ISubBlockRepository *repository, int channelIdx)
 
static int Compare (const IDimCoordinate *a, const IDimCoordinate *b)
 
static bool HasSameDimensions (const IDimCoordinate *a, const IDimCoordinate *b)
 
static bool EnumAllCoordinates (const libCZI::CDimBounds &bounds, const std::function< bool(std::uint64_t, const libCZI::CDimCoordinate &coord)> &func)
 
static void FillBitmap (libCZI::IBitmapData *bm, const libCZI::RgbFloatColor &floatColor)
 

Detailed Description

A bunch of utility functions.

Member Function Documentation

◆ CalcMd5SumHash() [1/2]

static int libCZI::Utils::CalcMd5SumHash ( libCZI::IBitmapData bm,
std::uint8_t *  ptrHash,
int  hashSize 
)
static

Calculates the MD5SUM hash for the pixels in the specified bitmap.

Parameters
[in]bmThe bitmap.
[in,out]ptrHashPointer to the hash-code result. The result will be of size 16 bytes.
hashSizeSize of the hash-code result pointed to by ptrHash. We need 16 bytes.
Returns
The count of bytes that were written to in ptrHash as the MD5SUM-hash (always 16).

◆ CalcMd5SumHash() [2/2]

static int libCZI::Utils::CalcMd5SumHash ( const void *  ptrData,
size_t  sizeData,
std::uint8_t *  ptrHash,
int  hashSize 
)
static

Calculates the MD5SUM hash for the specified data.

Parameters
[in]ptrDataPointer to the data (for which to calculate the MD5SUM-hash).
[in]sizeDataThe size of the data (pointed to by ptrData).
[in,out]ptrHashPointer to the hash-code result. The result will be of size 16 bytes.
hashSizeSize of the hash-code result pointed to by ptrHash. We need 16 bytes.
Returns
The count of bytes that were written to in ptrHash as the MD5SUM-hash (always 16).

◆ CalcSplineDataFromPoints()

static std::vector<libCZI::IDisplaySettings::SplineData> libCZI::Utils::CalcSplineDataFromPoints ( int  pointCnt,
std::function< std::tuple< double, double >(int idx)>  getPoint 
)
static

Calculates the spline coefficients from a list of control points.

Parameters
pointCntNumber of control points.
getPointA functor which will be used to retrieve the control point's coordinates.
Returns
The calculated spline data from the specified control points.

◆ CalcZoom() [1/2]

static float libCZI::Utils::CalcZoom ( const libCZI::IntRect logicalRect,
const libCZI::IntSize physicalSize 
)
inlinestatic

Calculate a zoom-factor from the physical- and logical size.

Remarks
This calculation not really well-defined.
Parameters
logicalRectThe logical rectangle.
physicalSizePhysical size.
Returns
The calculated zoom.

◆ CalcZoom() [2/2]

static float libCZI::Utils::CalcZoom ( const libCZI::IntSize logicalSize,
const libCZI::IntSize physicalSize 
)
inlinestatic

Calculate a zoom-factor from the physical- and logical size.

Remarks
This calculation not really well-defined.
Parameters
logicalSizeThe logical size.
physicalSizeThe physical size.
Returns
The calculated zoom.

◆ CharToDimension()

static libCZI::DimensionIndex libCZI::Utils::CharToDimension ( char  c)
static

Convert the specifed single character to the corresponding dimension enum. The single character may be given uppercase or lowercase. In case that no corresponding dimension enum exists, DimensionIndex::invalid is returned.

Parameters
cThe "single char representation" of a dimension.
Returns
A enum value representing the specified dimension if it exists, DimensionIndex::invalid otherwise.

◆ Compare()

static int libCZI::Utils::Compare ( const IDimCoordinate a,
const IDimCoordinate b 
)
static

Compares two coordinate-objects to determine their relative ordering. The algorithm employed is: we check for all coordinates which are marked valid in a or b (in the order of the numerical value or the enum)...

  1. coordinateA(dim) is valid and coordinateB(dim) is invalid -> a > b
  2. coordinateA(dim) is invalid and coordinateB(dim) is valid -> a < b
  3. if both are valid, then the coordinate-values are determined and compared
Parameters
aFirst coordinate to be compared.
bSecond coordinate to be compared.
Returns
Negative if 'a' is less than 'b', 0 if they are equal, or positive if it is greater.

◆ CompressionModeToInformalString()

static const char* libCZI::Utils::CompressionModeToInformalString ( libCZI::CompressionMode  compressionMode)
static

Retrieves an informal string representing the specified compression mode.

Parameters
compressionModeThe pixel-type.
Returns
A pointer to a static string. Will always be non-null (even in case of an invalid value for compressionMode).

◆ Create8BitLookUpTableFromGamma()

static std::vector<std::uint8_t> libCZI::Utils::Create8BitLookUpTableFromGamma ( int  tableElementCnt,
float  blackPoint,
float  whitePoint,
float  gamma 
)
static

Creates 8-bit look-up table from the specified gamma value. An exponential with the specified gamma is sampled between blackPoint and whitePoint (i. e. points left of blackPoint are set to 0 and right of whitePoint are set to 1).

Parameters
tableElementCntNumber of points to sample - the result will have as many samples as specified here.
blackPointThe black point.
whitePointThe white point.
gammaThe gamma.
Returns
The new 8-bit look up table generated from the spline. The number is elements is as specified by tableElementCount.

◆ Create8BitLookUpTableFromSplines()

static std::vector<std::uint8_t> libCZI::Utils::Create8BitLookUpTableFromSplines ( int  tableElementCnt,
float  blackPoint,
float  whitePoint,
const std::vector< libCZI::IDisplaySettings::SplineData > &  splineData 
)
static

Creates an 8-bit look-up table from the specifed splines. A spline is sampled between blackPoint and whitePoint (i. e. points left of blackPoint are set to 0 and right of whitePoint are set to 1).

Parameters
tableElementCntNumber of points to sample - the result will have as many samples as specified here.
blackPointThe black point.
whitePointThe white point.
splineDataInformation describing the spline.
Returns
The new 8-bit look up table generated from the spline. The number is elements is as specified by tableElementCount.

◆ DimBoundsToString()

static std::string libCZI::Utils::DimBoundsToString ( const libCZI::IDimBounds bounds)
static

Get a string representation of the specified bounds.

Parameters
boundsThe bounds.
Returns
A string representation of the specified bounds.

◆ DimCoordinateToString()

static std::string libCZI::Utils::DimCoordinateToString ( const libCZI::IDimCoordinate coord)
static

Get a string representation of the specified coordinate.

Parameters
coordThe coordinate.
Returns
A string representation of the specified coordinate.

◆ DimensionToChar()

static char libCZI::Utils::DimensionToChar ( libCZI::DimensionIndex  dim)
static

Convert the specifed dimension enum to the corresponding "single char representation". The returned character will be uppercase. If the specified dimension enum cannot be converted, '?' is returned.

Parameters
dimThe dimension enum.
Returns
A character representing the specified dimension.

◆ EnumAllCoordinates()

static bool libCZI::Utils::EnumAllCoordinates ( const libCZI::CDimBounds bounds,
const std::function< bool(std::uint64_t, const libCZI::CDimCoordinate &coord)> &  func 
)
static

Enumerate all coordinates "contained" in the specified bounds. The specified function is called with all valid coordinates (which lie inside the bounds). The first argument to the function is a counter which increments for each generated coordinate (and starts with 0). If the function returns false, the enumeration is ended, and this function returns immediately with false.

Parameters
boundsThe bounds.
funcThe function to be called with the generated coordinates.
Returns
True if the enumeration completed, false if it was cancelled (by returning false from the callback).

◆ FillBitmap()

static void libCZI::Utils::FillBitmap ( libCZI::IBitmapData bm,
const libCZI::RgbFloatColor floatColor 
)
static

Fill the specified bitmap with the specified color.

Parameters
[in,out]bmThe bitmap.
floatColorThe color.

◆ HasSameDimensions()

static bool libCZI::Utils::HasSameDimensions ( const IDimCoordinate a,
const IDimCoordinate b 
)
static

Test whether the two specified coordinates have the same set of valid dimensions.

Parameters
aThe first coordinate-object to compare.
bThe second coordinate-object to compare.
Returns
True if the two coordinates have the same set of valid dimensions, false otherwise.

◆ IndexSetFromString()

static std::shared_ptr<libCZI::IIndexSet> libCZI::Utils::IndexSetFromString ( const std::wstring &  s)
static

Create an index-set object from a string representation. The string is a list of intervals, seperated by comma (','). It can be of the form "5", "17", "3-5", "-3-5". The string "inf" (meaning 'infinity') is recognized in order to express "all numbers up to" or "all numbers after" , e. g. "-inf-4" or "5-inf". In case of an invalid string, an LibCZIStringParseException exception is thrown.

Parameters
sThe string to convert to an index-set object.
Returns
A newly create std::shared_ptr<libCZI::IIndexSet> object.

◆ NearestNeighborResize() [1/2]

static std::shared_ptr<libCZI::IBitmapData > libCZI::Utils::NearestNeighborResize ( libCZI::IBitmapData bmSrc,
int  dstWidth,
int  dstHeight 
)
static

Resize the specified bitmap to the specified width and height. This method employs a nearest-neighbor-scaling algorihm.

Parameters
[in]bmSrcThe source bitmap.
dstWidthWidth of the destination.
dstHeightHeight of the destination.
Returns
A std::shared_ptr<libCZI::IBitmapData > containing the scaled bitmap.

◆ NearestNeighborResize() [2/2]

static std::shared_ptr<libCZI::IBitmapData > libCZI::Utils::NearestNeighborResize ( libCZI::IBitmapData bmSrc,
int  dstWidth,
int  dstHeight,
const DblRect roiSrc,
const DblRect roiDest 
)
static

Resize a ROI from the specified bitmap to the specified width and height. This method employs a nearest-neighbor-scaling algorihm.

Parameters
[in]bmSrcThe source bitmap.
dstWidthWidth of the destination.
dstHeightHeight of the destination.
roiSrcThe ROI (in the source bitmap).
roiDestThe ROI (in the destination bitmap)
Returns
A std::shared_ptr<libCZI::IBitmapData >

◆ PixelTypeToInformalString()

static const char* libCZI::Utils::PixelTypeToInformalString ( libCZI::PixelType  pixeltype)
static

Retrieves an informal string representing the specified pixeltype.

Parameters
pixeltypeThe pixel-type.
Returns
A pointer to a static string. Will always be non-null (even in case of an invalid value for pxltp.

◆ StringToDimCoordinate()

static bool libCZI::Utils::StringToDimCoordinate ( const char *  sz,
libCZI::CDimCoordinate coord 
)
static

Convert the specified string into a dimension-coordinate instance.

Parameters
szThe string to convert.
[out]coordIf non-null and if the parsing was successful, the information will be put here.
Returns
True if the string parsed successfully, false otherwise.

◆ TryDeterminePixelTypeForChannel()

static libCZI::PixelType libCZI::Utils::TryDeterminePixelTypeForChannel ( libCZI::ISubBlockRepository repository,
int  channelIdx 
)
static

Try to determine the pixel type for channel. This is done by looking at an (arbitrary) subblock within the specified channel. There are cases where this does not yield a result - e. g. if there is no subblock present with the specified channel-index.

Parameters
[in]repositoryThe CZI-document.
channelIdxThe channel index.
Returns
The pixeltype if it can be determined. If it cannot be determined reliably (e.g. there is no subblock with the specified channel-index), then PixelType::Invalid is returned.

The documentation for this class was generated from the following file: