The library display_lib provides functions to display image data in a simple window. The library doesn't replace a GUI toolkit and is intended only for debugging purposes for applications without a GUI. In particular, the library doesn't implement features for scaling or transforming images and is limited to display image data up to the size of the screen.
To use the library, the include file SisoDisplay.h should be added to the source code.
#include<SisoDisplay.h>
Additionally, display_lib.lib should be added to your Microsoft Visual Studio Project, or libdisplay_lib.so to your Linux project. If you use CMake, the package name is SisoDisplayLib, the libraries are stored in the variable ${SISODISPLAYLIB_LIBRARIES} and the the include directory is stored in the variable ${SISODISPLAYLIB_INCLUDE_DIR}. See Prerequisites for more details on projects and how to use CMake.
To create a display window, the function CreateDisplay() can be called. The function expects the bits per pixel and the window dimensions in the parameters. If the call succeeds, it will return a value equal or greater than zero, which is an identifier for the display window. In case of an error, a negative value is returned.
If the display window is no longer needed, the function CloseDisplay() should be called.
The image buffer dimensions for the display window are initially set to the same width and height as the window. If the image to be displayed is very large, the window size can be set to smaller dimensions and the function SetBufferWidth() can be called to set the buffer size for the image data.
Info
The display library is limited to handle images up to 2 GB.
The following example shows how to create a display window matching the image dimensions and pixel format of the applet:
// get image dimensions and pixel format from appletintresult=FG_INVALID_PARAMETER;intwidth=0,height=0,fgFormat=0;intwidthId=Fg_getParameterIdByName(fg,"FG_WIDTH");intheightId=Fg_getParameterIdByName(fg,"FG_HEIGHT");intfgFormatId=Fg_getParameterIdByName(fg,"FG_FORMAT");if(widthId>0&&heightId>0&&fgFormatId>0){result=Fg_getParameterWithType(fg,widthId,&width,dma);if(result==FG_OK){result=Fg_getParameterWithType(fg,heightId,&height,dma);}if(result==FG_OK){result=Fg_getParameterWithType(fg,fgFormatId,&fgFormat,dma);}}// get number of bits per pixel for the formatintbitsPerPixel=FG_INVALID_VALUE;if(result==FG_OK){bitsPerPixel=Fg_getBitsPerPixel(fgFormat);}if(bitsPerPixel<=0){result=FG_INVALID_VALUE;}// create a displayintdisplay=FG_INVALID_HANDLE;if(result==FG_OK){display=CreateDisplay(bitsPerPixel,width,height);}if(display>=0){// use display ...CloseDisplay(display);}
To draw the image data in the display window, the function DrawBuffer() can be called. The function expects the display window id in the first parameter and a pointer to the buffer which contains the image data in the second parameter. The remaining two parameters can be used to display a frame number and some text in the title of the display window.
The following example shows how to display the image data in a simple acquisition loop:
frameindex_tnextFrame=1;while(true){// wait for new imagesframeindex_tnewestFrame=Fg_getLastPicNumberBlockingEx(fg,nextFrame,dma,timeoutInSeconds,mem);if(newestFrame>0){// get pointer to current frame buffervoid*ptr=Fg_getImagePtrEx(fg,newestFrame,dma,mem);// draw current frame bufferDrawBuffer(display,ptr,newestFrame&0x7fffffff,"A Sample Image Display");// calculate next framenextFrame=(newestFrame<FRAMEINDEX_MAX)?newestFrame+1:1;}else{// handle error ...}}