Dogwaffle
Dogwaffle – The Documentation

Dogwaffle subjects

Fundamentals
Buffers
Layer mixing
Natural tools
Paint modes
Fill tools

Scanning Images

Animation
Filters
Gradients
Custom brushes
Paper textures

Alpha channels

Menu items.
The brush options panel

Optipustics
Plugins
Programming plugins in Visual Basic
Reference of plugin interface methods:

Example plugin

Supported Formats

Dogwaffle FAQ

Project Dogwaffle and this document are copyright 2003 Daniel Ritchie, all rights reserved


Fundamentals

The current brush preview.  This shows you the currently selected brush image.  Left clicking on this image brings The brush options panel.  Right clicking brings up a set of built in brush images.

The paper texture preview shows you the currently selected paper texture.  Left clicking on this image toggles the active state of paper textures.  Right clicking brings up the Paper textures panel.

The buffer preview shows a small image of the current buffer you are working on.  Right clicking on this image brings up the Layer mixing panel.

The natural paint tool activates the powerful natural media painting capabilities.  See Natural tools

The rectangle and circle tools let you draw their namesakes while right clicking will bring up the Fill tools panel.  You might notice that the tools are divided in two.  Clicking in the upper left will cause the shape to be drawn as an out line controlled by the natural painting tool, while clicking in the lower right will cause the shape to be filled as specified with the fill panel.

The alpha channel lasso tool lets you ‘select’ part of an image for further exclusive manipulation.  You may also pick up this selection and use it as a custom brush.  Right clicking on this tool brings up the Alpha channels panel.

The alpha rectangle and circle tools allow you to draw those shapes into the alpha channel. Right clicking on this tool brings up the alpha channel panel.

The alpha magic wand tool lets you ‘select’ and area in your buffer based on its similarity to the point you select.  Right clicking on this tool brings up its options.

The custom brush selector lets you pick up an area from the buffer and use it as a brush.  Right clicking on this tool brings up the brush keyer panel.  See Custom brushes.

The linear tools basic function is drawing lines.  However, right clicking on this tool lets you select from a number of functions including Linear gradient, Circular gradient, Warp, Linear alpha fader, Nova and Lens flares.  See Linear tools.

The arc tool lets you draw arcs.

The text tool lets you place a line of text into your buffer.  Right clicking on this tool brings up a menu of options.

The gradient/panels tool brings up the gradient panel.  Right clicking lets you select from any of Dogwaffle’s tool panels.  See Gradients.

The turkey baster lets you pick up a color from your buffer.  Right clicking lets you specify how large of an area to sample.

The undo tool undoes the last painting operation.  Right clicking redoes the last undone operation.  Middle clicking and dragging lets you interactively fade the last painting operation.

The clear button clears the buffer to the current secondary color.  Right clicking brings up a panel of options for clearing your buffer or current selection.

Prefs

Kill registry keys.  This small button in the upper right corner of the pref panel kills values set in the system registry making it easier to fix problems that might occur.

Memory options... determines how many megs of ram to set aside for multiple undos. If you're using a machine with less than 32 megs, then first get more ram, but also set this to a lower value. Dogwaffle otherwise doesn’t require a huge amount of ram, so if you have plenty, then set this to a higher value. I usually use around 12 megs. For video-res images, that’s plenty. You'll have to save the settings if you want this to stick.

Make plugins child of main window.  This setting forces plugin that open panels to use Dogwaffles main window as a parent window.  Otherwise, windows can float outside of the application and even stay open when Dogwaffle is minimized.  This feature is only available for Windows NT, 2000 and XP.

Bypass buffer size requester.  Lets you skip being asked for a buffer size at startup.

Default resolution.  Lets you specify the size of the buffer you would like to start with when the application starts up.

Startup plugin.  This feature lets you select a set of plugins to run at startup.  For instance, you could run the Color Mixer plugin if you liked using that feature a lot.  A plugin could in theory be any executable file, so long as it was named correctly, but usually programs written specifically for Dogwaffle would be more appropriate as they can imbed themselves into the interface.

Smooth scaling.  This setting applies bilinear filtering and halftone dithering if appropriate to the screen refresh when working on a zoomed image.  The result is a smoother, nicer looking image at the expense of slightly slower refreshes.

Background bitmap allows you to select a Windows bitmap file as a new backdrop. MDI stands for multiple document interface, by the way.

Panel bitmap Sets a new bitmap as a texture for panels.


Scanning Images

Twain allows you to import images from a variety of sources that support the twain specification.  These may be scanners or desktop web cameras or a number of other imaging devices.  You select the device you wish to use with the "Select Scanner" button.  If you only have one imaging device on you machine, you should be able to skip directly to the "Scan" button.  This activates the software that was installed with your device.  This software will vary from one device to another.  Once scanned, your current document will be replaced with the new one.


Buffers

A buffer in Dogwaffle is simply the area where drawing operations take place. There is a main buffer and a second hidden buffer called the swap buffer. It may be used for a temporary working area, and it is used by some filters and layer mixing.
The swap buffer is accessed by pressing the j key. The swap buffer then becomes the new main buffer and the main buffer becomes the swap buffer. The current buffer is displayed in the programs title bar as either ‘swap’ or ‘main.’

You may also copy the contents of the swap buffer to the alpha channel or the alpha channel to the swap buffer. When copying to the alpha, the buffers’ content is converted to an 8-bit grayscale.

Realtime ‘layer’ mixing between the two buffers is also possible.  See Layer mixing.


Layer mixing

Dogwaffle’s basic layer mixing takes place between the main buffer and the swap buffer. You activate layer mixing by clicking on the image icon at the top right of the tool palette. Right clicking on the icon activates a menu of options for layer mixing

Mixing active activates layer mixing.

Swap buffers swaps the main and swap buffer.  It’s the same as pressing the ‘j’ key.

Merge buffers causes the two buffers to be merged using the current mixing mode.

Additive Adds the RGB values of the paint color to the color on the canvass.  For example, if you paint with a dark blue onto a reddish image, you would get a light purple color.

Subtractative subtracts the paint color from the color on the canvass.

Multiply mode multiplies the paint and canvass color and divides them by 255.  The result is similar to painting with ink on ink.  The result is always darker.

Divide is the complement of multiply.  Use it as you see fit.

Screen is similar to additive but keeps an image from ‘blowing out’ or becoming overly bright.  It’s often useful for effects like stars and fire.

Around gray combines two colors around their middle brightness level.

Tracing paper lets the swap buffer show through, just a bit like tracing paper.

Show alpha causes the image thumbnail to represent the alpha channel.

Note Layers are not saved with a file, so you will have to merge your layers before saving your image.


Linear tools.


Natural tools

Dogwaffle contains many presets for natural tools. Right click on the paintbrush tool on the tool palette to activate a menu of available natural painting presets.
Right clicking on the brush icon at the top of the tool palette will activate The brush options panel.

The natural painting tools are effected by several settings on the tool panel.

Size.  This changes the size of any built in brush.  If you’re working with a custom brush, you can change its size with the Resample brush menu item

Opacity.  This changes the overall strength of the paint.

Step.  This setting changes the distance between ‘stamps’ of a brush.

Mode.  The paint mode determines how paint is applied to the canvass.  Normal mode is the default and works simply by applying the color of the paint directly.  Other modes such as additive use math functions to apply the RGB values of the paint to the canvass.  The paint mode and the fill mode each have a separate setting.  The setting for fill modes can be found in the gradient panel.  For paint modes, see Paint modes.


Paint modes

Paint modes work with the natural painting tools. They are selected from the 'Mode' dropdown tool near the center of the tool palette.

Default is a straight copy of the current paint color.

Additive Adds the RGB values of the paint color to the color on the canvass.  For example, if you paint with a dark blue onto a reddish image, you would get a light purple color.

Subtractative subtracts the paint color from the color on the canvass.

Multiply mode multiplies the paint and canvass color and divides them by 255.  The result is similar to painting with ink on ink.  The result is always darker.

Divide is the complement of multiply.  Use it as you see fit.

Screen is similar to additive but keeps an image from ‘blowing out’ or becoming overly bright.  It’s often useful for effects like stars and fire.

Around gray combines two colors around their middle brightness level.

Rubthrough lets you paint part of your swap buffer into your current buffer.  You can turn on layer mixing to see both layers at the same time, then paint one into the other.

Panto lets you copy part of an image from another area of your buffer.  Shift click to set the source area.  This effect is used quite often in image touchups to remove blemishes and errors from an image.

Smear, as it implies lets you smear an image.

