Take the following steps to create and run a program that implements non-automated annotations.
Create a new directory in the LEADTOOLS23\Examples\ImageProcessing\CDLL directory called AnnNonAuto.
Copy everything in the Color directory into the AnnNonAuto directory.
Compile the project as is and run Color.exe to familiarize yourself with the program. You can run the exe file from the MS-DOS prompt, or set the image file to load through the Build -> Settings -> Debug -> Program Arguments menu.
Open the imports.cpp file and add the items shown in green:
#if defined(WIN64)
#pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR"\\CDLL\\x64\\Ltkrn_x.lib")
#pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR"\\CDLL\\x64\\Ltdis_x.lib")
#pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR"\\CDLL\\x64\\Ltfil_x.lib")
#pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR"\\CDLL\\x64\\Ltann_x.lib")
#else
#pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR"\\CDLL\\Win32\\Ltkrn_u.lib")
#pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR"\\CDLL\\Win32\\Ltdis_u.lib")
#pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR"\\CDLL\\Win32\\Ltfil_u.lib")
#pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR"\\CDLL\\Win32\\Ltann_u.lib")
#endif // #if defined(WIN64)
Declare the following global variables in Color.cpp:
HANNOBJECT hContainer;
HANNOBJECT MyNote;
and the following functions:
void TestCreateAnn(HWND hWnd);
void TestCreateNoteAnn(HWND hWnd);
Add the following code:
void TestCreateAnn(HWND hWnd)
{
RECT rClientArea; /* Client area of the current window */
HDC hWindowDC; /* Device context of the current window */
ANNRECT ContainerRect; /* Defining rectangle for the container */
RECT rAnnBounds; /* Bounding rectangle for displaying */
/* Get the device context of the current window */
hWindowDC = GetDC (hWnd);
/* Get the client area of the current window */
GetClientRect(hWnd, &rClientArea);
/* Create the annotation container, which we will use as the root container */
ContainerRect.left = 0;
ContainerRect.top = 0;
ContainerRect.right = BITMAPWIDTH(&Data.BitmapHandle) -1;
ContainerRect.bottom = BITMAPHEIGHT(&Data.BitmapHandle) - 1;
L_AnnCreateContainer(hWnd, &ContainerRect, TRUE, &hContainer);
/* Set the annotation scalars and offsets, assuming that the display
dimensions are the same as the client area dimensions */
L_AnnSetScalarX(hContainer, (L_DOUBLE) rClientArea.right / BITMAPWIDTH(&Data.BitmapHandle), 0);
L_AnnSetScalarY(hContainer, (L_DOUBLE) rClientArea.bottom / BITMAPHEIGHT(&Data.BitmapHandle), 0);
L_AnnSetOffsetX(hContainer, (L_DOUBLE) 0, 0);
L_AnnSetOffsetY(hContainer, (L_DOUBLE) 0, 0);
L_AnnGetBoundingRect(hContainer, &rAnnBounds, NULL);
L_AnnDraw(hWindowDC, &rAnnBounds, hContainer);
ReleaseDC(hWnd, hWindowDC);
return;
}
Add the following code:
void TestCreateNoteAnn(HWND hWnd)
{
ANNRECT ContainerRect;
ANNRECT MyNoteRect;
RECT rAnnBounds;
HDC hWindowDC;
hWindowDC = GetDC(hWnd);
/* Create a Note Annotation */
L_AnnCreateItem(hContainer, ANNOBJECT_NOTE, TRUE, &MyNote);
L_AnnGetRect(hContainer, &ContainerRect, NULL);
/* Size and position the note */
MyNoteRect.left = ContainerRect.right / 8;
MyNoteRect.top = ContainerRect.bottom / 8;
MyNoteRect.right = ContainerRect.right / 2;
MyNoteRect.bottom = ContainerRect.bottom / 2;
L_AnnSetRect(MyNote, &MyNoteRect);
/* Set the text of the note */
L_AnnSetText(MyNote, TEXT("This is my text"), 0);
L_AnnSetBackColor(MyNote, RGB(0, 255, 255), 0);
L_AnnSetFontBold(MyNote, TRUE, 0);
L_AnnSetFontItalic(MyNote, FALSE, 0);
L_AnnSetFontName(MyNote, TEXT("Arial"), 0);
L_AnnSetFontSize(MyNote,16, 0);
L_AnnSetFontStrikeThrough(MyNote, FALSE, 0);
L_AnnSetFontUnderline(MyNote, TRUE, 0);
L_AnnSetForeColor(MyNote, RGB(255, 0, 0), 0);
/* Display the note */
L_AnnGetBoundingRect(MyNote, &rAnnBounds, NULL);
L_AnnDraw(hWindowDC, &rAnnBounds, MyNote);
/* Remove the queued paint message */
ValidateRect(hWnd, &rAnnBounds);
ReleaseDC(hWnd, hWindowDC);
return;
}
Add the following lines of code to Window_OnCreate, just before return (TRUE);:
TestCreateAnn(hWnd);
TestCreateNoteAnn(hWnd);
Add the following line to Window_OnPaint:
L_AnnDraw(hdc, &ps.rcPaint, hContainer);
if(hpalPaint)
SelectPalette(hdc, hPalette, FALSE);
Add the following line to Window_OnDestroy, immediately before PostQuitMessage:
L_AnnDestroy(hContainer, ANNFLAG_RECURSE);
On the Build menu, select Build Color.exe.
On the Debug menu, select Start Without Debugging. Keep this project for testing other annotation code samples and for implementing Using Non-automated Annotations in Run Mode
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