Dec 092017
Morph pictures like in the Michael Jackson video Black or White. A math coprocessor is recommended but not mandatory. Outputs into 24-bit TGA files.
File DMORF11.ZIP from The Programmer’s Corner in
Category Printer + Display Graphics
Morph pictures like in the Michael Jackson video Black or White. A math coprocessor is recommended but not mandatory. Outputs into 24-bit TGA files.
File Name File Size Zip Size Zip Type
DMORF.DOC 15080 5773 deflated
DMORF.EXE 222464 90290 deflated
DMORFNC.EXE 234496 87028 deflated
DPMI16BI.OVL 65376 27032 deflated
DPMIINST.EXE 36724 17032 deflated
RTM.EXE 108846 31664 deflated
WHATSNEW.DMO 20359 7418 deflated

Download File DMORF11.ZIP Here

Contents of the DMORF.DOC file

DMORF Rel 1.1 (07/12/93)
Copyright (c) 1992, 1993, by David K. Mason.
All Right Reserved.

DMorf (Dave's Morphing program) is a small morphing program that
runs in DOS graphics mode. It operates on TGA, GIF, and IMG
files, and produces a bunch of TGA files as output.
You can compile these TGA files with my other program, DTA, or
dump 'em straight out to video if you've got the hardware.

Hardware requirements:

To run DMorf, you MUST have:
1) A VGA monitor
2) At least a '286
3) A mouse with a microsoft-compatible driver
4) *some* extended memory (expanded memory is not
To accomplish any serious work with this program, you SHOULD have:
1) SVGA board with VESA in BIOS or with a VESA driver.
By default, DMorf will use the 640x480x256 mode. If you use the
/800 command-line switch it'll use 800x600 mode instead. The
/1024 command-line switch tells DMorf to use 1024x768 mode
2) A fast processor *and* numeric coprocessor... DMorf DRAGS without
a copro. Right now the 486DX is the best chip to have because the
coprocessor is integrated on the same chip.
(When the Pentium comes out, it should be fantastic because of
its optimized floating point instructions.)
3) *Lots* of extended memory, unless you're working
with teeny pictures.

This program runs in '286 protected mode, and allows
access to up to 16M of extended memory.

( During the warping process, DMorf creates a buffer
big enough to hold one entire picture, in RGBa (32-bit)
form. That means 256000 bytes if you're working with
320x200 pictures, or 1,228,800 for 640x480, or 1,920,000
for 800x600, or 3,145,728 for 1024x768. )

You can speed DMorf up quite a bit using the /PRELOAD command-line
switch... it loads copies of both pictures into memory at startup
thus when displaying, editing, or morphing, it won't have to read
the pitures from disk. Also, it causes some intermediate pictures
to be stored in memory instead of saved and loaded from disk.
This can save significant time, but uses a *lot* of memory....
multiply the numbers in the previous paragraph by 3 or 4.

DOS-Extender Files

The DOS-Extender Files from the Borland Pascal compiler (DPMI16BI.OVL,
RTM.EXE, and DPMIINST.EXE) must exist somewhere in your DOS path,
or in the same directory where you keep DMORF.EXE.
... or DMORF will not work at all. These files are in the DMorf

If you've got an unsupported 286 processor (you'll know, because
DMORF will complain loudly), then you'll have to:

(1) disable any memory management software you have running
(like HIMEM.SYS)
(2) run the other program in this archive, DPMIINST, which will
configure RTM.EXE for your system

and then

(3) turn any disabled memory managment stuff back on

Multiple versions:

DMorf 1.1 comes in two varieties: DMORF.EXE and DMORFNC.EXE.
Both versions can run in systems that either have or don't have
math coprocessors, but DMORF.EXE will run much faster on
systems with coprocessors, and DMORFNC will run faster
on systems that DON'T have coprocessors.

If you have a choice, use DMORF.EXE and a coprocessor.

Sorry, but because it uses a different method of representing
floating point numbers, DMORFNC.EXE will not be able to read
mesh files created with versions 1.0 and earlier of DMorf.
You could get around this by loading a mesh file into DMORF.EXE,
saving it in the 1.1 mesh file format, and then loading the
new mesh into DMORFNC.EXE.

How to use DMorf:

To get started with DMorf, type "DMORF "