Pattern uses the current custom brush as a pattern.  Generally, you select an area of the buffer as a custom brush and then switch to one of the internal brushes to paint with.

Offset pattern randomly changes the position of your patter by a small amount every time you make a brush stroke.  This is useful for giving an image an impressionist style.


Fill tools

Fill tools include the rectangle, ellipse and paint can tools. The text tool may also be considered a fill tool.
Fill styles are controlled from the gradient/fill panel. You can bring up the panel by right clicking on any of the fill tool icons, or by clicking on the gradient/fill icon.
Fill styles may include gradients, custom brush patterns, or custom brush warping. They may also have a paint mode applied to them which is set from the gradient/fill panel.

There are seven fill styles. Note that the exact effect will also depend on the fill mode, dithering, and attributes from the tool panel such as opacity and paper texture.

Normal Fills with a plain color.

Horizontal gradient Fills horizontally with the colors from the gradient.

Horizontal form-fitting gradient Fills horizontally with the colors from the gradient, so that the colors wrap nicely into the shape being filled.

Vertical gradient Fills vertically with the colors from the gradient.

Circular gradient Fills an area with the gradient mapped from the center out to the farthest rectangle surrounding the filled area. Thus if you fill an ellipse, you should set up the gradient with the color you want at the edge of the ellipse right in the center of the gradient.

Brush pattern Fills an area with a patter created from the current custom brush.

Form fitting brush. The custom brush is warped to fit the shape of the area being filled.


Filters

There are many special effects filters in Project Dogwaffle that can be used to enhance (or destroy) your images. They are accessed from the Filters menu. Go to the description of menu items to find out more.

Filter menu


Gradients

A gradient is a smooth range of colors defined by several sample colors. They are easily edited in Dogwaffle from the gradient/fill panel.
You may drag colors from the wells on the tool panel and drop them onto the dashed line under the gradient editor to add an entry. These entries show up as small triangles that my be moved around on the dashed bar.
Optionally, you may edit a gradient with the mouse by sweep drawing over the editing area for each of the color channels in the gradient.
Gradients are used by all of the fill tools, the render noise filters, the 'map to gradient' filter, and several others. They are also available to plugins should somebody want to use them.


Alpha channels

The alpha channel is a grayscale image that controls transparency for painting operations.

Right clicking on any of the alpha channel tools brings up the alpha options panel.

When something exists in the alpha channel, a border known as ‘marching ants’ appears in your buffer to show the basic shape of the alpha’s contents.

The hand icon lets you interactive move the contents of the alpha channel.

The flip icons flip the content of the alpha channel horizontally or vertically.

Replace and Add/subtract are mutually exclusive buttons that change the way drawing on the alpha channel works.  With replace mode, each time you draw something on the alpha channel, it replaces what was already there.  While using Add/Subtract, drawing with the right-mouse-button adds to what’s in the alpha, while drawing with the left-mouse-button subtracts from the alpha.

Clear alpha clears anything that’s in the alpha and disables it.

Select all ‘selects’ the entire alpha, technically setting the entire channel to a value of 255.  This will cause the alpha channel to have no effect.  There’s seldom any need to use select all since all operations will work whether an alpha channel is active or not.

Alpha on/off non-destructively activates or deactivates the alpha channel.

Invert alpha makes a negative of the alpha channel, essentially making what was selected unselected and what was unselected selected.

Store alpha stores a copy of the alpha channel for later use.  Use this to preserve your ‘selection’ so you don’t have to repeat the steps to create it again later.

Blur alpha blurs the image in the alpha channel.

Grow alpha increases the size of a ‘selection.’  Basically it expands the boundaries of bright parts of the alpha image.

Shrink alpha decreases the size of a ‘selection.’  Basically it expands the boundaries of dark parts of the alpha image.

Adjust alpha lets you view the contents of the alpha channel and change its value, brightness, contrast and gamma.  This can be useful for enlarging, shrinking or tightening up fuzzy areas of the alpha channel.

Dynamic range adjusts the alpha channel so that it uses the entire range of possible values, 0-255.  If you have problems with paint bleeding through your alpha selection, this will take care of it.

Alpha glow uses the current primary color to create a glow effect around your current alpha selection.

Drop shadow renders a shadow based on your alpha selection.

Paint on alpha lets you paint directly into your alpha channel using all of the programs paint tools.  When you’re done, click on the ‘Paint normally’ button.

Also see the Alpha menu


The brush options panel

Left click the brush preview icon to bring up the brush options panel.

Under the Common tab, you have a number of options for modifying the behavior of your brush.

Custom style lets you change the appearance of your custom brush. Color mode shows your custom brush in full 32-bit color 32. Matte mode shows the brush in a single color specified by your primary or secondary color depending on which mouse button you paint with.

Anti-Aliasing removes stepping error from internal brushes at they’re scaled or rotated.

Scale by speed scales an internal brush based on the speed that you paint. Very natural looking brush strokes are possible with this feature.

Random position places the brush at random spots relative to your brush stroke.

Random size scales an internal brush randomly.

Random angle rotates an internal brush randomly.

Random hue randomly changes the ‘hue’ component of the color of an internal brush or custom brush in matte mode.

Random sat randomly changes the ‘saturation’ component of the color of an internal brush or custom brush in matte mode.

Random value randomly changes the ‘value’ component of the color of an internal brush or custom brush in matte mode.

Bleed is the attribute of a brush stroke that gives the appearance of paint being picked up and smeared around.

Dryout is the speed at which you run out of ‘paint’ on the bristles of a brush as you paint.

The Build tab features controls that let you build a custom airbrush or bristle-like brush.

‘Brush Radius’ is the size of the brush you want to build.

‘Bias’ controls the appearance of your brush.

Cellular makes the brush appear like a paintbrush with bristles.

Cell size changes the size of the bristles

Cell density changes the number of bristles in you brush.

Invert makes an image that appears more like a sponge than a brush.

Post effects are image processing filters that are applied after each brush stroke. Please note that Post FX are only available with custom brushes and not internal brushes.

Enable Enables Post FX

Emboss is an effect that creates the appearance of thick brush stokes such as oil paints.

Value modifies the appearance of thickness.

Opaque watercolor processes a brush stroke so that it appears to be painted in opaque watercolors, after drying. Applying multiple strokes will have the effect of ‘covering up’ what’s underneath.

Translucent watercolor processes a brush stroke so that it appears to be painted in translucent watercolors, after drying. Applying multiple strokes will have the effect of blending with and darkening the underlying colors

Shadow causes a drop shadow to appear underneath a custom brush.

Offset is the distance from the brush and the underlying shadow.

Blur is the amount of blur applied to the shadow.

Opacity is the darkness of the shadow.

Modal applies the brush stroke as a single color that is blended with one of the following modes; additive, subratitive, multiply, divide, and screen.


Optipustics

Optipustics are the silly-named procedural brushes that do various things such as render grass and trees...

There are a number of preset effects possible with Optipustics.  You can try them for yourself by clicking on the ‘Settings’ button at the bottom.

optipustics are used to generate particles along the mouse path, which can split into more trails over time. They can also change color according to the Gradient seetings.

This is a great feature for making foliage effects of many kinds, as well as grass, bushes, hair, fur, water fountains, fireworks and such.

Particles can have mass and be subject to gravity, causing the branches to show weight and bend down. Or up depending on the value of gravity.

Terminal velocity is the maximum speed a particle can travel - when a particle reaches a state of zero acceleration due perhaps to air resistance.

Split angles and other values don't have to be identical and look too perfect or mathematical. The 'randomize' factor can give a more natural, wilder look to it.


Custom brushes

Custom brushes are brushes created by the user, and override the internal brushes. They can be created with the brush selector tool, or with 'copy selection' from the brush menu. Copy selection uses the alpha channel to determine the shape of the brush.  Once a brush is created, it may be selected from the bottom of the menu of available brushes when you left click on the brush icon.

One of the key features of Dogwaffle is the ability to let you define your own custom brushes very easily.  You do this with the brush selector tool.  In effect, you clip out a rectangle image from your buffer and key out, or make transparent, the unwanted areas.

Custom brushes may also be used as fill patterns from the Gradients panel.

The brush keyer

Custom Brush transparency is controlled by the brush keyer. A key is a way of making parts of an image transparent based on certain colors in the image. Keying out those colors makes them transparent. Moving the mouse over the preview on this panel brings up an icon that lets you select colors from the image. That color then becomes the key color as represented by the checkerboard pattern.  Changing ‘Low clip’ and ‘High pass’ lets you alter the amount of keying for the brush.

