Grok 20.3.2
grk::GrkImage Class Reference

Stores header and data for an image. More...

#include <GrkImage.h>

Inheritance diagram for grk::GrkImage:
grk_image

Public Member Functions

 GrkImage ()
 Constructs a GrkImage.
bool allocCompositeData (void)
 Allocate data for tile compositing.
void copyHeaderTo (GrkImage *dest) const
 Copies only header of image and its component header.
void transferDataTo (GrkImage *dest)
 Transfer data to dest for each component, and null out "this" data.
void filterComponents (const std::vector< uint16_t > &compsToKeep)
GrkImageextractFrom (const Tile *tile_src) const
 Create new image and transfer tile buffer data.
bool composite (const GrkImage *src)
bool greyToRGB (void)
 Convert to sRGB.
template<typename T>
bool applyColourManagement (void)
bool validateICC (void)
void all_components_data_free (void)
void postReadHeader (CodingParams *cp)
void validateColourSpace (void)
bool isSubsampled () const
bool check_color (uint16_t signalledNumComps)
void apply_channel_definition (void)
void applyChannelDefinitionTypes (void)
bool needsChannelDefinitionSwap (void) const
void allocPalette (uint8_t num_channels, uint16_t num_entries)
uint32_t width (void) const
uint32_t height (void) const
void print (void) const
bool componentsEqual (bool checkPrecision) const
bool componentsEqual (uint16_t firstNComponents, bool checkPrecision) const
Rect32 getBounds (void) const
 Gets unreduced, non-subsampled image bounds.
bool subsampleAndReduce (uint8_t reduce)
 Generates subsampled and reduced bounds for components.
bool compositeInterleaved (const Tile *src, uint32_t yBegin, uint32_t yEnd)
bool postProcess (void)
bool applyColour (void)
void transferDataFrom (const Tile *tile_src_data)
bool isPostProcessNoOp (void) const
 Check if postProcess would be a no-op for the current image.
template<typename T>
void convertPrecision (void)
template<typename T>
bool apply_palette_clr ()
template<typename T>
bool execUpsample (void)
template<typename T>
void transferDataFrom_T (const Tile *tile_src_data)
template<typename T>
bool compositeInterleaved (uint16_t srcNumComps, grk_image_comp *srcComps)
 Interleave image data and copy to interleaved composite image.
template<typename T>
bool applyICC (void)

Static Public Member Functions

static GrkImagecreate (grk_image *src, uint16_t numcmpts, grk_image_comp *cmptparms, GRK_COLOR_SPACE clrspc, bool doAllocation)
 Creates a GrkImage.
static bool allocData (grk_image_comp *imageComp, bool clear)
 Allocate data for single image component.
static bool allocData (grk_image_comp *imageComp)
 Allocate data for single image component.
static void setDataToNull (grk_image_comp *comp)

Private Member Functions

 ~GrkImage ()
 Destroys a GrkImage.
template<typename T>
bool applyColour_T (void)
template<typename T>
bool convertToRGB_T ()
template<typename T>
bool compositeInterleaved_T (const Tile *src, uint32_t yBegin, uint32_t yEnd)
template<typename T>
bool postProcess_T (void)
std::string getColourSpaceString (void) const
std::string getICCColourSpaceString (cmsColorSpaceSignature color_space) const
bool isValidICCColourSpace (uint32_t signature) const
bool needsConversionToRGB (void) const
bool isOpacity (uint16_t compno) const
bool generateCompositeBounds (const grk_image_comp *srcComp, uint16_t destCompno, Rect32 *destWin)
bool generateCompositeBounds (const Rect32 &src, uint16_t destCompno, Rect32 *destWin)
bool allComponentsSanityCheck (bool equalPrecision) const
 return false if :
grk_imagecreateRGB (uint16_t numcmpts, uint32_t w, uint32_t h, uint8_t prec)
bool componentsEqual (grk_image_comp *src, grk_image_comp *dest, bool checkPrecision) const
template<typename T>
void scaleComponent (grk_image_comp *component, uint8_t precision)
template<typename T>
bool compositePlanar (uint16_t srcNumComps, grk_image_comp *srcComps)
 Copy planar image data to planar composite image.
template<typename T>
void sycc_to_rgb (T offset, T upb, T y, T cb, T cr, T *out_r, T *out_g, T *out_b)
template<typename T>
bool sycc444_to_rgb (void)
template<typename T>
bool sycc422_to_rgb (bool oddFirstX)
template<typename T>
bool sycc420_to_rgb (bool oddFirstX, bool oddFirstY)
template<typename T>
bool color_sycc_to_rgb (bool oddFirstX, bool oddFirstY)
template<typename T>
bool color_cmyk_to_rgb (void)
template<typename T>
bool color_esycc_to_rgb (void)
template<typename T>
bool cieLabToRGB (void)

