The example code is meant to show how the Pixelink 4.0 API can be used to interact with a Pixelink camera. The applications do not provide a lot of functionality, but the principles from each can be combined to create a more powerful application.
In most cases, there is minimal error handling, so as not to clutter the code. The point of the application is to show how to interact with the Pixelink API, not tell you how to do your error handling.
Many are written in C, to show the "lowest" common denominator, and some are in C++ to make use of simple memory management (i.e. std::vector) or because they are using Microsoft Foundation Classes (MFC).
If you're unfamiliar with the Pixelink API, we recommend you visit the following example apps in the following order:
1) initialize
2) getcamerafeature
3) getnextframe
4) preview
After that, feel free to look around the other example apps as your needs dictate. There are many apps, but they can be grouped into a few categories:
Initialization and Camera Information
initialize
A demonstration of a minimal interaction with a camera.
getcamerainfo
This demonstrates retrieval of internal camera information.
getmodelnumber
This demonstrates the recommended method to determine the camera model number.
getcamerafeature
This retrieves information about various camera features.
getcamerafeatures
An example app -- and a great debugging tool -- that retrieves and displays information about all camera features using both PxLGetCameraFeatures and PxLGetFeature in a human-readable form.
errorreport
A demonstration of how to get more information about the most recent error reported by the Pixelink API.
Camera Configuration and Control
lookuptable
This application shows how to retrieve and manipulate the contents of the camera's lookup table.
gamma
A demonstration of the interplay between gamma and the lookup table that demonstrates how to query and control camera features.
framerate
Demonstrates how to enable and set the frame rate.
flip
Demonstrates how to control the flip feature, as well as some of its quirks.
autoexposure
A simple windows application that provides a preview of the image and allows control of autoexposure.
ffc
Demonstrates how to enable and disable flat-field correction.
Capturing Images and Video
getsnapshot
This retrieves an image from the camera, converts it to a jpeg, and stores it to a file. It repeats this process for several formats such as .bmp and .psd.
getvideo
This captures images from the camera (using PxLGetClip) to a PixeLINK data stream (pds) file, and then converts the pds to an avi file (using PxLFormatClip).
See also the callback clip example app.
avicapture
This is a a small application which demonstrates how to use PxLGetClip and PxLFormatClip to create a 'security' camera application.
getnextframe
A demonstration of a wrapper around (and recommended practice for using) PxLGetNextFrame to make it a little more robust, accounting for intermittent ApiCameraTimeout errors.
dropframe
Shows functionality added in 7.0 which permits a call to PxLGetNextFrame to skip over (drop) a frame without having to actually copy the data from the API to a local buffer.
hbitmap
How to capture an image and use it to generate a Win32 GDI HBITMAP.
pdsreader
Parses through a PixeLINK Data Stream file (.pds) and converts the individual images to bitmap files (.bmp) or comma-separated values.
getpolarsnapshot
Simple program to find and stream a polar camera, using a robust frame grab algorithms, it collects and saves four images from the polar camera, where each image represents each of the 4 polar channels.
gethdrsnapshot
Simple program to find and stream an HDR camera, using a robust frame grab algorithms, it collects images from the HDR camera and saves them to files.
opencvsnapshot
Demonstrates how to capture a camera image that can be 'imported' into openCV.
Previewing
preview
This simple Win32 application demonstrates the basics of the preview window.
See also the callback example app.
previewoverlay
A simple Win32 application which demonstrates how to modify preview data in an CALLBACK_PREVIEW callback function.
previewdraw
A basic Win32 application which provides a simple C++ graphics engine to modify preview data in an CALLBACK_PREVIEW callback function.
The graphics engine provides the ability to draw lines, circles, ellipses, and rectangles.
previewtohwnd
A simple Win32 application which previews the camera within the client area of a window.
MFCPreview
This MFC-based dialog application demonstrates the basics of previewing into a Picture control.
Callbacks
callback
Demonstrates the basics of how to use the 'callback' functionality with CALLBACK_FORMAT_IMAGE and CALLBACK_PREVIEW.
callbackclip
Demonstrates PxLGetClip, PxLFormatClip, and how to use it with the callback for CALLBACK_FORMAT_CLIP.
Descriptors
descriptors
Demonstrates the creation, use and destruction of descriptors.
Note that the camera must support descriptors.
descriptors2
Demonstrates how the creation and removal of descriptors affects feature values.
Note that the camera must support descriptors.
descriptors_and_knees
Demonstrates the creation, use and destruction of descriptors and how to set a feature (extended shutter (also known as 'knees')) for each.
Note that the camera must support descriptors.
Trigging and GPIO
triggering
A simple overview of the three different triggering types: free running, software, and hardware.
aborttrigger
Demonstration of a few ways to abort a thread blocked in PxLGetNextFrame waiting for a hardware trigger.
softwaretrigger
Demonstration of how to use software triggering as a "virtual" hardware trigger using a special way to call PxLGetNextFrame combined with the CALLBACK_FRAME callback.
triggerwithcontrolledlight
Demonstrates the proper way of configuring FEATURE_TRIGGER_WITH_CONTROLLED_LIGHT.
gpio
Demonstration of how to configure the camera's GPOs for 'normal' mode.
multicamerasynchronizedtrigger
Demonstrates how to have multiple cameras simultaneously capture images by synchronizing them all with hardware and software triggering.
IP / Gigabit Ethernet
initializeex
Demonstration of PxLGetNumberCamerasEx, used to query IP (GigE) cameras.
setipaddress
Demonstration of PxLSetCameraIPAddress, used to set a GigE camera's IP address.
gigeheartbeat
Demonstration of how to use PxLPrivateCmd to set the GigE heartbeat timeout value.
Image Processing
motiondetection
A simple app which captures an image to file when motion is detected in the image.
PIXELINK_SDK_ROOT
The SDK installation will set the environment variable PIXELINK_SDK_ROOT for you. Each of the demonstration applications is provided as a separate Microsoft Visual C++ (2008) solution. (*.sln), and each of the solutions makes use of this environment variable to locate the header files and a library provided by the Pixelink SDK. This allows you to install the Pixelink SDK anywhere on your computer without having to change any of the example application configurations.
For example, the 'triggering' example application has this configuration:
The additional include directory is the 'include' directory under the SDK root directory.
In the following example, the Pixelink SDK was installed to D:\Program Files\PixeLINK, so the environment variable was set to this directory by the SDK installation, as can be verified by going to Start\Settings\Control Panel\System\Advanced\Environment Variables:
When the SDK is installed to the C drive, the SDK installer will set the PIXELINK_SDK_ROOT to this directory:
Once you've installed the SDK, you should be able to compile, link and run all the C and C++ example applications.
If you have any questions about the sample code, you can reach Pixelink support by email at pixelink.support@ametek.com.