‘Invert key’ reverses the key so that everything this is not similar to the color you selected is keys.

‘Use alpha if active’ will use the alpha channel - if active - to define the brush key instead of a key color.

Moving High pass all the way to the left will remove all brush transparency.

 When picking up a custom brush, selecting with the right-mouse-button will erase the original image to the current secondary color.

Switching between custom brushes and internal brushes can be accomplished in several ways – clicking on the brush mode button in the brush options panel, or clicking on the last item in the internal brushes.

You can also make use of various pixel ops methods (replace, additive, multiplicative,...) and built-in PostFX like shadow drops right from the brush, Bleed through and Dryout to mimic effects like translucent watercolors, loaded oils and more.

Technically, the difference of the selected color and each pixel's color is pushed through a lookup table defined by the low clip and high pass scrollers, to get the final key.

Animated Brushes

The next step is of course, the Animbrush. Instead of using just a single image as part of the brush, it lets you use several images, e.g. from a image file sequence, or from an animation made right in Dogwaffle.

The brush manager

The brush manager stores a brush or animbrush in memory and allows it to be modified on the fly in a number of ways.  It is also possible to have more than one manager open at a time, allowing you to switch between brushes very easily or store brushes for later use.  The manager makes it easy to change the size, rotation, or color attribute of you brushes as you work with them, without destroying the original brush.  It is also possible to add brush frames to an existing animbrush, even if the brushes are of different sizes.


Paper textures

Paper textures are used both by the Natural tools, and the Fill tools. An embossing effect is created giving a drawing the appearance of a rough paper.
The effect of dry paint that doesn't fully penetrate the fiber of the paper may also be created using the drybrush option. It works in conjunction with the opacity slider to control the dryness of the effect.  Negative reverses the raised effect of the paper.  The slider at the top lets you control how much the paint is effected by the paper.

Note when using Drybrush that the current opacity setting has a great effect on what you paint.

If you left-click on this icon, a small triangle will appear in its upper left corner, flagging it to show that it is activated.

From then on, if you use tools which paint pixels, there is a texture that appears along with the coloring effect. For example, while painting with an airbrush, the paper texture will be revealed.
Another use of this is when using the "q" shortcut for filling the whole buffer or current selection.
Also, in the Filters menu, under Artistic effects, you can add a paper texture effect to the buffer.
If you right-click this icon, a set of options will appear, such as:

•	a slider to set the intensity of the paper texture

•	various mode selectors

•	a selection of preset textures such as for paper, canvas, stucco, snake skins, and more.

and finally a Load... button to load your own texture, in Jpeg or Bitmap (bmp) format. So you can now scan your own textures and use them too.


Animation

Dogwaffle features a powerful animation subsystem that makes it simple to create a variety of different styles of animation.  For example, you could create a flipbook like students draw in the corners of their text books.  You could also use the animation features to edit an existing frame sequence that was acquired outside of the program.  You can load a frame sequence of many different formats.  You do so by selecting "Load Sequence..." from the animation menu and multiple selecting the specific frames you wish to load.  Once you have an animation created, you can save it as a single to keep it organized while you work on it.  Saving an animation in a single file is also faster than saving out or loading individual frames.  Beware though, these files can become quite large.

The animation panel can be enabled from the Windows menu.  With this panel, you can control the playback of an animation.  You have several VCR like controls such as stop and play.  You also have a scrub bar to scroll through the frames of your animation.  There is a Plus and Minus button available that will add or subtract frames form your animation.  Say you needed to change the timing of a character you've drawn.  Simply add a frame and draw an in-between frame by making use of the onion skin feature to see the next and previous frames.

Onion Skin

Between the FPS (frame per second) and the +/- buttons (add/remove frames), there is the onion skins button.

When you click this button, Dogwaffle will show not only the current frame of the animation, but also the prior and following two frames. Of course if these frames haven't been drawn yet, they'll be blank and not distinct from the background color (e.g. plain white).  Animators use this feature to gain a better picture of where their characters action is leading, or for creating in-between frames.

By default, you work on a light background like an animator working on a piece of white paper, but you might also want to work on a dark background.  In this case, pressing Ctrl-l will toggle the two modes.


Radiant

is an advanced lens flare renderer for Project Dogwaffle that complements the internal (quick and easy) nova and lens flare tools. Lens flares are glows and reflections that occur inside the lens assembly of a traditional camera. The irony is that real photographers try to avoid them, while CGI artists pride themselves of showing how cool they look, because they come this much closer to the "real" thing. Most camera manufacturers will tell you that they have worked to get rid of them - but they're actually sort of pretty. Radiant allows extensive control over every element of an effect, and results can be rendered out to a series of frames (such as for an animation in which a bright flare is moving).

A single-frame lens flare is usually rendered and then passed on to Dogwaffle by way of the brush. It is loaded as a custom brush and thus can be used to paint single or multiple "impressions" of the flare image. A typical way to use this brush at that time is to change the draw mode from Default to Additive, and to reduce the intensity or impact of the flares by reducing the opacity of the brush effect.


Plugins

Dogwaffle exports some of it's internal data and functions to external applications. Anyone who wants to may create applications in Visual Basic 5 (professional or enterprise) or above that can communicate with Dogwaffle and access it's data structures and functions.
There is a good handful of plugins already available including the ability to import and export Windows BMP files and they are included with the distributable.

Filter Plugins

Import Plugins
Export Plugins
Brush Plugins
Misc plugins


Filter Plugins

12 bit dither converts an image to the appearance of a 12 bit color space using Floyd dithering. The buffer is maintained at 24 bits.

Black hole distorts the image with a spherical warp.

Cellular renders an image based on overlapping spheres. The result is a sort of cell structure.

Globe distorts the image as if looking at it through a crystal ball.

Maximize_pf sets each pixel to the highest value of the neighboring pixels.

MaxMin_pf performs a maximize and then a minimize. The result is very similar to the original but with light noise removed.

Median_pf sets each pixel to the middlest value of it's neighboring pixels. It is commonly used to remove noise spikes from an image, although the minmax and maxmin filters will probably be more useful.

Minimize_pf sets each pixel to the lowest value of the neighboring pixels.

MinMax_pf performs a minimize, then a maximize. The result is very similar to the original but with dark noise removed.

Marage_pf creates a vertical mirror image similar to a marriage.

Motion blur_pf applies an effect similar to a picture taken with a moving camera.

Mosaic_pf converts the buffer into a chunky pixely looking image.

MysticVision_pf does a zoom effect and adds the result on top of the original.

OptimizedPalette_pf converts the buffer to the appearance of an 8 bit image using an optimized color table and random noise dithering.

Propagate_PF makes an image appear to have been painted with oil paint dabs.

RubberSheet_pf maps the buffer onto a polygon with control points as if stretch in image on a rubber sheet.

Spherize_pf maps the buffer onto a sphere with lighting effects. Use the left mouse button to move the first light and the right button to move the second light.

Zoom_pf applies a zoom effect from the center.


Import Plugins

bmp_pi imports a BMP file into the current buffer, erasing the current one. Compression and alpha loading is not supported.

Twain_pi imports a file from a scanner or twain compatible device.


Export Plugins

bmp_px saves the current buffer as a BMP file. Currently compression and alpha saving is not supported.

iff_px exports an image as a 24 bit Amiga IFF (Interchange file format)

print_generic_px exports the current buffer to the printer using the current settings. Anybody out there care to write a more flexible version???

printerprefs_generic opens the windows printer control panel.


Brush Plugins

Store_brush_pb stores a brush so it can later be recalled. Also useful just for viewing a brush with it's key.

SwapWithBuffer_pb swaps the main buffer and the custom brush.

bmp_load_pb loads a brush from a bmp file.

bmp_save_pb saves a brush as a bmp file.

KeyInvert_pb Inverts the key(or alpha) of the current brush

KeyToBlack_pb creates a new key for the current brush using black as the key color

KeyToLuminance_pb uses the brightness values of the current brush to create a new key.

KeyToNone_pb removes a key from a brush.

KeyToPrimaryColor_pb creates a new key for the current brush using the current primary color as a key color

KeyToSecondaryColor_pb creates a new key for the current brush using the current secondary color as a key color.


Misc plugins

Alpha grow enlarges the alpha channel selection.

Alpha shrink reduces the alpha channel selection.

AverageFrames_pm averages the specified number of frames of an animation into a single frame. The result is useful for averaging out film grain or video noise on a non-moving image. The results can be a dramatically improved image.

