FreeImage.GetAdjustColorsLookupTable Method

FreeImage.NET

FreeImageGetAdjustColorsLookupTable Method
Creates a lookup table to be used with AdjustCurve(FIBITMAP, Byte, FREE_IMAGE_COLOR_CHANNEL) which may adjusts brightness and contrast, correct gamma and invert the image with a single call to AdjustCurve(FIBITMAP, Byte, FREE_IMAGE_COLOR_CHANNEL).

Namespace: FreeImageAPI
Assembly: FreeImageNET (in FreeImageNET.dll) Version: 3.17.0.4 (3.17.0)
Syntax
C#
public static int GetAdjustColorsLookupTable(
	byte[] lookUpTable,
	double brightness,
	double contrast,
	double gamma,
	bool invert
)

Parameters

lookUpTable
Type: SystemByte
Output lookup table to be used with AdjustCurve(FIBITMAP, Byte, FREE_IMAGE_COLOR_CHANNEL). The size of 'lookUpTable' is assumed to be 256.
brightness
Type: SystemDouble
Percentage brightness value where -100 <= brightness <= 100.

A value of 0 means no change, less than 0 will make the image darker and greater than 0 will make the image brighter.

contrast
Type: SystemDouble
Percentage contrast value where -100 <= contrast <= 100.

A value of 0 means no change, less than 0 will decrease the contrast and greater than 0 will increase the contrast of the image.

gamma
Type: SystemDouble
Gamma value to be used for gamma correction.

A value of 1.0 leaves the image alone, less than one darkens it, and greater than one lightens it.

invert
Type: SystemBoolean
If set to true, the image will be inverted.

Return Value

Type: Int32
The number of adjustments applied to the resulting lookup table compared to a blind lookup table.
Remarks
This function creates a lookup table to be used with AdjustCurve(FIBITMAP, Byte, FREE_IMAGE_COLOR_CHANNEL) which may adjust brightness and contrast, correct gamma and invert the image with a single call to AdjustCurve(FIBITMAP, Byte, FREE_IMAGE_COLOR_CHANNEL). If more than one of these image display properties need to be adjusted, using a combined lookup table should be preferred over calling each adjustment function separately. That's particularly true for huge images or if performance is an issue. Then, the expensive process of iterating over all pixels of an image is performed only once and not up to four times.

Furthermore, the lookup table created does not depend on the order, in which each single adjustment operation is performed. Due to rounding and byte casting issues, it actually matters in which order individual adjustment operations are performed. Both of the following snippets most likely produce different results:

// snippet 1: contrast, brightness
AdjustContrast(dib, 15.0);
AdjustBrightness(dib, 50.0);

// snippet 2: brightness, contrast
AdjustBrightness(dib, 50.0);
AdjustContrast(dib, 15.0);

Better and even faster would be snippet 3:

// snippet 3:
byte[] lut = new byte[256];
GetAdjustColorsLookupTable(lut, 50.0, 15.0, 1.0, false);
AdjustCurve(dib, lut, FREE_IMAGE_COLOR_CHANNEL.FICC_RGB);

This function is also used internally by AdjustColors(FIBITMAP, Double, Double, Double, Boolean), which does not return the lookup table, but uses it to call AdjustCurve(FIBITMAP, Byte, FREE_IMAGE_COLOR_CHANNEL) on the passed image.

See Also