Function

vImageConvert_ARGB8888ToXRGB2101010

Converts an ARGB8888 format image to an XRGB2101010 format image.

Declaration

vImage_Error vImageConvert_ARGB8888ToXRGB2101010(const vImage_Buffer *src, const vImage_Buffer *dest, int32_t RGB101010RangeMin, int32_t RGB101010RangeMax, const uint8_t permuteMap[4], vImage_Flags flags);

Parameters

src

A pointer to the vImage buffer that references 8-bit ARGB interleaved source pixels.

dest

A pointer to the vImage buffer that references 10-bit RGB interleaved destination pixels.

RGB101010RangeMin

The minimum value for the range of 10-bit RGB pixels.

RGB101010RangeMax

The maximum value for the range of 10-bit RGB pixels.

permuteMap

An array of four 8-bit integers with the values 0, 1, 2, and 3, in some order. Each value specifies a channel from the source image that should be copied to that channel in the destination image. 0 denotes the alpha channel, 1 the red channel, 2 the green channel, and 3 the blue channel. 

flags

The options to use when performing the operation. If you plan to perform your own tiling or use multithreading, pass kvImageDoNotTile.

Return Value

kvImageNoError; otherwise, one of the error codes described in Data Types and Constants.

Discussion

RGB101010RangeMin and RGB101010RangeMax are available for non-full-range pixel values. You can set full-range pixel values as:

 RGB101010RangeMin  = 0;
 RGB101010RangeMax  = 1023;

The per-pixel operation is:

 uint8_t *srcPixel = src.data;
 A8 = srcPixel[permuteMap[0]];
 R8 = srcPixel[permuteMap[1]];
 G8 = srcPixel[permuteMap[2]];
 B8 = srcPixel[permuteMap[3]];
 srcPixel += 4;
 
 int32_t R10, G10, B10;
 int32_t range10 = RGB101010RangeMax - RGB101010RangeMin;
 int32_t rounding = UCHAR_MAX >> 1;
 R10 = ((R8 * range10 + rounding) / UCHAR_MAX) + RGB101010RangeMin;
 G10 = ((G8 * range10 + rounding) / UCHAR_MAX) + RGB101010RangeMin;
 B10 = ((B8 * range10 + rounding) / UCHAR_MAX) + RGB101010RangeMin;
 A10 = ((A10 * 3 + rounding) / UCHAR_MAX);
 
 uint32_t *destPixel = dest.data;
 destPixel[0] = htonl((R10 << 22) | (G10 << 12) | (B10 << 2) | A10);
 destPixel += 1;

See Also

Converting from ARGB Formats

vImageConvert_ARGBFFFFtoARGB8888_dithered

Converts and permutes an ARGBFFFF image to an ARGB8888 image with dithering.

vImageConvert_ARGBFFFFtoRGBFFF

Converts a four-channel ARGBFFFF image to a three-channel RGBFFF image by removing the alpha channel.

vImageConvert_ARGBFFFFtoPlanar8

Separates an ARGBFFFF image into four Planar8 images.

vImageConvert_ARGBFFFFtoPlanarF

Separates an ARGBFFFF image into four PlanarF images.

vImageConvert_ARGBFFFFToARGB2101010

Converts an ARGBFFFF format image to an ARGB2101010 format image.

vImageConvert_ARGBFFFFToXRGB2101010

Converts an ARGBFFFF format image to an XRGB2101010 format image.

vImageConvert_ARGB1555toARGB8888

Converts an ARGB1555 image to an ARGB8888 image.

vImageConvert_ARGB1555toRGB565

Converts an ARGB1555 image to an RGB565 image, with loss of alpha.

vImageConvert_ARGB1555toPlanar8

Separates an ARGB1555 image into four Planar8 images.

vImageConvert_ARGB16UtoRGB16U

Converts an ARGB16U image to an RGB16U image.

vImageConvert_ARGB16UtoARGB8888_dithered

Converts and permutes an ARGB16U image to an ARGB8888 image with dithering.

vImageConvert_ARGB16UToARGB2101010

Converts an ARGB16U format image to an ARGB2101010 format image.

vImageConvert_ARGB16UToRGBA1010102

Converts an ARGB16U format image to an RGBA1010102 format image.

vImageConvert_ARGB16UToXRGB2101010

Converts an ARGB16U format image to an XRGB2101010 format image.

vImageConvert_ARGB16UToARGB8888

Converts and permutes an ARGB16U image to an ARGB8888 image.

vImageConvert_ARGB16UtoPlanar16U

Separates an ARGB16U image into four Planar16U images.

vImageConvert_ARGB16Q12ToARGB2101010

Converts an ARGB16Q12 format image to an ARGB2101010 format image.

vImageConvert_ARGB16Q12ToXRGB2101010

Converts an ARGB16Q12 format image to an XRGB2101010 format image.

vImageConvert_ARGB16Q12ToRGBA1010102

Converts an ARGB16Q12 format image to an RGBA1010102 format image.

vImageConvert_ARGB2101010ToARGB16F

Converts an ARGB2101010 format image to an ARGB16F format image.

vImageConvert_ARGB2101010ToARGB16Q12

Converts an ARGB2101010 format image to an ARGB16Q12 format image.

vImageConvert_ARGB2101010ToARGB16U

Converts an ARGB2101010 format image to an ARGB16U format image.

vImageConvert_ARGB2101010ToARGB8888

Converts an ARGB2101010 format image to an ARGB8888 format image.

vImageConvert_ARGB2101010ToARGBFFFF

Converts an ARGB2101010 format image to an ARGBFFFF format image.

vImageConvert_ARGB8888toARGB1555

Converts an ARGB8888 image into an ARGB1555 image.

vImageConvert_ARGB8888ToRGB16U

Converts and permutes an ARGB8888 image into an RGB16U image.

vImageConvert_ARGB8888toPlanar8

Separates an ARGB8888 image into four Planar8 images.

vImageConvert_ARGB8888toPlanarF

Separates an ARGB8888 image into four PlanarF images.

vImageConvert_ARGB8888toRGB565

Converts an ARGB8888 image into an RGB565 image.

vImageConvert_ARGB8888toRGB888

Converts a four-channel ARGB8888 image to a three-channel RGB888 image by removing the alpha channel..

vImageConvert_ARGB8888toPlanar16Q12

Separates an ARGB8888 image into four Planar16Q12 images.

vImageConvert_ARGB8888toARGB1555_dithered

Converts an ARGB8888 image to an ARGB1555 image with dithering.

vImageConvert_ARGB8888toRGB565_dithered

Converts an ARGB8888 image to an RGB565 image with dithering.

vImageConvert_ARGB8888ToRGBA1010102

Converts an ARGB8888 format image to an RGBA1010102 format image.

vImageConvert_ARGB8888ToARGB2101010

Converts an ARGB8888 format image to an ARGB2101010 format image.

vImageConvert_ARGB8888ToARGB16U

Converts and permutes an ARGB8888 image to an ARGB16U image.