Clock_pm displays a clock. Right clicking on the clock brings up some options. Programmers, feel free to add new bitmaps and stuff to the source code...

ColorMixer_pm displays a panel similar to an artist palette where colors can be mixed.

FieldPack_pm lets you convert sequences of interlaced frames into non-interlaced using special filters to maintain more detail than simple interpolation provides. It can also extrapolate additional frames using motion analysis and morphing to make 4 frames from every one interlaced frame. Other features include re-interlacing of frames. Fieldpack has it's own help system, so check that for further information.

FrameFromClipboard overwrites the current frame in an animation with the contents of the clipboard. Find your own use for it.

GradientToVB_pm writes out Visual Basic source code placing the current gradient into an array.

LoadPaper_pm loads a new paper texture to replace the internal ones. It allows you to load jpeg or bmp files.

PaletteToGradient_pm  creates an optimized 256 color palette from the current image and applies it to the current gradient.

PaletteToWells_pm creates an optimized 64 color palette from the current image and applies it the color wells.

ScaleAlpha_pm scales the content of the alpha channel by a specified amount.

StoreAlpha_pm stores the current alpha channel for later recall. It also has several options for managing the stored alpha such as adding to, subtracting from or replacing the current alpha.

StoreBuffer_pm stores the current buffer for later recall.


Programming plugins in Visual Basic

Dogwaffle plugins are standard executable programs that are written in Visual Basic. No restrictions are placed on developers, except that a plugin use only controls that are used by dogwaffle. This will allow plugins to be distributed without an installer. The interface uses automation that is built into Visual Basic and is so well hidden from the programmer, that it only requires one line of code to get things going.
Plugins executables names are appended with "_pf" for a filters, "_pi" for importers, "_px" for exporters, "_pb" for plugins that act on brushes, and "_pm" for plugins that don't fall into any of the other categories. This convention is only so dogwaffle can neatly categorize it's plugins.
To get a list of all available functions and their descriptions, create a reference to dogwaffle in Visual Basic (Project menu/References...) and use the Object Browser (View menu).
The following components are used by dogwaffle:
Microsoft common dialog 6.0 (sp3)
Microsoft common controls 5.0 (sp2)
Microsoft Rich Text Box 6.0 (sp3)
It is recommended that you use only these components and remove any additional components and references. If you use additional components or referees, you may have to include an installer for them (so I recommend getting by with the basics).

To access the plugin interface functions, you create a dogwaffle object. It sounds scary if you haven't done it before, but It's really simple, only one line (or two if you count the dim statement), then everything works the way your used to dealing with stuff in Visual Basic.
'create a dogwaffle object
Public Dogwaffle As Object
Set Dogwaffle = CreateObject("Dogwaffle.Dogwaffle_Class")
'now you can use any dogwaffle method (or function)
'like this
'Dogwaffle.Refresh 'refreshes the screen

Reference of plugin interface methods:

Check online for an update version of this information..

Look at the example code if you’re not sure how to use anything. Code for all of the current plugins is provided on the dogwaffle web site: www.geocities.com/squirreldome

Sub Dog_ActivateCustomBrush()
Activates the custom brush tool.

Property Dog_BufferHeight As Integer
read-only
The hight of the main buffer in pixels

Property Dog_BufferWidth As Integer
read-only
The width of the main buffer in pixels

Function Dog_CreateEmptyBrush(BrushWidth, BrushHeight)
Creates a new empty custom brush of the given size. Returns -1 if could not be created.

Function Dog_GetABuffer()
Gets a copy of the alpha channel in a variant

Function Dog_GetAlphabits() As Byte
Returns a value that indicates the activation state of the alpha channel

Function Dog_GetB(X As Integer, Y As Integer) As Long
returns the blue attribute of the specified pixel.

Function Dog_GetBBuffer()
Gets a copy of the main green buffer in a variant

Function Dog_GetBrushABuffer()
Gets a copy of the current working custom brush alpha buffer.

Function Dog_GetBrushBBuffer()
Gets a copy of the working custom brush blue buffer

Function Dog_GetBrushGBuffer()
Gets a copy of the working custom brush green buffer.

Function Dog_GetBrushHeight() As Integer
Gets the height in pixels of the current working custom brush.

Function Dog_GetBrushRBuffer()
Gets a copy of the working custom brush red buffer.

Function Dog_GetBrushWidth() As Integer
Gets the width in pixels of the current working custom brush.

Function Dog_GetG(X As Integer, Y As Integer) As Long
returns the green attribute of the specified pixel.

Function Dog_GetGBuffer()
Gets a copy of the main green buffer in a variant

Function Dog_GetGradient(Index As Integer)
Gets a copy of the gradient There are 8 indexes altogether. Use Dog_GetGradientIndex to get the one currently selected by the user.

Function Dog_GetGradientIndex() As Integer

Function Dog_GetPrimaryColor() As Long
Gets the primary pen color that is used for drawing with the left mouse button.

Function Dog_GetR(X As Integer, Y As Integer) As Long
Returns the red attribute of the specified pixel.

Function Dog_GetRBuffer()
Gets a copy of the main red buffer in a variant

Function Dog_GetRGB(X As Integer, Y As Integer) As Long
Returns the RGB attributes of the specified pixel in long word format.

Function Dog_GetSecondaryColor() As Long
Gets the secondar pen color that is used for drawing with the right mouse button.

Function Dog_GetSwapBBuffer()
Returns the Swap blue buffer in a variant

Function Dog_GetSwapGBuffer()
Returns the Swap green buffer in a variant

Function Dog_GetSwapRBuffer()
Returns the swap red buffer in a variant

Sub Dog_Lock()
Locks the buffers to prevent them from being accessed you're using them.

Sub Dog_MessageBox(message)
Displays the supplied message to the user

Sub Dog_NewBuffer(width As Integer, height As Integer)
Creates a new dogwaffle buffer (currently erasing the old one)

Function Dog_QuestionBox(message) As Integer
Prompts the user with a OK/Cancel requester. Result is 1 for ok and 2 for cancel.

Sub Dog_Refresh()
Refreshes the display after you've made changes.

Function Dog_RequestFile_Open(Title As String, Filename As String, Pattern As String) As String
Displays an Open file requester. Result is a filename or ""

Function Dog_RequestFile_Save(Title As String, Filename As String, Pattern As String) As String
Displays a Save file requester. Result is a filename or ""

Sub Dog_SaveUndo()
Saves an undo

Sub Dog_SendFormObject(NewObject As Object, showmode As Integer)
A form in Visual Basic is a window with controls and various subroutines attached. The whole crazy thing is handled as an object and can thus be treated as a single thing referenced by a variable of type Object. Dog_SendFormObject sends an instance of a form object to Dogwaffle and displays it as part of the dogwaffle interface.

Sub Dog_SetABuffer(abuf)
Sets the alpha buffer with the supplied array.

Sub Dog_SetBBuffer(bbuf)
Sets the blue buffer with the supplied array.

Sub Dog_SetBrushBBuffer(bbuf)

Sub Dog_SetBrushGBuffer(gbuf)

Sub Dog_SetBrushRBuffer(rbuf)

Sub Dog_SetGBuffer(gbuf)
Sets the green buffer with the supplied array.

Sub Dog_SetPrimaryColor(R As Byte, G As Byte, b As Byte)
Sets the primary pen color that is used for drawing with the left mouse button.

Sub Dog_SetProgress(progress As Single)
Sets a value to the visible progress bar on the plugin interface. Progress is a value between 0 and 100.

Sub Dog_SetRbuffer(rbuf)
Sets the red buffer with the supplied array.

Sub Dog_SetRGB(X As Integer, Y As Integer, R As Byte, G As Byte, b As Byte)
Sets the specified pixel in the main buffers to the value r,g,b.

Sub Dog_SetSecondaryColor(R As Byte, G As Byte, b As Byte)
Sets the secondary pen color that is used for drawing with the right mouse button.

Sub Dog_SetSwapBBuffer(jbbuf)

Sub Dog_SetSwapGBuffer(jgbuf)

Sub Dog_SetSwapRBuffer(jrbuf)

Sub Dog_Unlock()
Unlocks the buffers for use by the user (if no other plugin still holds a lock).

Function Dog_ValueBox(Title As String, Min As Integer, max As Integer) As Integer
Prompts the user for a value within a specific range. Result is the value or -1 if canel.

Methodes that were new to version 1.o

I'll get these better documented when I can...

dog_getWells()

dog_setWells()

dog_SetGradient()

dog_SetMousePointer()

