Today's C++ Monday Project is not like our usual fare, but I thought it kind of cool and we don't highlight C++ utilities often. Also it's two-for-one day too!
So why did I think it cool? All to often when I'm trying to explain a bug to someone, a video would be about 100x's faster than text or even voice. Yet capturing video can be a pain and then there's the file size. Finally if you want to post it to your blog... well, you get the picture.
Animated GIF's are pretty retro too... :)
LICEcap
LICEcap can capture an area of your desktop and save it directly to .GIF (for viewing in web browsers, etc) or .LCF (see below).
LICEcap is an intuitive but flexible application (for Windows and now OSX), that is designed to be lightweight and function with high performance.
LICEcap is easy to use: view a demo (output is here).
In addition to .GIF, LICEcap supports its own native lossless .LCF file format, which allows for higher compression ratios than .GIF, higher quality (more than 256 colors per frame), and more accurate timestamping. If you record to .LCF, you can play back the .LCF files within REAPER (and/or use it to convert to .gif or another video format).
LICEcap is GPL free software, each download package includes the source.
Features and options:
Record directly to .GIF or .LCF.
Move the screen capture frame while recording.
Pause and restart recording, with optional inserted text messages.
Global hotkey (shift+space) to toggle pausing while recording
Adjustable maximum recording framerate, to allow throttling CPU usage.
Basic title frame, with or without text.
Record mouse button presses.
Display elapsed time in the recording.
Requirements:
For Windows: Windows XP/Vista/7 (might work with reduced functionality on other versions)
For OSX: OS 10.4+ (10.6+ for full feature support), PPC or Intel (note: OS X support is still preliminary, some features are not supported)
A reasonably fast CPU
A healthy amount of RAM (1GB+, especially when encoding to LCF)
...
[Read the rest and download it]
Here's a quick example, running on my machine;
Also of interest (and required to compile the source) is...
WDL (whittle)
[re]usable C++, modestly
WDL is a free and open source C++ library that is designed to be easily used by other code.
Much of WDL is a set of simple C++ classes that do not attempt to do everything. You can use as little or as much of WDL as you like, mix it with whatever other toolkits you use, etc. It tries very hard not to get in your way.
WDL includes:
The Basics
Lightweight inline classes for cleanly managing memory allocations, lists, queues, resource pools, strings, etc
File reading/writing wrappers:
Support various asynchronous and unbuffered reads/writes
Large file support
Portable API
Memory mapped file support
Directory scanning API
SHA-1 implementation
Mersenne Twister implementation
Mergesort implementation
Blowfish implementation
Fast FFT implementation (based on DJBFFT)
RDTSC timing utility (win32/x86 only)
Audio tools:
A realtime convolution engine
Fast sinewave generator
dB/amplitude convertors
Basic Reverb engine (based on FreeVerb2)
Integer PCM audio sample conversions
SHOUTcast source broadcaster (and PHP based server)
Encoding/decoding audio using LAME and OGG Vorbis.
A simple pitch shifting engine
ADPCM encode/decode engines
Audio buffer/pin manager
Samplerate conversion (supporting point sampling, linear interpolation with optional IIR filters, sinc interpolation)
LICE - Lightweight Image Compositing Engine:
32bpp 2D image engine with full alpha channel support
PNG, JPEG, GIF, BMP, PCX, ICO loading
PNG, JPEG, GIF writing
Blit, scaled blit, rotated blit, delta/grid divided blits, with optional bilinear filtering, blurred blit
Primitives including line drawing, rectangle fills, gradients, circles, triangles, bezier curves
Optional antialiasing for most primitives
Alpha and source alpha support for primitives and blits
Many blend modes including copy, additive, subtractive, dodge, multiplicative, overlay, HSV adjust
Glyph and text drawing systems (including cached-system-text drawing)
Texture generators
WDL Virtual Window system:
Allows the building of dynamic, complex UIs within OS hosted windows
Included controls for text display, combo boxes, buttons, sliders, list boxes
Supports full transparency, overlays, controls with shadows/highlights outside of their range
Fully themeable (uses LICE for compositing)
Plush2 - Portable, lightweight software 3D rendering engine
32bpp 3D rendering
Scene management (unlimited cameras, objects)
Frustum clipping
Multitexture support
Environment map support
Texture-alpha support
Variable-alpha materials
Bilinear texture filtering
Colored lighting with unlimited lightsources
Gouraud and flat shading
Supports most LICE blend modes as per-pixel operations
Z-buffering
3DS,COB file import
Integrates with LICE.
Based on Plush
SWELL - Simple Windows Emulation Layer (for OS X):
Allows targeting win32 and OS X by using a reasonable subset of the win32 API
Auto (PHP-based) dialog and menu resource conversion
Many common APIs and common controls implemented
SWELL-specific win32-style OS X extensions
And more:
Shared memory IPC connection and low latency messaging classes
EEL2 expression evaluation library/realtime compiler (allow users to write code that your programs execute) (based on AVS's EEL)
win32_curses: A graphical Curses emulation library for Win32 and OS X (port or write curses applications in a window of a larger application, or standalone)
win32_utf8: code you can include to enable UTF8 support in normal ANSI windows applications
[See the rest and grab the source]
Two for one day indeed!