virtual L_INT LAnnAutomation::SetAutoHilightPen(crHilight)
Sets the color of the pen that is used for highlighting.
The color of the pen that is used for highlighting.
Value | Meaning |
---|---|
SUCCESS | The function was successful. |
< 1 | An error occurred. Refer to Return Codes. |
This function allows you to change the color of the pen that is used for highlighting and selecting. More specifically, this pen is used in the following situations:
In automated annotation design mode, choose ANY tool and click/drag the mouse draw an outline. The outline is displayed using the highlight pen.
In automated annotation design mode, choose the Select tool and click on an existing annotation object. While the left mouse button is held down, the selected object is displayed using the highlight pen.
The highlighting is implemented by taking the "exclusive-or" (XOR) of the highlight pen color and the underlying image pixels.
The default highlight pen has a COLORREF value of 0xFFFFFF (white). This color works well for most images. However, images that have many mid-range gray colors will not effectively show a highlight.
To understand why this is so, consider an image that contains only the color gray 0x808080. The highlight color will be determined as follows:
Highlight Color = (0xFFFFFF) XOR (0x808080)
= 0x7F7F7F
The highlight color (0x7F7F7F) (gray) and the underlying image color (0x808080) (gray) are almost the same color, and nearly indistinguishable to the naked eye. In cases like this, the highlight will not be visible.
To avoid this, choose a different highlight pen color so that XOR operation with the underlying color will give a result that is visibly different from the underlying color. A good choice is 0xC0C0C0 (silver). Using this color the highlight color will be determined as follows:
Highlight Color = (0xC0C0C0) XOR (0x808080)
= 0x404040
The resulting highlight color (0x404040) is another gray, but is more visible and stands out much more clearly against the underlying image color (0x808080), allowing for easy differentiation between the two.
Note: several of the automated mode annotation cursors are displayed using an XOR operation. For images with many mid-range grays, these cursors will not be visible. To avoid this, define your own cursors and use the LAnnAutomation::SetAutoCursor function. The main annotation demo (ClAnno32.EXE) demonstrates how to change the highlight pen and the annotation cursors.
Win32, x64.
class CBitmapWindow : public LBitmapWindow
{
private:
LAnnContainer* m_pContainer;
LAnnAutomation *m_pAutomation;
LAnnToolBar *m_pToolBar;
public:
CBitmapWindow()
{
m_pContainer = NULL;
m_pAutomation = NULL;
}
~CBitmapWindow()
{
}
L_VOID SetContainer(LAnnContainer * pContainer)
{
m_pContainer = pContainer;
}
L_VOID SetAutomation(LAnnAutomation * pAutomation)
{
m_pAutomation = pAutomation;
}
L_VOID SetToolBar(LAnnToolBar * pToolBar)
{
m_pToolBar = pToolBar;
}
};
LAnnContainer m_LeadAContainer;
LAnnToolBar m_LeadAToolbar;
LAnnAutomation m_LeadAAutomation;
CBitmapWindow m_LBitmap;
void InitState(HWND hParent)
{
LSettings::LoadLibraries(LT_ALL_LEADLIB);
CRect rcRect(0, 0, 100, 100);
// Create the LBitmapWindow control, make it visible, and make it center the image
HWND hWnd = m_LBitmap.CreateWnd(hParent,
901,
WS_VISIBLE,
rcRect.TopLeft().x,
rcRect.TopLeft().y,
rcRect.BottomRight().x,
rcRect.BottomRight().y);
int nRet = 0;
RECT rcClientArea;
ANNRECT rcContainerRect;
nRet = m_LBitmap.Load(MAKE_IMAGE_PATH(TEXT("image1.cmp")));
if(nRet == SUCCESS)
{
::GetClientRect(hWnd,&rcClientArea);
m_LBitmap.SetDstRect(&rcClientArea);
rcContainerRect.left = 0;
rcContainerRect.top = 0;
rcContainerRect.right = rcClientArea.right-rcClientArea.left;
rcContainerRect.bottom = rcClientArea.bottom-rcClientArea.top;
m_LeadAContainer.Create(hWnd,&rcContainerRect,TRUE);
m_LeadAContainer.SetOffsetX((L_DOUBLE) 0, 0);
m_LeadAContainer.SetOffsetY((L_DOUBLE) 0, 0);
m_LeadAAutomation.Create();
/* Assign the automation object to the container */
m_LeadAAutomation.SetAutoContainer(&m_LeadAContainer);
/* Enable the automation object */
m_LeadAAutomation.SetActiveState(ANNACTIVE_ENABLED);
/* Set design mode, which allows creation of annotations */
m_LeadAContainer.SetUserMode();
/* Set the dots per inch for interpreting physical measurements */
//m_LeadAContainer.SetDpiX(600, 0);
m_LeadAContainer.SetDpiY(600, 0);
/* Set the number of possible undo actions */
m_LeadAAutomation.SetUndoDepth(3);
/* Set the line tool as the initial annotation tool */
m_LeadAToolbar.Create(hParent, NULL, ANNTOOLALIGN_RIGHT | ANNTOOLALIGN_TOP, TRUE);
m_LBitmap.SetContainer(&m_LeadAContainer);
m_LBitmap.SetAutomation(&m_LeadAAutomation);
m_LBitmap.SetToolBar(&m_LeadAToolbar);
}
}
L_INT LAnnAutomation_SetAutoHilightPenTest(L_BOOL bAnnHilightPen)
{
m_LeadAAutomation.SetAutoHilightPen(bAnnHilightPen ? RGB(0xC0, 0xC0, 0xC0) : RGB(0xFF, 0xFF, 0xFF));
return SUCCESS;
}
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document