dog_NewBrushFilename()

dog_NewFilename()  Sets the filename on top of the window.

dog_RenameBuffer()

dog_AlphaOff()

dog_AlphaOn()

dog_IntMarquee()  Initializes the marching ants if the alpha has been changed.

New to later version:

'change the paper texture.

Dog_NewPaper(filename As String)

'change the image used by the status bar.

Dogwaffle.Dog_ChangeBarImage (filename as string)

'replacement for value box.  Gets a value from the user using a slider control

Dog_ValueBox2(Title As String, Caption As String, Min As Long, max As Long, Default As Long) As Long

'clipboard related

Dog_PasteBrush()

Dog_CopyBrush()

'replace the 'internal' brush images

Dog_ReplaceInternalBrush(filename As String, Index As Long)

'index is 0-42.  Index 43 is used internally for the custom brush.

function to return the filename of the wallpaper image in use by dogwaffle

Dog_WallpaperFilename() 'as string

Animation related<BR>

Dog_InsertFrame(Frame As Long)

Dog_CreateAnim(Frames As Long)

Dog_GetFrame()

Dog_StoreFrame()

Dog_GotoFrame(Frame As Long)

Dog_DeleteFrame(Frame As Long)

Dog_GetTotalFrames() As Long

Dog_GetCurrentFrame() As Long

Dog_FreeAnim()

Use the object browser for a full list.

Tablet related

Public Function Dog_IsTabletActive () As Boolean

Public Function Dog_GetPressure() As Single

Returns a value between 0 and 1

Public Function Dog_GetAltitude() As Single

Public Function Dog_GetAzimuth() As Single

Public Function Dog_GetPitch() As Single

Public Function Dog_GetRoll() As Single

Public Function Dog_GetTwist() As Single

Public Function Dog_GetYaw() As Single

The plugin examples may be freely modified and distributed.  That's what they’re  there for.


Example plugin

Here is a very simple example of a plugin. The following is the complete program. Just paste it into an empty project with no forms, and one module. That's it.

Sub Main()

'*** NEGATIVE FILTER EXAMPLE ***

'’to use this example, create a visual basic project with no forms

'’and one empty module and paste this code into it.  that's it.

'’dogwaffle should be running when this code is executed.

Dim x As Integer, y As Integer

Dim r As Byte, g As Byte, b As Byte

'’allocate the main buffers

Dim MainRBuffer() As Byte

Dim MainGBuffer() As Byte

Dim MainBBuffer() As Byte

'’create a dogwaffle object

Dim Dogwaffle As Object

Set Dogwaffle = CreateObject("Dogwaffle.Dogwaffle_Class")

‘'get the width and height of the buffer

th = Dogwaffle.Dog_BufferHeight

tw = Dogwaffle.Dog_BufferWidth

'’get the buffers

MainRBuffer() = Dogwaffle.Dog_GetRBuffer

MainGBuffer() = Dogwaffle.Dog_GetGBuffer

MainBBuffer() = Dogwaffle.Dog_GetBBuffer

'’process the buffers.

'’in this case, a negative effect.

  For y = 0 To th-1

   For x = 0 To tw-1

      r = MainRBuffer(x, y)

      g = MainGBuffer(x, y)

      b = MainBBuffer(x, y)

      MainRBuffer(x, y) = 255-r

      MainGBuffer(x, y) = 255-g

      MainBBuffer(x, y) = 255-b

    Next

  Next

'’send the buffers back to dogwaffle.

Dogwaffle.Dog_SetRbuffer MainRBuffer()

Dogwaffle.Dog_SetGbuffer MainGBuffer()

Dogwaffle.Dog_SetBbuffer MainBBuffer()

'’and refresh the screen

Dogwaffle.Dog_Refresh

End Sub


Menu items.

File menu
Buffer menu

Brush menu
Filter menu
Alpha menu
Window menu
 The help menu


File menu

New... closes the current buffer and creates a new one of a specified size.

Open... closes the current buffer and opens a new one from a targa file or any supported file. Currenly over 69 formats are supported. If the new file is the same size as the existing one, the current is overwritten and the swap buffer remains as it was.  See Supported Formats.

Import plugin... displays a list of import plugins. Currently BMP and Twain is supported. More may be provided at a future date or developers are welcome to create there own.

Save... saves the current buffer as a targa file or as any supported file including Jpeg, Tiff, Png and more. Note that only the current buffer is saved. If your using layer mixing, you'll have to combine the layers first before saving.

Export plugin... displays a list of export plugins. Currently Windows BMP, Amiga IFF, and printer exporters are provided.

Print setup displays Windows printer setup panel.

Print Prints the current document.

Twain imports images from a scanner or twain compatible device.

Prefs lets you change the program to your liking.  See Error! Reference source not found..

Quit exits Project Dogwaffle.


Buffer menu

Undo erases previous actions.

Redo redraws undone actions.

Clear clears the current buffer to the secondary color.

Store... stores a copy of the current buffer so it can be recalled later.

Buffers/Swap buffers swaps the current and spare(or swap) buffer. The swap buffer is a place for storing temporary images or may be used for layer mixing. It's also used by some filters.

Buffers/Copy to Swap copies the current buffer to the swap buffer.

Buffers/Copy swap to Alpha copies the swap buffer to the alpha channel, converting it to 8 bit greyscale in the process.

Buffers/Copy Alpha to Swap copies the alpha channel to the swap buffer. It then may be edited and copied back. Provides a means of working on the alpha channel.

Flip flips the buffer and the alpha channel horizontally or vertically (but not the swap buffer).

Rotate rotates the buffer, the swap buffer, and the alpha channel clockwise or counterclockwise.

Resample... scales the buffer, swap buffer, and the alpha channel to a specified size.

Crop to Selection changes the buffer to the size of whatever is in the alpha channel. Usually used with the 'rectangle to alpha' tool.

Greyscale converts the buffer to a greyscale. You have the option of mixing the channels in a way that is appropriate for a composite monitor or as a simple average. The best way to tell the difference is to apply to color bars. The buffer is maintained at 24 bits, with the red, green and blue channels each containing the same image.

Invert converts the buffer to a negative.

Dynamic range examines the buffer and increases the contrast to the highest possible value without loosing any color information.

Fill fills the entire buffer with the current fill settings.

Paint fill applies a paint like effect to the current selection. The effect is controlled by the current opacity and paper settings and is warped nicely to the shape of the selection.

Adjustable paint fill applies a paint like effect to the current selection and then presents a rubberband to control the orientation of the effect. The effect is controlled by the current opacity and paper settings and is warped nicely to the shape of the selection.

(Tip) Blurring the alpha channel selection will provide a softer raised effect, but it is also based on the current paper texture.

Buffer info... displays the width, height, and memory usage of the current buffer.


Brush menu

Copy selection creates a brush from the buffer using the alpha channel as a cookie cutter. Using the Brush selector tool on the tool panel may be simpler in many cases.

Load... loads a new brush from a file.

Save... saves the current custom brush to a file.

Free frees the memory used by the current custom brush.

Clipboard/Copy to clipboard copies the brush to the system clipboard for use by other programs.

Clipboard/Copy clipboard to brush copies the content of the system clipboard to a custom brush.

Brush Plugin... opens the plugin panel to the brush tab. See the section on plugins for more info.

Mode/Color. Custom brushes are painted to the buffer in the normal fashion.

Mode/Matte. Only the brushes’ key (or alpha) is used with the current drawing color.

Make seamless... blends the edges of a brush to get a seamless transition from one edge to the other. The size of the brush is reduce as its edges overlap.

Transform/Flip flips the brush horizontally or vertically

Transform/Rotate... rotates a brush by a specified value

Transform/Scale... scales the brush to a specified size.

Resample lets you change the size of a custom brush.

Create seamless image lets you make a seamless texture by blending the edges of a brush.  The result is a slightly smaller, seamless brush.

Create alpha shadow creates a drop shadow in a custom brush as part of its key.  Usually, you create an image on a black or dark background that becomes the shadow.


Filter menu

Adjust
Color

Blur
Sharpen
Convolve

Noise

Transform
Video

Artistic

Render

Composite

Displace

Emboss

Filter plugin

Fade last action... mixes the current buffer with what's stored in the most recent undo buffer.

Adjust/Color... lets you adjust the R,G,B channels of the buffer separately

Adjust/Value... displays a histogram of the current buffer and lets you adjust the Brightness, contrast and gamma. A histogram is a graph of the brightness values stored in a buffer.

Adjust/Saturation... adjust the saturation of the buffer.

