Project dogwaffle help





Dogwaffle subjects

Buffers
Layer mixing
Natural tools
Paint modes
Fill tools
Filters
Gradients
Custom brushes
Paper textures
Menu items
The brush options panel
The Optipustics panel
Plugins
Programming the plugin interface with Visual Basic
Reference of plugin interface methods
Sample plugin







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.
You may also copy the contents of the swap buffer to the alpha channel. It is converted to an 8 bit grayscale as it's copied.





Layer mixing

Currently, layer mixing takes place between the main buffer and the swap buffer. 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. Layers are not saved together in a file, so you will have to merge your layers before saving your image.





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 settings panel.





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.
More latter...





Fill tools

Fill tools include the rectangle, ellipse and paintcan 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 gradent.

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. They are accessed from the Filters menu. Go to the description of menu items to find out more.

See the filter menu items




Gradients



Gradients are easily edited in dogwaffle from the gradient/fill panel.
You may drag colors from the wells on the tools 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.





The brush options panel

more later...





Optipustics

Optipustics are procedural brushes that do various things...
more later...





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.
One 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.
Custom brushes may also be used as fill patterns from the Gradient/Fill panel.





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.





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 are 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.

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 usefull.

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 marage.

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.

RubberSheet_pf Maps the buffer onto a polygon with control points.

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. Any programmers care to finish this plugin. It just needs an interface to set the x and y coordinates of the center. Source codes in the plugins.zip file.



Import Plugins

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



Export Plugins

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

iff_px This plugin is not currently functional. It saves all the correct iff header and the body correctly, but it just needs the proper chunky to planer conversion. We have any Amiga people out there that would like to finish this off?

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 pannel.



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.

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...

b>Color mixer Displays a panel similar to an artist palette where colors can be mixed.

FieldPack_pm This plugin 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.

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

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

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

StoreAlpha_pm This plugin 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 This plugins 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:

This may or may not be a full listing. Look at the example code if your not sure how to use anything. Code for all of the current plugins is provided in the directory were dogwaffle is installed.

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.


And that's about it. The example source code is in a zip file that shipped with dog waffle. The plugin examples may be freely modified and distributed. That's what it's there for. Most of it is fairly simple.




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
Windows menu
Prefs menu
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. If the new file is the same size as the existing one, the current is overwritten and the swap buffer remains as it was.

Open plugin... Displays a list of import plugins. Currently BMP 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. 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 BMP and printer exporters are provided. IFF is under developement.

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 alhpa 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 alhpa 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 alhpa channel as a cooky 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.

Brush Plugin... Opens the plugin panel to the brush tab. See the section on plugins for mor info.

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

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 more seamless transition from one edge to the other.

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.




Filter menu

Adjust
Color
Blur
Sharpen
Convolve
Noise
Transform
Video
Artistic
Render
Combine with swap
Composite with swap
Displace by swap
Emboss by swap
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 seperately

Adjust/Value... Displays a historgam 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 greyscale 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 mappes 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 wieght.

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 in a more analitical way by only sharpening areas of higher contrast.

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

Convolve/Emboss... Give 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 This filter is useful for removing isolated bright pixels from a dark background.

Convolve/MaxMin This filter 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... This filter 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 determins if the slope of each pixel is calculated only by the neihboring pixel, or by multiple pixels. Shading intensity determins 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 shinyness of the surface, while the effect is greatly dependant of the shading depth. Color from swap uses the pixels of the swap buffer to paint the suface 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 dosen't remove as much heigh frequency detail.

Video/Vidoe 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...

Render/Plasma noise... Renders fractal noise. Itterations is the number of times the recursive subroutine zooms in on the noise, increasing the detail. A small itteration gives a finer, heiger frequency noise.

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

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 alhpa 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 Multiplys the two buffers and divides them by 255. One of my personal favorites. This filter is very usefull when doing watercolor like paintings. You can paint on one buffer, then go to the other and paint somehting 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 buffes so that values above 127 are additive and values below 127 are subtractative.

Combine with swap/If lighter Cobines 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 vlues 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 grdients to create a halftone.

Composite with swap/Greenscreen Performs the equivelent 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 determins 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 achived 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 extentions to Dogwaffle.
Plugins





Alpha menu

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

Select all Sets the entire alpha channel to 100%. Use this when you want to make a brush from the entire buffer with Brush/Copy selection. Otherwise, there's not much need for it since everything acts the same as having the alhpa channel turned off.

Clear alpha Clears the alpha channel and turns it off.

Alpha on/off Sets the activation status of the alpha channel, but dosn't effects what's in the alpha.
Invert alpha Inverts the content of the alpha channel.

Blur alpha Blurs the content of the alpha channel.





Window menu

Panels/Zoom... Opens the zoom panel. With it you control the size that the main buffer window appears on screen. The image size itself dosen't change.

Panels/Fat bits... Opens another window to display an independant view of the buffer that may use a different magnification than the main window. It allows you to work on one portion of the buffer, while seeing the entire buffer at the same time.

Panels/Fill Gradients... Opens the Fill/Gradients panel.
Gradients
Fill tools

Panels/Brush options... Opens the brush options panel.
Brush options

Panels/Optipustics... Opens the Optipustics panel.
Optipustics

Refresh Refresh the screen if it needs it.

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





Refresh methods/Default, Bitmap, Simple Determins the manner that the screen buffer is sent to the display hardway. Bitmap should be select unless using really old display hardware. Hopefully these options will be removed in the future altogether.

Refresh methods/Force 15 bit If you're using hardware that only supports only 32 thousand colors, then enable this opitons. I've seen a few older high-end 3d cards that were like that.

Refresh methods/Optimised Was indended to shave off a few microseconds from the screen update by only sending the part of the buffer that changes, but I'm not sure it every really worked. It dosen't work under NT or 2000. It was pretty hard to rench any kind of performance back then. At least DirectX makes it all get out of the way.

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

Backdrop/Mdi background color Set the color for the backdrop if not using a bitmap.

Save settings Saves the current preference settings to the registry sothey'll be recalled the next time the program starts. Dogwaffle dosn't force settings on you every time you exit, like most programs for the pc.

Memory options... Determins how many megs of ram to set aside for multiple undo's. If you're using a michine with less than 32 megs, then first get more ram, but also set this to a lower value. Dogwaffle otherwise dosn'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, thats plenty. You'll have to save the settings if you wan't this to stick.

Save wells... Saves the current set of color wells on the tool panel to a file.

Load wells... Loads a set of color wells from a file. A file called Def_well.wl will be loaded each time the program starts.





The help menu

About Project Dogwaffle Displays the spash screen.

Project Dogwaffle Help Displays the document you are reading.