The PAINTDIBINFO structure describes the format of the data needed for custom painting. This structure is filled by the PAINTCALLBACK_GETDIBINFO callback. It is also passed to the PAINTCALLBACK_CONVERTLINE callback.
Size of the PAINTDIBINFO structure. This should be sizeof(PAINTDIBINFO). You must fill this member.
The orientation of the data used for painting. Can be TOP_LEFT (the image data should be top-down, which is the opposite of the normal GDI order) or BOTTOM_LEFT (the image data should be upside-down, which is the normat GDI order).
The bits per pixel.
The number of planes (only the value 1 is supported at the moment). Possible values are:
|1||Interleaved data. All data is in a single plane. This is the only value supported at the moment.|
|> 1||Planar data. Each component is in a separate plane. This is reserved for future use.|
The number of bytes per line. This is usually rounded up to a multiple of 4 bytes. This should be calculated based the uWidth parameter that is passed to the PAINTCALLBACK_GETDIBINFO callback.
The color order of the image data. It will usually be ORDER_GRAY or ORDER_BGR.
Any of the following flags. (You can use a bitwise OR to specify more than one value.).
|DIBFLAG_IGNORELUT||[0x0001] Ignore the LUT during color conversion. The window levelling will be done through a hardware LUT.|
|DIBFLAG_LOWHIGHBITVALID||[0x0002] The low and high bit values are valid. The data does not use the whole range.|
|DIBFLAG_SUPPORTS_WIDECOLORS||[0x0004] 48 and 64 bits per pixel supported. Only used when using paint callbacks.|
The low bit of the useful image data. Valid only if DIBFLAG_LOWHIGHBITVALID is set. This has to be between 0 and uHighBit.
The high bit of the useful image data. Valid only if DIBFLAG_LOWHIGHBITVALID is set. This has to be between uLowBit and uBitsPerPixel - 1.
Value that should be added to each pixel value. This should be 0 in most cases.
Pointer a the user data. This value will be present in the structure when the PAINTCALLBACK_CONVERTLINE callback is called. You can set it to NULL if you do not need this.
If you specify a PAINTCALLBACK_GETDIBINFO callback, the display engine will call it and pass it a pointer to a PAINTDIBINFO structure. Also, the callback will have a uWidth parameter. The callback is responsible for filling the structure with the correct values.
In our testing, medical imaging display adapters could display up to 13-bits of grayscale data (8192 shades of gray). But, they used 16 bits of data for each pixel, with the useful image data being in the low 12 bits. In this case, you would do something like this:
pPaintDibInfo->uBitsPerPixel = 16;
pPaintDibInfo->uFlags = DIBFLAG_LOWHIGHBITVALID;
pPaintDibInfo->uLowBit = 0;
pPaintDibInfo->uHighBit = 11;
Medical Web Viewer .NET
.NET, Java, Android, and iOS/macOS Assemblies
C API/C++ Class Libraries