Adjust/HSV... adjusts the Hue/Saturation/value of the buffer.

Color/Map to gradient the brightness of each pixel becomes an index into the current gradient, mapping the color at that index onto the pixel.

Color/Negative performs a simple average of the red, green and blue channels to get a grayscale image. The buffer is still maintained at 24 bit depth.

Color/Invert value creates a negative of only the brightness component of an image, leaving the hue and saturation intact.

Color/Power curve.  The formula for this function is gamma (Saturation * Value). Saturation is reduced more for lower values.
The idea was to simulate the way Human vision is less sensitive to color in low lighting.

Color/swap channels exchanges the Red, Green and Blue channels.

Color/Roll channels rolls the Red, Green and Blue channels, so that red becomes green, green becomes blue and blue becomes red.

Color/Eight bit dither applies 8 bit dithering techniques to the buffer. While the apparent color is reduced, the buffer is maintained at 24 bit depth. Optimized computes a palette of 256 colors from the image and maps to it. Ordered and random dither uses a fixed color space where each component is quantized to 6 steps.

Color/One bit dither applies 1 bit dithering techniques to the buffer. The random dithering is useful for generating a stipple effect. The buffer is maintained at 24 bit depth.

Color/Posterise... reduces the number of colors in an image so that banding becomes evident. The buffer is maintained at 24 bit depth.

Blur/Simple blur performs a simple box filter convolution to the buffer. Every pixel is averaged equally with each of its neighbors. The result is a slightly blurry image. If you plan on performing further convolution such as edge detect, then consider using the gaussian blur filter instead.

Blur/Gaussian blur... performs a guassian blur where the pixels are averaged with the middle pixel receiving the highest weight.

Blur/Custom blur... may some day be useful for creating 'circle of confusion' effects like those that are produce by real cameras.

Blur/Light diffusion... simulates the way light is diffused by an optical system, creating that 'dreamy' effect if overused.

Blur/Motion blur... creates the effect of motion blur by blurring in a single direction.

Blur/Zoom blur... creates the effect of zooming toward or into an image.

Sharpen/Shapen enhances the apparent sharpness of an image by increasing the contrast between neighboring pixels.

Sharpen/Unsharp mask.  While it sounds like the opposite of sharpen, unsharp mask sharpens an image in a more analytical way by only sharpening areas of higher contrast.

Digital camera enhance sharpens the grayscale component of a picture while reducing moiré patterns caused by a camera’s array of color sensors.

Convolve/Edge detect detects the edges of items in an image and gives them a solid outline similar to a pencil drawing.

Convolve/Emboss... gives an image a stone carving look.

Convolve/Color Emboss... adds the appearance of relief to and image.

Convolve/Maximize spacially expands areas of lightness in an image.

Convolve/Minimize spacially expands areas of darkness in an image. Might be used several times to create a painting like effect.
Convolve/Median spacially expands the average color in an image. This filter is useful for removing isolated noisy pixels from an image without adversely altering it's appearance.

Convolve/MinMax is useful for removing isolated bright pixels from a dark background.

Convolve/MaxMin is useful for removing isolated dark pixels from a light background.

Noise/Value... randomizes the brightness component of the buffer.

Noise/Color... adds random values to the red, green, and blue values of the buffer.

Noise/Jitter... displaces the pixels in a buffer by random values.

Transform/Shift... lets you move the pixels of the buffer around as if sliding a sheet of paper on a table. This lets you expose the edges of an image so you can work on making a seamless image, or like whatever.

Transfrom/Warp mesh... presents a grid with control points that can be dragged around. The image deforms to the shape of the grid in real time. Warp mesh requires that Direct X 7 be installed. It is not included, so if you need it, you'll have to find it elsewhere. Probably the Microsoft web sight would be a good place to look.

Transform/Isometric 3D... converts in image into what appears to be a 3-dimensional landscape by using the brightness value of each pixel as a Z coordinate. This filter works best if the buffer is square. A color may be dragged from the color wells onto the light color gadget, or a color may be picked from the Windows color dialog. The inverse of the specified light color will be used to fill in shade areas. Height is the maximum number of pixels to displace the z coordinates. Shading quality determines if the slope of each pixel is calculated only by the neighboring pixel, or by multiple pixels. Shading intensity determines the contrast between the light and dark areas, and Shading depth determines the smoothness of the surface. Gloss and specular work together to specify the shininess of the surface, while the effect is greatly dependent of the shading depth. Color from swap uses the pixels of the swap buffer to paint the surface of the landscape.

Video/Slate creates an NTSC style color bar pattern.

Video/De-Interlace. Images captured from video footage will likely be interlaced. Interlace is the way images are stored as 2 even and odd planes (or fields) in a single image. This allows video systems to display 60 images per second with only 30 frames. But the side effect, if you look at individual frames of video, is that that images that contained movement appear to jitter on a TV monitor. This is because the two fields of the frame are actually being displayed one at a time, switching back and forth very quickly. The De-Interlace filter uses a vertical-only blur convolution to blend the two fields of the image together and removes the flicker. A plugin called Feild pack is provided that provides much more sophisticated handling of interlace video. It also allows sequences of frames to be processed.

Video/Reduce flicker similar to De-interlace, but doesn’t remove as much high frequency detail.

Video/Video lines simulates the visible scan lines found on a television monitor.

Artistic/Apply paper... applies the currently selected paper texture to the buffer. It's perfectly ok to select the paper texture from the tool panel while this filter is open.

Artistic/Wet paint... extrudes pixels to give the appearance that paint is running. Using a positive value makes the lighter colors run, and a negative value makes the dark pixels run.

Artistic/Brush strokes... applies stroke effects to an image along it’s contours.

Render/Plasma noise... renders fractal noise. Iterations is the number of times the recursive subroutine zooms in on the noise, increasing the detail. A small iteration gives a finer, higher frequency noise.

Render/Bumpy toy... Renders fractal noise, then applies a gradient to it. Using this, you could create the appearance of things like marble or clouds.

Render/Sky makes pretty skys.

Render/Radiant... allows you to create brilliant lens flares and reflections like those of a real cameras optical system. The connection between Dogwaffle and radiant isn't implemented yet, so for the time being, you'll have to save out your image in radiant and load it as a brush in dogwaffle.

Combine with swap/Mix... allows mixing between the main and swap buffers.

Combine with swap/Alpha blit... copies the swap buffer to the main buffer, using the alpha channel like a cookie cutter.

Combine with swap/Premultiplied alpha blit... copies the swap buffer to the main buffer through the alpha in a way that preserves the brighness of the original. Say you did a normal alpha blit of a text logo with a lens flare onto a light background, the edges of the lens flare would appear dark grey. Premultiplied compositing adjusts for these situations.

Combine with swap/Additive adds the swap buffer to the main buffer. The formula is simply Main(r,g,b) + Swap(r,g,b). If values exceed 255, they're clipped.

Combine with swap/Subtractitive subtracts the swap buffer from the main buffer. The formula is Main(r,g,b) - Swap(r,g,b). This is often used for finding the difference between two images. Pixels that are exactly the same will become black, where as pixels that are different between the two images won't.

Combine with swap/Mulitiply multiplies the two buffers and divides them by 255. One of my personal favorites. This filter is very useful when doing watercolor like paintings. You can paint on one buffer, then go to the other and paint something else, and combine the two as if you were painting on top of dry watercolor paint.

Combine with swap/Divide divides the two buffers. I've yet to find a use for it.

Combine with swap/Screen inverts and multiplies the two buffers. The result is a sort of additive where the brightness never produces clipping.

Comine with swap/Luminance combines the two buffers using the brightness of the swap buffer as a key.

Combine with swap/Compliment combines the inverse of the swap buffer using the color of each channel as a key.

Comine with swap/Around gray combines the two buffers so that values above 127 are additive and values below 127 are subtractative.

Combine with swap/If lighter combines if the value in the swap buffer are lighter then the values in the main buffer.

Combine with swap/If darker combines if the values in the swap buffer are darker than the values in the main buffer.

Combine with swap/Texturize multiplies the average of the swap buffer with the main buffer.

Combine with swap/Binary.  This is a way to dither an image down to 2 colors with the dither pattern being controlled by the swap buffer. You could for example use random noise, an ordered pattern, or a series of small circular gradients to create a halftone.

Composite with swap/Greenscreen performs the equivalent of a traditional green screen composite. Combines the main buffer with the swap through a matte that is based on the green content of the image. The two sliders control the closeness of the matte. The High clip slider determines how low a value of green will be considered part of the matte, while the low clip determins how much green will be ignored as part of the matte.

