Hi @taserface!
Depending on what you consider a proper display for image data with more than 8 bits per pixel the answer is definitely yes!
First: The slightly garbled display that you are seeing is only the default way of Common Vision Blox to display images with more than 8 bits per pixels. What happens is this: Usually a device context in Windows is not capable of displaying more than 8 bits per pixel. When confronted with image data with more than 8 bits per pixels, the Common Vision Blox display therefore simply copies the lowest 8 bits of the pixels to be displayed to the device context. If, for example, your data has 10 bits per pixel (pixel values: [0…1023]), you will have 3 pixel values at which a wraparound occurs when incrementing by one: 255, 511 and 767. These give rise to the striking white-to-black transitions in the display. You can easily verify that the actual pixel data has no discontinuity by moving the mouse pointer through one of these transitions and having a look at the display’s status line (if the display is configured to show the grey values).
However, this is just the default way of Common Vision Blox to display high-bit images - there are different options available (and the default approach is simply the one that happened to be there first). If you want a visually more attractive display of high-bit images you have two options:
-
Change the high bit scale mode from its default (
HBSM_WrapAround
) to something else.
The high bit scale mode may be changed by setting the display control’sHighBitScaleMode
property or by selecting a different mode on the control’s property page (on the tab Status Line Styles):
In addition to the default ofHBSM_WrapAround
there are (currently) two other options:
-
HBSM_Global
In this mode, the entire image’s grey scale range will be mapped to the range [0…255] for display. This mode will probably yield what you’d expect, but it’ll not show you the finer details that might be present in a high-bit image.
-
HBSM_ViewPort
This mode maps only the currently visible pixels (the view port) to the range [0…255], making also the finer details in a high-bit image visible. This mode is nice for closely inspecting an image but it may also be confusing because the displayed brightness of a pixel (x, y) is likely to change depending on the zoom state.
- Alternatively you may use the function
MapTo8Bits
from the CVCImg.dll to convert a high-bit image to an 8 bit image. This is not exactly the same as usingHBSM_Global
becauseHBSM_Global
always maps the theoretical grey value range (as determined from the data type identifier) to [0…255], whereasMapTo8Bits
converts the range of values encountered in the image to [0…255].
The main difference betweenMapTo8Bits
and changing theHighBitScaleMode
is of course that the latter only acts on the display whereas the first will generate a new image with modified image data (which you can then subsequently assign to a Common Vision Blox display… this post might come in handy in that scenario: Setting the image property on the display control resets the zoom state) - making this the approach of choice when the processed image should not only be used for display, but also for processing in a different tool.
By the way: The CVFoundation.dll has a function calledDownShift
that can be used to achieve the same results thatHBSM_Global
(simply shift down by enough bits to make sure that the value range does not exceep [0…255] any more) and is typically a lot faster thanMapTo8Bits
.
Please keep in mind that the HighBitScaleMode
value has no influence on the display’s appearance if the display is using DirectDraw or Direct3D (property DirectDrawEnabled
set to true
).