Function

vImageConvert_ARGBFFFFToXRGB2101010

Converts an ARGBFFFF format image to an XRGB2101010 format image.

Declaration

vImage_Error vImageConvert_ARGBFFFFToXRGB2101010(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 32-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:

 float *srcPixel = src.data;
 float AF, RF, GF, BF;
 AF = srcPixel[permuteMap[0]];
 RF = srcPixel[permuteMap[1]];
 GF = srcPixel[permuteMap[2]];
 BF = srcPixel[permuteMap[3]];
 srcPixel += 4;
 
 if (!(flags & kvImageDoNotClamp)) {
    RF = CLAMP(RF, 0.0f, 1.0f);
    GF = CLAMP(GF, 0.0f, 1.0f);
    BF = CLAMP(BF, 0.0f, 1.0f);
 }
 
 int32_t A2, R10, G10, B10;
 int32_t range10  = RGB101010RangeMax - RGB101010RangeMin;
 A2  = (int)(AF * 3.0f + 0.5f);
 R10 = (int)(RF * range10 + 0.5f) + RGB101010RangeMin;
 G10 = (int)(GF * range10 + 0.5f) + RGB101010RangeMin;
 B10 = (int)(BF * range10 + 0.5f) + RGB101010RangeMin;
 
 uint32_t *destPixel = dest.data;
 destPixel[0] = (A2 << 30) | (R10 << 20) | (G10 << 10) | (B10 << 0);
 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_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_ARGB8888ToXRGB2101010

Converts an ARGB8888 format image to an XRGB2101010 format image.

vImageConvert_ARGB8888ToARGB16U

Converts and permutes an ARGB8888 image to an ARGB16U image.