Composite with swap/Bluescreen.  See Greenscreen above.

Displace by swap/Displace displaces the pixels of the main buffer by the value of the pixels of the swap buffer. The pixels are displaced on x by the red channel, and on y by the green channel.

Displace by swap/Cloaking displace displaces the pixels in each channel of the main buffer by the values of the channels of the swap buffer in a way that is reminiscent of the Bird of Prey decloak effect. The effect was originally achieved by throwing off the timing of the film negative.

Emboss by swap/ embosses the main buffer by the brightness levels of the swap buffer.

Filter plugin... opens a panel displaying the available plugin extensions to Dogwaffle.

Plugins


Alpha menu

The alpha channel is similar to a matte, or friskette. Anything you paint through the alpha channel will have varying levels of opacity depending on what's in the alpha. It's possible to add primitive shapes to the alpha with the rectangle_to_alpha and Ellipse_to_alpha tools and the tool panel. It's also possible copy a buffer directly to the alpha channel using Image/Buffers/Copy Swap Buffer To Alpha.

Clear alpha clears anything that’s in the alpha and disables it.

Select all ‘selects’ the entire alpha, technically setting the entire channel to a value of 255.  This will cause the alpha channel to have no effect.  There’s seldom any need to use select all since all operations will work whether an alpha channel is active or not.

Alpha on/off non-destructively activates or deactivates the alpha channel.

Invert alpha makes a negative of the alpha channel, esetially making what was selected unselected and what what unselected selected.

Store alpha stores a copy of the alpha channel for later use.  Use this to preserve your ‘selection’ so you don’t have to repeat the steps to create it again later.

Blur alpha blurs the image in the alpha channel.

Grow alpha increases the size of a ‘selection.’  Basically it expands the boundaries of bright parts of the alpha image.

Shrink alpha decreases the size of a ‘selection.’  Basically it expands the boundaries of dark parts of the alpha image.

Adjust alpha lets you view the contents of the alpha channel and change its value, brightness, contrast and gamma.  This can be useful for enlarging, shrinking or tightening up fuzzy areas of the alpha channel.

Dynamic range adjusts the alpha channel so that it uses the entire range of possible values, 0-255.  If you have problems with paint bleeding through your alpha selection, this will take care of it.

Alpha glow uses the current primary color to create a glow effect around your current alpha selection.

Drop shadow renders a shadow based on your alpha selection.

Paint on alpha lets you paint directly into your alpha channel using all of the programs paint tools.  When you’re done, click on the ‘Paint normally’ button.


Window menu

Alpha panel... Opens a panel with options for modifying the alpha channel.

Animation panel... Opens a panel with a frame slider, VCR controls, framerate and the onion skin tool.

Brush options... opens the brush options panel.

The brush options panel

Fill Gradients... opens the Fill/Gradients panel.

Gradients
Fill tools

Optipustics... opens the Optipustics panel.

Optipustics

Zoom... opens the zoom panel. With it you control the size that the main buffer window appears on screen. The image size itself doesn’t change.

Refresh refreshes the screen if it needs it.

Unlock unlocks the buffer if a plugin has accidentally left it locked.


The help menu

About Project Dogwaffle displays the splash screen.

Project Dogwaffle Help displays the document you are reading.

Keyboard shortcuts displays all of Dogwaffle’s keyboard shortcut commands.

(Tip)  If you want to use this program or any other program efficiently, learn its shortcuts.


Dogwaffle FAQ

Why another image editor?
Dogwaffle isn't an image editor, it's a paint program for creating original images.

How do I use Dogwaffle as a plugin for Photoshop?
You don't. Photoshop and Dogwaffle are two separate things altogether.

Can I use Photoshop filters?
No. Dogwaffle has it's own flexible plugin architecture that's in no-way compatible with Photoshop.

Can I use Dogwaffle brushes in Photoshop?
No, unless someone really wanted to convert them into the format that photoshop uses.

Photoshop is the only graphics software I'll ever need.
If you think that, you're probably right.  On the other hand, you believe in using whatever tool does the job, best then you may find Dogwaffle fits the bill quite often.

How does Dogwaffle compare with Painter?
They're both tools.

How is Dogwaffle different from other paint programs on the PC?
The ability to easily create and work with custom brushes is quite nice. The real-time filters are hard to live without once you're used to them. The workflow has particular non-pc feel to it but may take some getting used to for the un-initiated.  Animation capabilities are quite limited in other applications.

I don't know how to do anything.
Keep in mind that right and left mouse buttons both have special functions for almost all of Dogwaffles tools. For the most part, left clicking selects the tool, and right clicking brings up a menu of options.

Does Dogwaffle only load Targas?
Dogwaffle loads nearly 70 formats. Set the 'Files of type:' gadget in the load dialog to 'all supported files.'

The background doesn’t stretch all the way on 1800x1600 screens.
Dogwaffle currently doesn’t stretch its backdrop. You're welcome to load a different background image and save it as the default.

Why is it so slow?
It isn't.
Are you running Windows ME? Nuff said. Seriously, menus stutter a bit under ME. I don't know why but it’s a lot better than it used to be.
Dogwaffle uses device independent bitmaps and can depend quite heavily on graphics hardware.

Why only two layers?
More will be available in version 2.  For now, there's a lot you can do with two layers.

I get lost and don't know what's going on.
Try pressing the 'esc' key. This clears all of the brush settings to their default settings.

Are there any tutorials?
Yes.  See www.squirreldome.com under the dogwaffle link.

What's an SKD?
Software development kit. If you don't know what it is, you don't need it.

Can I load and save Gifs?
No.

Can I set the quality level of JPG's?
Yes. Select Jpeg as the 'Save as type' in the file dialog. When you save, you'll get a panel asking for the compression quality.

What formats are supported for saving?
Currenly Targa, Bmp, Jpeg, Png, Psd (single layer), Tiff. More may be along later if anyone asks for them.

What's a 'swap buffer'?
Pressing the 'j' key will swap between the main buffer and the swap buffer. This extra buffer is there for your convenience. Use it for whatever you like. Some filters use the swap buffer as a source for certain effects, such as displacing one image by another. You may copy temporary images to the swap buffer to store for later, or you may paint through one buffer onto the other.

Do squirrels really eat acorns?
Yes they do, but they don't hibernate. BTW, you should never feed squirrels raw peanuts.

What's a custom brush?
You can create and paint with your own brushes. Some image editors requre brushes to be loaded from disc, but Dogwaffle lets you create and modify them on the fly. Once you pick up an image from the screen, it behaves just like a normal brush. The brushes transparency is controlled by a key color. This transparency can be modified on the fly in the brush key editor.

How do I flip the primary and secondary colors?
All color gadgets in Dogwaffle support drag-and-drop. Simply pick one up and drop it over the other - the two colors will be swapped.

I don't like using the Windows color editor when selecting colors for filters.
You don't have to. Since dogwaffle makes full use of drag -and-drop, simply drag colors from the wells, or the primary or secondary colors onto the color gadget in question. The same goes for the gradient editor -- You can edit the colors in a gradient manually, or you can drop colors onto the little dotted line below the gradient.

I don't like the computer style color mixers.
The mixer button at the bottom of the tool panel opens up any number of copies of the palette mixer. You can use this to mix colors, or you can pick a brush that you've already created to use as a palette.

What's up with color mixing in Dogwaffle?
You have a primary and secondary color - these correlate to the right and left mouse buttons. You can mix and paint with a separate color for each button.

What's up with rgb2?
These mixers let you select a color with only one mouse click by dragging across the three color bars.

What's up with the rectangle and circle tool?
There's a diagonal line going through each icon. Left clicking in the top left corner activates the tool as 'outline only' and clicking in the bottom right activates the tool as filled.

All I can paint is tiny little leaves and things.
Dogwaffle wasn't designed to be limited by the small selection of presets that are built into the program. That's why you can create your own brushes.

How are custom brushes just like regular brushes.
There are two modes, Color and Matte (F1, F2) Matte mode lets you use the custom brush just like a regular brush, with the color being determined by you primary or secondary color.

How do I create 'selections'?
Dogwaffle doesn’t do selections exactly -- It does an alpha channel. The second row of icons are the alpha channel tools. It goes something like 'lasso to alpha', 'rectangle to alpha', 'ellipse to alpha', and 'magic wand' using these tools allow you to exclude areas of you picture from being effected by drawing operations.
holding 'ctrl' lets you drag your 'selection'
holding 'alt' lets you modify your 'selection' by adding with the left mouse button, or subtracting with the right mouse button.
Selecting the menu item 'Brush->Copy all/selected' lets you pick up the selected part of the image and paint with it as a brush.

