This is the interface to let devices provide their own color mapping and dithering routines, that is, override the graphic system's defaults or provide routines for formats not supported by the graphics system (for example, a 32-bit 10R 10G 10B format for instance).

Notes

A device has the option to dither at external to internal conversion time (this is the only option for color conversion) or at logical to physical.

Note: A device can specify KEEP_EXTERNAL_FORMAT, in which case an external to physical conversion could take place. This should not matter to the conversion-handling routine because all the information in the image information structure should suffice in performing the conversion.

You can:

Selecting Dithering

Dithering is selected via:

Add the appropriate GDM_DITHER flag into the fExt2IntSup and/or fLog2PhysSup fields (dither could be done at both levels).

Modifying System Dithering Routines

You can change just the dithering defaults for that requested type of dithering without providing funtion. To accomplish that, provide either a pExt2IntDI or a pLog2PhysDI structure.

Note: The whole structure must be filled out.

Below are two currently used system dither structures:

  MATRIXDITHERINFO                  System Default Values
    ULONG       ulLength           sizeof(MATRIXDITHERINFO)
    ULONG       ulType             GDM_MATRIX_DITHER
    ULONG       fOptions           00
    ULONG       ulIntensity        00
    BYTE        bRedWt             25
    BYTE        bGreenWt           60
    BYTE        bBlueWt            15
    BYTE        bPad               00
    SIZEL       szMatrix           N/A
    BYTE        bHalftone[1]       N/A

  DIFFUSIONDITHERINFO

    ULONG       ulLength           sizeof(DIFFUSIONDITHERINFO)
    ULONG       ulType             GDM_ERRORDIF_DITHER
    ULONG       fOptions           JJN_DIF
    ULONG       ulIntensity        00
    BYTE        bRedWt             25
    BYTE        bGreenWt           60
    BYTE        bBlueWt            15
    BYTE        bPad               00
    PBYTE       pBuffer            N/A
    SIZEL       szFilter           N/A
    BYTE        bFilterArry[1]     N/A

  JJN_DIF        Currently only one supported

Providing Your Own Dithering Routines

To provide your own dither routines, place the GDM_USERDEF_DITHER in either the fExt2IntSup and/or fLog2PhysSup fields. Then provide a function for pfnDither:

  pfnDither(PDITHERINFO pdi, PIMAGEINFO pii, ULONG ulFlags);

Where pdi = either pExt2IntDI or pLog2PhysDI. This should be your own allocated structure. For pii, see the detailed information about the IMAGEINFOS structure which follows.

Providing Support for Unsupported System Formats

To provide your own color conversion routines, place the GDM_COLOR_CONVERT in the fExt2IntSup field, and provide the three required functions in the COLORCONVERTINFO structure:

  pfnRGB2ToPhyIndex  (ULONG ulClr)

  pfnPhyIndexToRGB2  (ULONG ulClr)

  pfnConvert         (PIMAGEINFO pimginfo)

Data Structures

 COLORCONVERTINFO

   ULONG       ulLength                          sizeof(COLORCONVERTINFO)
   ULONG       ulType                            GDM_COLOR_CONVERT
   ULONG       ulOptions                         00
   ULONG       (* APIENTRY pfnRGB2ToPhyIndex) () N/A - Mapping from RGB to Phy index
   ULONG       (* APIENTRY pfnPhyIndexToRGB2) () N/A - Mapping from Phy index to RGB
   ULONG       (* APIENTRY pfnConvert)        () N/A - Actual Convert Bits Function

 IMAGEINFOS

   PPOINTL     pptlSrc
   PPOINTL     pptlDst
   ULONG       ulSrcBpp               Source image bits per pixel
   ULONG       ulSrcBytesPerLine      Count of bytes per scan line (includes padding)
   PBYTE       pbSrcBits              Pointer to source data
   ULONG       ulcSrcClrs             Count of source colors
   ULONG       ulSrcClrType           Source color format see below
   PRGB2       pargb2Src              Pointer to source color table
   ULONG       ulTrgBpp               Target image bits per pixel
   ULONG       ulTrgBytesPerLine      Count of bytes per scan line (includes padding)
   PBYTE       pbTrgBits              Pointer to target data
   ULONG       ulcTrgClrs             Count of target colors
   ULONG       ulTrgClrType           Source target format see below
   PRGB2       pargb2Trg              Pointer to target color table
   ULONG       ulOptions              see below

IMAGEINFOS Color Types

When ulBpp <= 8:

  COLOR_RGB2            Color is in RGB2  (default)
  COLOR_RGB             Color is in RGB

When ulBpp = 24:

  COLOR_24BIT_BGR       1st byte=blue, 2nd byte=green 3rd byte=red  (default)
  COLOR_24BIT_RGB       1st byte=red,  2nd byte=green 3rd byte=blue

When ulBpp = 16:

  COLOR_16BIT_565_BGR   blue - 5 bits, green - 6 bits, red - 5 bits   (default)
                        ---------------------------------
                        |b|b|b|b|b|g|g|g|g|g|g|r|r|r|r|r|
                        ---------------------------------
  COLOR_16BIT_565_RGB   red - 5 bits, green - 6 bits, blue - 5 bits
                        ---------------------------------
                        |r|r|r|r|r|g|g|g|g|g|g|b|b|b|b|b|
                        ---------------------------------
  COLOR_16BIT_1555_BGR  overlay - 1, red - 5 bits, green - 5 bits, blue - 5 bits
                        ---------------------------------
                        |o|b|b|b|b|b|g|g|g|g|g|r|r|r|r|r|
                        ---------------------------------
  COLOR_16BIT_1555_RGB  overlay - 1, red - 5 bits, green - 5 bits, blue - 5 bits
                        ---------------------------------
                        |o|r|r|r|r|r|g|g|g|g|g|b|b|b|b|b|
                        ---------------------------------

When ulBpp = 32:

  COLOR_32BIT_BGR       1st byte=blue, 2nd byte=green 3rd byte=red,  4th byte=not used
  COLOR_32BIT_RGB       1st byte=red,  2nd byte=green 3rd byte=blue, 4th byte=not used

IMAGEINFO Options

  IMAGEINFO_CLR_TO_MONO_BG_EXACT     Src pels that are trg BG clr -> 1
                                     all other pels               -> 0
  IMAGEINFO_CLR_TO_MONO_BG_EXACT_INV Src pels that are trg BG clr -> 0
                                     all other pels               -> 1
                                     Nearest color match.
                                       Source pels that are close to target BG
                                       color become target BG color.
                                       All other pels become target FG color.
  IMAGEINFO_CLR_TO_MONO_BG_MAP       Src pels that are close to trg BG clr -> 1
                                     all other pels                        -> 0
  IMAGEINFO_CLR_TO_MONO_BG_MAP_INV   Src pels that are close to trg BG clr -> 0
                                     all other pels                        -> 1
  IMAGEINFO_SRC_Y_FLIP               Source is going Y negative direction
                                        i.e. second line = first line - ulBytesPerLine.
  IMAGEINFO_TRG_Y_FLIP               Target is going Y negative direction


[Back: OS2_PM_DRV_ENABLE: Subfunction 0Eh - QueryDeviceSurface - Remarks]
[Next: Device Font Support]