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 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.
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.
- 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)
Here’s a quick example, running on my machine;
Also of interest (and required to compile the source) is…
[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.
- 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)
- 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
- 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
- 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
Two for one day indeed!