I don't like Dogwaffle. There's too much to learn and it's not like Photoshop.
If you don't mind learning stuff, then you'll get more out of it.

I don't like the way zoom is handled.
Me either.

How well does Dogwaffle work with Windows XP?
Pretty well.

How much ram is required to run Dogwaffle?
A good rule is twice as much as your OS requires.

Why isn't there a Mac version?
I never got around to getting a Mac. I'm sure they're lovely computers. For now, I'm stuck with a PC.

Are there hidden features in Dogwaffle?
Check out the keyboard shortcut reference in the help menu.

I don't know how to use Radiant.
Well, there's a lot to it. It was developed as a stand-alone application, so it's integration with Dogwaffle is not all it could be. Your best bet is to experiment with it. Your output can be copied back to Dogwaffle at any time with the 'Copy to Dogwaffle' button. The output is then sent to Dogwaffle as a new custom brush.

What's that FieldPack thing?
The field pack plugin lets you take an image sequence recorded from video and extrapolate extra frames by detecting motion in the video and morphing between the frames to get a new frame.

I don't like the default colors.
You can edit your own, select from the list of presets, or create a new set with the 'build palette from buffer colors' plugin. It's selected from the menu when you right click on the mixer button.

What are Optipustics good for?
I don't know, but there they are.


Supported Formats

Note, these are formats supported by Image Magick.  Not every feature is available from Project Dogwaffle.  These specifications are also subject to change or unreliability.  This information is provided only for your information and does not represent built-in features of Project Dogwaffle.  R=Read/W=Write.

ART

 R

 PFS: 1st Publisher

 Format originally used on the Macintosh (MacPaint?) and later used for PFS: 1st Publisher clip art.

 AVS

 RW

 AVS X image

BMP

 RW

 Microsoft Windows bitmap

CGM

 R

 Computer Graphics Metafile

 Requires ralcgm to render CGM files.

CMYK

 RW

 Raw cyan, magenta, yellow, and black samples

 Set -size and -depth to specify the image width, height, and depth.

CUT

 R

 DR Halo

DCM

 R

 Digital Imaging and Communications in Medicine (DICOM) image

 Used by the medical community for images like X-rays.

DCX

 RW

 ZSoft IBM PC multi-page Paintbrush image

DIB

 RW

 Microsoft Windows Device Independent Bitmap

 DIB is a BMP file without the BMP header. Used to support embedded images in compound formats like WMF.

DPX

 RW

 Digital Moving Picture Exchange

EMF

 R

 Microsoft Enhanced Metafile (32-bit)

 Only available under Microsoft Windows.

EPDF

 RW

 Encapsulated Portable Document Format

EPI

 RW

 Adobe Encapsulated PostScript Interchange format

 Requires Ghostscript to read.

EPS

 RW

 Adobe Encapsulated PostScript

 Requires Ghostscript to read.

EPS2

 W

 Adobe Level II Encapsulated PostScript

 Requires Ghostscript to read.

EPS3

 W

 Adobe Level III Encapsulated PostScript

 Requires Ghostscript to read.

EPSF

 RW

 Adobe Encapsulated PostScript

 Requires Ghostscript to read.

EPSI

 RW

 Adobe Encapsulated PostScript Interchange format

 Requires Ghostscript to read.

EPT

 RW

 Adobe Encapsulated PostScript Interchange format with TIFF preview

 Requires Ghostscript to read.

FAX

 RW

 Group 3 TIFF

 See TIFF format. Note that FAX machines use non-square pixels which are 1.5 times wider than they are tall but computer displays use square pixels so FAX images may appear to be narrow unless they are explicitly resized using a resize specification of "150x100%".

FIG

 R

 FIG graphics format

FITS

 RW

 Flexible Image Transport System

FPX

 RW

 FlashPix Format

GPLT

 R

 Gnuplot plot files

GRAY

 RW

 Raw gray samples

 Use -size and -depth to specify the image width, height, and depth.

HTML

 RW

 Hypertext Markup Language with a client-side image map

 Also known as "HTM".

ICO

 R

 Microsoft icon

JBIG

 RW

 Joint Bi-level Image experts Group file interchange format

JP2

 RW

 JPEG-2000 JP2 File Format Syntax

JPC

 RW

 JPEG-2000 Code Stream Syntax

JPEG

 RW

 Joint Photographic Experts Group JFIF format

MAT

 R

 MATLAB image format

MIFF

 RW

 Magick image file format

MONO

 RW

 Bi-level bitmap in least-significant-byte first order

MNG

 RW

 Multiple-image Network Graphics

M2V

 RW

 Motion Picture Experts Group file interchange format (version 2)

MTV

 RW

 MTV Raytracing image format

MVG

 RW

 Magick Vector Graphics.

 The native ImageMagick vector metafile format. A text file containing vector drawing commands accepted by convert's -draw option.

OTB

 RW

 On-the-air Bitmap

 P7

 RW

 Xv's Visual Schnauzer thumbnail format

PBM

 RW

 Portable bitmap format (black and white)

PCD

 RW

 Photo CD

 The maximum resolution written is 768x512 pixels since larger images require huffman compression (which is not supported).

PCDS

 RW

 Photo CD

 Decode with the sRGB color tables.

PCL

 W

 HP Page Control Language

 For output to HP laser printers.

PCX

 RW

 ZSoft IBM PC Paintbrush file

PDF

 RW

 Portable Document Format

PFA

 R

 Postscript Type 1 font (ASCII)

 Opening as file returns a preview image.

PFB

 R

 Postscript Type 1 font (binary)

 Opening as file returns a preview image.

PGM

 RW

 Portable graymap format (gray scale)

PICON

 RW

 Personal Icon

PICT

 RW

 Apple Macintosh QuickDraw/PICT file

PIX

 R

 Alias/Wavefront RLE image format

PNG

 RW

 Portable Network Graphics

PNM

 RW

 Portable anymap

PPM

 RW

 Portable pixmap format (color)

PS

 RW

 Adobe PostScript file

 Requires Ghostscript to read.

PS2

 RW

 Adobe Level II PostScript file

 Requires Ghostscript to read.

PS3

 RW

 Adobe Level III PostScript file

 Requires Ghostscript to read.

PSD

 RW

 Adobe Photoshop bitmap file

 PTIF

 RW

 Pyramid encoded TIFF

 Multi-resolution TIFF containing successively smaller versions of the image down to the size of an icon. The desired sub-image size may be specified when reading via the -size option.

PWP

 R

 Seattle File Works multi-image file

RGB

 RW

 Raw red, green, and blue samples

 Use -size and -depth to specify the image width, height, and depth.

RGBA

 RW

 Raw red, green, blue, and matte samples

 Use -size and -depth to specify the image width, height, and depth.

RLA

 R

 Alias/Wavefront image file

RLE

 R

 Utah Run length encoded image file

SCT

 R

 Scitex Continuous Tone Picture

SFW

 R

 Seattle File Works image

SGI

 RW

 Irix RGB image

SHTML

 W

 Hypertext Markup Language client-side image map

 Used to write HTML clickable image maps based on a the output of montage or a format which supports tiled images such as MIFF.

SUN

 RW

 SUN Rasterfile

TGA

 RW

 Truevision Targa image

 Also known as formats "ICB", "VDA", and "VST".

TIFF

 RW

 Tagged Image File Format

TIM

 R

 PSX TIM file

TTF

 R

 TrueType font file

TXT

 RW

 Raw text file

UIL

 W

 X-Motif UIL table

UYVY

 RW

 Interleaved YUV raw image

 Use -size command line option to specify width and height.

VICAR

 RW

 VICAR rasterfile format

 VIFF

 RW

 Khoros Visualization Image File Format

WBMP

 RW

 Wireless bitmap

 Support for uncompressed monochrome only.

WMF

 Windows Metafile

WPG

 R

 Word Perfect Graphics File

XBM

 RW

 X Windows system bitmap, black and white only

 Used by the X Windows System to store monochrome icons.

XCF

 R

 GIMP image

XPM

 RW

 X Windows system pixmap

 Also known as "PM". Used by the X Windows System to store color icons.

XWD

 RW

 X Windows system window dump

 Used by the X Windows System to save/display screen dumps.

YUV

 RW

 CCIR 601 4:1:1

 Use -size command line option to specify width and height.