Static Private Member Functions

static size_t sizeOfDataType (grk_data_type type)
static void single_component_data_free (grk_image_comp *comp)
static void copyComponent (grk_image_comp *src, grk_image_comp *dest)

Private Attributes

friend GrkObjectWrapperImpl< GrkImage >

Detailed Description

Stores header and data for an image.

Constructor & Destructor Documentation

◆ GrkImage()

grk::GrkImage::GrkImage ( )

◆ ~GrkImage()

grk::GrkImage::~GrkImage ( )
private

Destroys a GrkImage.

This is private because this struct

References all_components_data_free(), grk::grk_aligned_free(), and grk::grk_unref().

Member Function Documentation

◆ all_components_data_free()

void grk::GrkImage::all_components_data_free ( void )

◆ allComponentsSanityCheck()

bool grk::GrkImage::allComponentsSanityCheck ( bool equalPrecision) const
private

return false if :

  1. any component's data buffer is NULL
  2. any component's precision is either 0 or greater than GRK_MAX_SUPPORTED_IMAGE_PRECISION
  3. any component's signedness does not match another component's signedness
  4. any component's precision does not match another component's precision (if equalPrecision is true)
  5. any component's width,stride or height does not match another component's respective width,stride or height

References GRK_MAX_SUPPORTED_IMAGE_PRECISION, and grk::grklog.

Referenced by applyICC(), cieLabToRGB(), color_cmyk_to_rgb(), and color_esycc_to_rgb().

◆ allocCompositeData()

bool grk::GrkImage::allocCompositeData ( void )

Allocate data for tile compositing.

Returns
true if successful

References allocData(), and grk::grklog.

Referenced by grk::CodeStreamDecompress::activateScratch().

◆ allocData() [1/2]

bool grk::GrkImage::allocData ( grk_image_comp * imageComp)
static

Allocate data for single image component.

Parameters
imageCompimage component
Returns
true if successful

References allocData().

◆ allocData() [2/2]

bool grk::GrkImage::allocData ( grk_image_comp * imageComp,
bool clear )
static

Allocate data for single image component.

Parameters
imageCompimage component
clearclear image data if true
Returns
true if successful

References grk::grk_aligned_malloc(), GRK_INT_16, grk::grk_make_aligned_width(), grk::grklog, single_component_data_free(), and sizeOfDataType().

Referenced by allocCompositeData(), allocData(), apply_palette_clr(), applyICC(), create(), execUpsample(), greyToRGB(), and subsampleAndReduce().

◆ allocPalette()

void grk::GrkImage::allocPalette ( uint8_t num_channels,
uint16_t num_entries )

◆ apply_channel_definition()

void grk::GrkImage::apply_channel_definition ( void )

◆ apply_palette_clr()

template<typename T>
bool grk::GrkImage::apply_palette_clr ( )

◆ applyChannelDefinitionTypes()

void grk::GrkImage::applyChannelDefinitionTypes ( void )

Referenced by postReadHeader().

◆ applyColour()

bool grk::GrkImage::applyColour ( void )
inline

References applyColour_T(), GRK_INT_16, and GRK_INT_32.

Referenced by postProcess_T().

◆ applyColour_T()

template<typename T>
bool grk::GrkImage::applyColour_T ( void )
private

◆ applyColourManagement()

template<typename T>
bool grk::GrkImage::applyColourManagement ( void )

◆ applyICC()

◆ check_color()

bool grk::GrkImage::check_color ( uint16_t signalledNumComps)

◆ cieLabToRGB()

◆ color_cmyk_to_rgb()

template<typename T>
bool grk::GrkImage::color_cmyk_to_rgb ( void )
private

◆ color_esycc_to_rgb()

template<typename T>
bool grk::GrkImage::color_esycc_to_rgb ( void )
private

◆ color_sycc_to_rgb()

template<typename T>
bool grk::GrkImage::color_sycc_to_rgb ( bool oddFirstX,
bool oddFirstY )
private

◆ componentsEqual() [1/3]

bool grk::GrkImage::componentsEqual ( bool checkPrecision) const

◆ componentsEqual() [2/3]

bool grk::GrkImage::componentsEqual ( grk_image_comp * src,
grk_image_comp * dest,
bool checkPrecision ) const
private

◆ componentsEqual() [3/3]

bool grk::GrkImage::componentsEqual ( uint16_t firstNComponents,
bool checkPrecision ) const

References componentsEqual().

◆ composite()

bool grk::GrkImage::composite ( const GrkImage * src)

◆ compositeInterleaved() [1/2]

bool grk::GrkImage::compositeInterleaved ( const Tile * src,
uint32_t yBegin,
uint32_t yEnd )
inline