The files can be TGA (16, 24, or 32, compressed or uncompressed),
Vivid IMG, or GIF. The two files don't have to be in the same
format, but they do have to share the same dimensions.

DMorf will then read and display the two pictures in side-by-side
windows. If you only supplied one filename, then it'll display
that picture twice. It scales them so they'll fit in the windows.

Then, it lays a mesh over the two pictures.
In this program, a mesh is represented by a bunch of horizontal
and vertical lines. The points where they intersect can be
Initially, there are lines on the four edges of the picture,

There are always the same number of mesh points defined in the
two pictures, though they aren't always in the same places.

To add a new line to the mesh, move the mouse cursor to the
border around one of the pictures (which one doesn't particularly
matter). Click the *right* mouse button at the point where you want
the line added. (If the cursor is on the top or bottom border, a
vertical line will be added, and if it's on one of the sides, a
horizontal line will be added.)

To move a vertex, put the mouse cursor over the intersection
of two lines, press the button, and move the mouse.
Let go of the button when you've got the point where you want
it. DMorf will try to prevent you from overlapping lines.
It's possible to defeat it with weird angles. Don't do that...
it's bad.

The point of these meshes is to define the shapes of the objects
in the pictures. The lines should match the contours of any
objects in the scenes.

Move the vertices of the lines so that the lines match the curves
of the objects in the pictures. When you've got meshes that you're
satisfied with, click on the "Go" button and watch.

After you've saved a your mesh in a .MSH file (using the Save or
SaveAs button), you could start DMorf by just typing
"DMORF MESHFILE.MSH". DMorf will remember the names of your
picture files and any settings particular to your morph

The User Interface:

(note: also take a look at WHATSNEW.DMO... that file is sometimes
more up-to-date than this one is)

Here's what the other controls on the screen do:

The Save button: saves your meshes and settings to a control file.
It doesn't prompt for a filename unless this is a new mesh.

The Save As button: same as Save, but always prompts for a filename.

The Load button: loads a control file. Always prompts for a filename.

The Reload button: re-loads the current control file. Doesn't prompt
for a filename unless none is currently loaded.

The Quit button: Changed my mind. Get me out of this program NOW.
The escape key does the same thing.

The Go button: causes DMorf to start morphing.

The About button: gives DMorf copyright info.

The Colors button: switches to the Colors dialog.

The Pictures button: switches to the Pictures dialog.

The Settings button: switches to the Settings dialog.

The Swap button: swaps the meshes between the two windows.

The Max buttons: display just one of the images, much larger.
This gives much finer control over the mesh control points.

The Edit buttons: load one of the pictures into memory, display
it larger, and allow editing of the pixels' alpha values.

The Del button: lets you delete a line from the meshes.

The 1->2 button: copies the mesh from window 1 into
window 2.

The 2->1 button: copies the mesh from window 2 into
window 1.

The FlipH buttons : flips one of the meshes horizontally.

The Splines button: gives you a preview of what splines for the
current mesh points would look like. If you're using
"Spline meshes" mode, make sure you use this button once in a
while to make sure the splines aren't going nuts.

The Hide button: shows the pictures without any mesh superimposed.


The Frames control: tells DMorf how many pictures to create.
If you're in Morph mode, then this represents how many tween
frames to create. In warp mode, this number includes a
fully-warped final frame.

First: specifies the first frame to actually render in the range
0 to Last

Last: specifies the final frame to render in the range First
to (Frames-1)

Warp 1/2: determines the speed of the warping portion of the
morph. Specifically, the number determines at which percent
of the morph the warp should be half done.

Fade 1/2: determines the speed of the fading portion of the
morph. Specifically, the number determines at which percent
of the morph the fade should be half done.

Spline meshes:
When your points are all located where you want them to be,
and you tell DMorf to go ahead and morph, DMorf figures out
which points to map where by drawing spine curves between
the vertices.

If you turn this control off, it'll draw straight lines instead.
Reasons to use splines instead of lines: the warp often looks
a whole lot better.

Reasons to use lines instead of splines:

(1) Splines sometimes go haywire, with curves going every which
way, overlapping, and (gasp) sometimes even passing beyond
of the picture borders
(2) You don't want something curved when it warps
(3) lines are faster than splines.