References compositeInterleaved_T(), GRK_INT_16, and GRK_INT_32.

Referenced by composite().

◆ compositeInterleaved() [2/2]

template<typename T>
bool grk::GrkImage::compositeInterleaved ( uint16_t srcNumComps,
grk_image_comp * srcComps )

Interleave image data and copy to interleaved composite image.

Parameters
srcsource image
Returns
true if successful

References generateCompositeBounds(), GRK_FMT_PXM, GRK_FMT_TIF, grk::grklog, grk::Rect< T >::height(), grk::Rect< T >::width(), grk::Rect< T >::x0, and grk::Rect< T >::y0.

◆ compositeInterleaved_T()

template<typename T>
bool grk::GrkImage::compositeInterleaved_T ( const Tile * src,
uint32_t yBegin,
uint32_t yEnd )
private

Referenced by compositeInterleaved().

◆ compositePlanar()

template<typename T>
bool grk::GrkImage::compositePlanar ( uint16_t srcNumComps,
grk_image_comp * srcComps )
private

Copy planar image data to planar composite image.

Parameters
srcsource image
Returns
true if successful

References generateCompositeBounds(), GRK_INT_16, GRK_INT_32, grk::grklog, grk::Rect< T >::height(), grk::Rect< T >::width(), grk::Rect< T >::x0, and grk::Rect< T >::y0.

Referenced by composite().

◆ convertPrecision()

template<typename T>
void grk::GrkImage::convertPrecision ( void )

◆ convertToRGB_T()

template<typename T>
bool grk::GrkImage::convertToRGB_T ( void )
private

◆ copyComponent()

void grk::GrkImage::copyComponent ( grk_image_comp * src,
grk_image_comp * dest )
staticprivate

Referenced by execUpsample(), and greyToRGB().

◆ copyHeaderTo()

void grk::GrkImage::copyHeaderTo ( GrkImage * dest) const

Copies only header of image and its component header.

Copy only header of image and its component header (no data copied) if dest image has data, it will be freed.

No data is copied. If dest has data then it will be freed

Parameters
destdestination @GrkImage
destthe dest image

References all_components_data_free(), grk::grk_ref(), grk::grk_unref(), and GrkImage().

Referenced by extractFrom(), and grk::CodeStreamCompress::init().

◆ create()

GrkImage * grk::GrkImage::create ( grk_image * src,
uint16_t numcmpts,
grk_image_comp * cmptparms,
GRK_COLOR_SPACE clrspc,
bool doAllocation )
static

Creates a GrkImage.

Parameters
srcimage source (see grk_image)
numcmptsnumber of components
cmptparmscomponent parameters
clrspcimage color space
doAllocationtrue if data is to be allocated, otherwise false
Returns
a new image if successful, otherwise nullptr

References allocData(), GRK_CHANNEL_ASSOC_COLOUR_1, GRK_CHANNEL_ASSOC_COLOUR_2, GRK_CHANNEL_ASSOC_COLOUR_3, GRK_CHANNEL_ASSOC_UNASSOCIATED, GRK_CHANNEL_TYPE_COLOUR, GRK_CHANNEL_TYPE_UNSPECIFIED, GRK_CLRSPC_CMYK, GrkImage(), and grk::grklog.

Referenced by createRGB(), and grk_image_new().

◆ createRGB()

grk_image * grk::GrkImage::createRGB ( uint16_t numcmpts,
uint32_t w,
uint32_t h,
uint8_t prec )
private

◆ execUpsample()

template<typename T>
bool grk::GrkImage::execUpsample ( void )

◆ extractFrom()

GrkImage * grk::GrkImage::extractFrom ( const Tile * src) const

Create new image and transfer tile buffer data.

Parameters
srctile source
Returns
new GrkImage if successful

References grk::Tile::comps_, copyHeaderTo(), GrkImage(), grk::Tile::numcomps_, grk::TileComponent::windowBounds(), grk::Rect< T >::x0, grk::Rect< T >::x1, grk::Rect< T >::y0, and grk::Rect< T >::y1.

Referenced by grk::TileProcessor::post_decompressT2T1().

◆ filterComponents()

void grk::GrkImage::filterComponents ( const std::vector< uint16_t > & compsToKeep)

◆ generateCompositeBounds() [1/2]

bool grk::GrkImage::generateCompositeBounds ( const grk_image_comp * srcComp,
uint16_t destCompno,
Rect32 * destWin )
private

◆ generateCompositeBounds() [2/2]

bool grk::GrkImage::generateCompositeBounds ( const Rect32 & src,
uint16_t destCompno,
Rect32 * destWin )
private

◆ getBounds()

Rect32 grk::GrkImage::getBounds ( void ) const

Gets unreduced, non-subsampled image bounds.

Component bounds my differ due to subsampling and reduction

Referenced by grk::PacketManager::getParams().

◆ getColourSpaceString()

std::string grk::GrkImage::getColourSpaceString ( void ) const
private

◆ getICCColourSpaceString()

std::string grk::GrkImage::getICCColourSpaceString ( cmsColorSpaceSignature color_space) const
private

Referenced by validateICC().

◆ greyToRGB()

bool grk::GrkImage::greyToRGB ( void )

◆ height()

uint32_t grk::GrkImage::height ( void ) const

Referenced by postReadHeader().

◆ isOpacity()

bool grk::GrkImage::isOpacity ( uint16_t compno) const
private

◆ isPostProcessNoOp()

bool grk::GrkImage::isPostProcessNoOp ( void ) const

Check if postProcess would be a no-op for the current image.

When true, tile-row data can be streamed directly to writeImageBand without running postProcess first.

References GRK_CLRSPC_CUSTOM_CIE, GRK_CLRSPC_DEFAULT_CIE, GRK_CLRSPC_EYCC, GRK_CLRSPC_GRAY, GRK_CLRSPC_SYCC, GRK_FMT_BMP, GRK_FMT_JPG, GRK_FMT_PNG, GRK_FMT_TIF, GRK_FMT_UNK, isSubsampled(), needsChannelDefinitionSwap(), and needsConversionToRGB().

◆ isSubsampled()

bool grk::GrkImage::isSubsampled ( ) const

◆ isValidICCColourSpace()

bool grk::GrkImage::isValidICCColourSpace ( uint32_t signature) const
private

Referenced by validateICC().

◆ needsChannelDefinitionSwap()

bool grk::GrkImage::needsChannelDefinitionSwap ( void ) const

◆ needsConversionToRGB()

bool grk::GrkImage::needsConversionToRGB ( void ) const
private

◆ postProcess()

bool grk::GrkImage::postProcess ( void )
inline

◆ postProcess_T()

template<typename T>
bool grk::GrkImage::postProcess_T ( void )
private

◆ postReadHeader()

◆ print()

void grk::GrkImage::print ( void ) const

References grk::grklog.

◆ scaleComponent()

template<typename T>
void grk::GrkImage::scaleComponent ( grk_image_comp * component,
uint8_t precision )
private

◆ setDataToNull()

void grk::GrkImage::setDataToNull ( grk_image_comp * comp)
static

◆ single_component_data_free()

◆ sizeOfDataType()

size_t grk::GrkImage::sizeOfDataType ( grk_data_type type)
staticprivate

◆ subsampleAndReduce()

bool grk::GrkImage::subsampleAndReduce ( uint8_t reduce)

Generates subsampled and reduced bounds for components.

If data has been allocated and the new width or height differ from old with or height respectively, then data is de-allocated

References allocData(), grk::ceildiv(), grk::ceildivpow2(), grk::grklog, sizeOfDataType(), grk::Rect< T >::x0, and grk::Rect< T >::y0.

Referenced by grk::CodeStreamDecompress::differentialUpdate().

◆ sycc420_to_rgb()

template<typename T>
bool grk::GrkImage::sycc420_to_rgb ( bool oddFirstX,
bool oddFirstY )
private

◆ sycc422_to_rgb()

template<typename T>
bool grk::GrkImage::sycc422_to_rgb ( bool oddFirstX)
private

◆ sycc444_to_rgb()

template<typename T>
bool grk::GrkImage::sycc444_to_rgb ( void )
private

◆ sycc_to_rgb()

template<typename T>
void grk::GrkImage::sycc_to_rgb ( T offset,
T upb,
T y,
T cb,
T cr,
T * out_r,
T * out_g,
T * out_b )
private

◆ transferDataFrom()

void grk::GrkImage::transferDataFrom ( const Tile * tile_src_data)

◆ transferDataFrom_T()

template<typename T>
void grk::GrkImage::transferDataFrom_T ( const Tile * tile_src_data)

◆ transferDataTo()

void grk::GrkImage::transferDataTo ( GrkImage * dest)

Transfer data to dest for each component, and null out "this" data.

Transfer data to dest for each component, and null out this data.

Assumption: "this" and dest have the same number of components

Assumption: this and dest have the same number of components

References GrkImage(), setDataToNull(), and single_component_data_free().

◆ validateColourSpace()

void grk::GrkImage::validateColourSpace ( void )

◆ validateICC()

◆ width()

uint32_t grk::GrkImage::width ( void ) const

Member Data Documentation

◆ GrkObjectWrapperImpl< GrkImage >

friend grk::GrkImage::GrkObjectWrapperImpl< GrkImage >
private

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