Spline Always:
Because it takes so much longer to display splines than it does
to display lines, DMorf usually just displays lines and waits for
you to click the Splines button to show what the splines look
like. If you check off Spline always, DMorf always shows the mesh
as splines.

Just Warp: In Morph mode, the program will map points from
picture #1 toward picture #2, and from 2 toward 1, and
cross-fade. In Warp mode, it'll just map points from
#1 toward #2, with no fade.

Not too surprisingly, Warp mode takes half the time
that Morph mode does.

Smooth resampling: In smooth mode, DMorf interpolates
new pixel values from all source pixels that should
contribute... if you turn this control off, it just
grabs a the closest pixel value.
Nearest neighbor, in other words. The results
in smooth mode look massively better than dumb mode.
But dumb mode is massively faster. Dumb mode would be
useful in test runs, but don't use it for real stuff, 'cause
it looks like crap.

Show In-between: DMorf usually displays, while morphing, all the
intermediate pictures it creates. If you turn off this switch,
it won't, and it'll finish quicker.

Verbose status: DMorf usually displays the frame number it's working
on, plus the percentage that it's finished of the frame. With
verbose status switched off, it lists only the frame number.

(In the Pictures dialog)

The Before text box: Specifies the name of the picture to morph

The After text box: Specifies the name of the picture to morph to.

The Background text box: specifies a picture to overlay the morphed
frames onto (assuming they have transparency). This text box
currently doesn't do anything at all... in the future, when DMorf
shells out to DTA, it'll use this value to build the DTA

The RLE Checkbox: Tells DMorf whether or not to create run-length
encoded (compressed) TGA files.
Compressed TGA files are almost always smaller than
non-compressed, but some programs can't read them.
(DTA can)

The 32-Bit Checkbox: Tells DMorf whether to create 24-bit or
32-bit TGA files. The only reason you might want to
use 32-bit TGA files is if you're planning to do compositing.
Some programs can only read 24-bit TGA files. (DTA can read

The Bottom-to-Top Checkbox: Tells DMorf whether to create
TGA files that begin at the bottom of the screen, or at the
top of the screen. Some programs can only read one or
the other variety. (DTA can read both, but prefers bottom-to

(In the Colors Dialog)

The Mesh colors controls: sets the red, green, and blue components of
the color used to display the control mesh.

The Alpha colors controls: sets the red, green, and blue components of
the color used to represent pixels that are more than 50%

The gamma controls: The "File" value specifies the gamma correction
value that's already been applied to the picture. The "Disp"
value specifies the new gamma correction value for the screen.
(Note: gamma correction is a gimmick for adjusting the brightness
of a picture.)

If all this makes no sense, just start messing around with the
program. Once you figure out how to add new points to the mesh,
the rest of the interface is pretty intuitive.


The warping, morphing, image scaling, and spline algorithms all
come (with modification) from George Wolberg's excellent book
Digital Image Warping. The user interface stuff is all mine.

Thanks to Michael Day (Knight Software) for making his VESA
BGI graphics driver (BGI256) available.

Thanks to Lutz Kretzschmar for letting me use his SVGA
mouse-handling code.

Thanks to the Compuserve GRAPHDEV forum gang, and the Graphics
Alternative BBS gang for their suggestions, and various bugs
they've helped me identify.

Thanks to Eric Deren for his neat ideas on manipulating meshes.


If you use DMorf, you do so at your own risk. I won't be held
responsible if it screws anything up.


If you've got any requests/bug reports/suggestions, send a message
"David Mason" on the "You Can Call Me Ray" BBS, (708) 358-5611,
and on "The Graphics Alternative", (510) 524-2780,
and on "Channel 1" BBS, (617) 354-8873.
"76546,1321" on Compuserve.

You'll probably get some kind of a response (maybe sooner, maybe

The Rules:

Feel free to re-upload this program to other bulletin board
systems in its *original, unmodified* form. You may not
repackage it with other software. You may not repackage it with
your own tutorial. I feel like an idiot having to make these
demands, but people have been doing these things.
Do not include this on a disk along with any magazine,
book, hardware product, or other software product without my

Money matters:

DMorf is a shareware program. If you think this program is worth
it, send some money or some computer hardware or something to:

David K. Mason
P.O. Box 181015
Boston, MA 02118

I think $35 is an appropriate amount, but feel free to send more
or less.

 December 9, 2017  Add comments

Leave a Reply