Information Updated June 3rd, 1992 ============================================================== I M A G E M A S T E R for the Amiga ------------------------------------- I M A G E M A S T E R F / C for the Firecracker 24 ------------------------------------------------------ I M A G E P R O F E S S I O N A L for the Amiga & HAM-E ============================================================== Information current to version 9.12 of these programs Document Author: Ben Williams Software: Barry Chalmers, Ben Williams, Pete Patterson +-----------------NOTICE------------------+ | This information is copyright 1991,1992 | | Black Belt Systems, ALL RIGHTS RESERVED | | under the Pan-American Conventions. | +-----------------------------------------+ The latest versions of our image processing software have additional functions which are not described in the manual. This document describes those new capabilities. For developers, please note that we have included much more detailed information on the Public Interface; and that the release disk does contain a directory with a complete example of how to write a PI Module using SAS C. Until we formally reprint the manual, additional documentation will be provided in on-disk format, ready for printing on your own printer. We had originally planned to print continual addendums, but there is no way we can keep up with the fast pace of development of this program using something as conventional as paper. We will eventually reprint the image processor manual with this new information included. Assuming you are a registered user, you will be notified at that time what you'll need to do to obtain the new paper manual. Make SURE you register!!! This on-disk documentation has been carefully formatted to be printable on virtually any printer providing it has at least 60 lines per page, is able to print at least 70 columns of text, and understands the industry standard "$0C" (decimal 12) character as a "form feed". For a quick update on what changes have been made to the image processor, see the changes list at the end of this document. The latest changes are at the end of the list. We hope you enjoy these additional capabilities! Custom Area Shape Selections ============================ The image manipulation software now has the capability to use an unlimited number of custom shapes for selecting areas for processing, composition, analysis, painting and so on. In the area selection panel, you will now find "Load New Shape", "Shape From Center", and "Shape From Corner". Until you load a custom shape, the other two selections will be ghosted. Shape files have the extension ".ish" attached to them. We have provided a number of them with the program, you may place them anywhere in your computer's filesystem. Once you have specified a directory to load shapes from, saving the preferences of the image manipulation program (from the setup panel) will cause this location to be remembered permanently. You can use any one custom shape at a time. Once one is loaded, it stays loaded until you load a new shape. Some that we have provided with this release are triangles, pentagons, octagons and stars. You can create these shapes yourself, too, if you're handy with graph paper and comfortable editing ASCII files. ".ish" files contain only ASCII text. Examining one will show the very simple structure of the files. Blank lines "lift the pen" which allows you to make shapes that are multiple - that is, disjoint. Lines which begin with an asterisk are comments; these are ignored by the image manipulation software. Lines with co-ordinates on them are used as active point locations for the shape. We suggest you examine the "Triangle.ish" file, as it is very easy to understand. There is also an "example.ish" file which is designed to be instructive. When drawing with a custom shape, you can reposition it by pressing the right mouse button. Note that shapes from center act differently than shapes from corner. Note also that changing the direction you move the mouse when you drag out the shape will reverse (or flip, or both) the shape you are drawing. Shapes can be used in the line drawing tools inside the paint portion of the program --- you may find this a fine aid to construction of certain types of drawings. If you design your own shape files, please feel free to upload them to CompuServe or to our company support BBS, where other users of our software will be able to benefit from them. ---------- ANIM OP-5 Generation from Sequencer =================================== We have added the capability to generate Amiga animations directly from within the image manipulation software. Both the sequencer and the morph generator can do this. You must install the latest PI Modules from the disks (or the telecomm distribution archive) for this to work. Whenever you wish to generate anims, you simply set up three of the four script entries in the sequencer or the morph generator with the names of three predefined scripts. The script entries and the exact contents are as follows: Name Of Script Exact Contents ------------------ -------------- Opening Script rxpi:animwr1.rexx Pre-Render Script Post-Render Script rxpi:animwr3.rexx Closing Script rxpi:animwr4.rexx Note that there is nothing specified for the "Pre-Render" script. This is intentional. For almost all cases of morphing, no Pre-Render script is required. For almost all cases of sequencing with the exception of batch rendering, you will want to use your own, custom script to specify what effects will occur during the sequence. For instance, the example scripts given later on in this document all belong in the Pre-Render script entry. If you use this with this anim generation capability, then all four script entries will be used. You don't have to worry about the three we provide; they will work very well with the others described here. Once you have placed the scripts named above in the proper three entries, rendered output from the sequencer or morph generator will go directly to ANIM format. You MUST remember to select a render mode appropriate for the animation, as well as a render output size and so forth - this will ensure that the animation is the type you want it to be. Note that some animation players require the use of a constant palette, or will simply look better if you use a constant palette. For the technically minded: --------------------------- The four scripts now available in the sequencer allow you to have total control over the disposition of the files generated. This ANIM generator is a good example of what you can do. All you need to know is that the Opening script runs once, before all other activity; the pre-render script runs just before each frame is rendered or saved; the post-render script runs just after each frame is rendered or saved; and the closing script runs once after all frames have been generated. You can use these four "launches" to completely control any external disposition of the generated files. Output to film recorders or single-frame video recorders are obvious applications. The possibilities are endless, and the flexibility is unlimited. ---------- Automatic Custom Display Updating ================================= With version 9.09, we have added the capability to automatically lauch a script every time the software re-displays the current buffer to the monitor. This capability is meant to be used with pre-prepared scripts and commands provided by Black Belt or other developers. What it does for you is allows you to view on a different display than the one you normally use (for instance, the Amiga graphics output when using Imagemaster), the current condition of the primary image, automatically. We have provided the first of these automatic update display modules for Impulses FC24 board. If you have an FC24, and are using it on a separate monitor, simply place... rxpi:imfc24.rexx ...in the entry entitled "redraw script" inside the display panel. (You must use the imfc24 script from the latest PI Module distribution; earlier versions of the PI Module are not capable of this). Once this is set, press the "Call Redraw Script" button and you're ready to go. From now on, the image you're working on will be maintained on the independant FC24 monitor as well as on the Amiga (or HAM-E) display. In the provided imfc24.rexx script, there are several variables at the beginning of the script that may be set by the user to control the display resolution used on the FC24 during automatic updates. For Developers: --------------- Using this new capability is simple. The scripts which are called from the "redraw script" entry are called with the following 5 parameters: "JACKIN" - structure pointer (in ASCII Hexadecimal) "X1" - leftmost point of the area which needs redrawing "Y1" - topmost point of the area which needs redrawing "X2" - rightmost point of the area which needs redrawing "Y2" - bottommost point of the area which needs redrawing An ARexx script that uses these might look like... /* Sample Automatic Display Script For Developers */ parse arg jacker x1 y1 x2 y2; /* get parameters */ address command cmpi:mydupdate jacker x1 y1 x2 y2; /* do it! */ 'finish'; /* Very Important - tells us we can continue */ ...here, the ARexx variables "jacker", "x1", "y1", "x2" and "y2" are automatically set by our software when we call your script. You can then use the data in these variables to instruct your display control program what it is it needs to do. Here, we're calling a hypothetical program called "mydupdate" which would take these variables and then deal with the display it is written to handle. Finally, we use 'finish'; to tell our software it may continue processing. ---------- Roll Image Geometric Process ============================ This operation allows you to roll an image in the horizontal, vertical or both directions. Normal rolling goes down and right; negative roll amounts cause rolling to go left or up. There are three roll modes. The first is "wrap", where the portion of the image that has rolled off of the edge re-appears on the opposite edgein the newly opened area. The second is "fill with edge pixels", where the pixels rolled off the edge are lost and the incoming edge is filled with a duplicate of the receeding edge of the image. The third is "pad with color", where the pixels rolled off the edge are lost and the incoming edge is filled with a solid color you select using "set foreground color" in the process panel. This function is located in the Geometric Operations panel, which itself is located under the main Process panel. ARexx Operation --------------- rollimage parameters [optional] : - a positive or negative value for horizontal roll - a positive or negative value for vertical roll - 0=wrap, 1=edge fill, 2=color fill. effects: ARexx variable RC is set to zero if no problems, nonzero if the user presses "CANCEL" while the effect is being generated example of use: /* simple test script for 'rollimage' */ address 'IM_Port'; /* allows us to talk to our software */ 'rollimage' 10 10 0; /* do the roll in edge wrap mode. */ if rc ~= 0 then say "User Pressed Cancel!"; /* informer */ exit 0; /* all done! */ ---------- Compose and Process panels reorganized ====================================== With version 9.00, a major reorganization of the image processing and composition control panels was put into effect. This was done for two main reasons. First, the process panel and the F/x panel, a panel of other process operations, had both become so loaded with functions that it was quickly becoming a significant effort to locate a particular tool - especially if that tool wasn't one you used often (and so were not quite familiar with where it was placed). The compose panel, though not nearly as heavily loaded, suffered from a similar problem. The new organization, while quite different from the organization present in versions 1.00 through 8.02, is easier to learn and easier to use because it is more highly structured. The second reason comes about because the image manipulation software does not contain pre-drawn buttons (gadgets). Instead, it generates the buttons and other controls needed for a particular panel only when it is time to open that panel, and then discards them after that panel has been closed. We designed it this way because it saves many hundreds of thousands of bytes of ram during operation, and also reduces the main program size on disk by the same amount. These are both significant benefits; however, when a large panel needs to be generated, the time involved to create the control images and other items for display becomes significant. The new organization of the panels results in more control panels, all of which contain fewer controls... so the panels are generated faster. In addition to the major panel rework, other user interface changes were also made to help ease the program's operation. The "info" panel is now accessable directly from the main panel; the render controls in the File I/o panel have been subtly re-arranged to be easier to use; the program's autoactivation capabilities have been steamlined for more efficient operation; the font list requester was widened for easier use with longer font names; you can now use the 2.0 (ASL) file requester if you prefer, and the sequence processor can now sort the file list for you. The following lists show the general organization of the new panels; the number following each new panel represents the number of basic tools in each. In many cases, these tools lead to still other tools and effects, totalling many hundreds of different operations. Process --------- Standard Adjustments ( 22 ) R,G,B Corrections ( 9 ) Filters ( 21 ) Geometric Transformations ( 19 ) Special Effects ( 33 ) Analysis ( 8 ) Resizing and Clipping ( 9 ) Set Blend ( 10 ) Compose --------- Linear Compositions ( 8 ) Color Keyed Compositions ( 8 ) Color Recombinations ( 7 ) Algebraic Compositions ( 4 ) Logical Compositions ( 3 ) Special Compositions ( 7 ) Composition Controls ( 5 ) Zoom Clip ========= This operation allows you to zoom in a specific amount "into" the image in the primary buffer. It is located in the Process, Resizing and Clipping panel. The intention is to allow zooms within animation sequences to be generated in a natural manner. You can specify the percentage to zoom in, and also the output resolution for the resulting clip. Note that the output resolution will always default to the same resolution as the current primary image. Remember that the higher the resolution of the source image, the more detail will result in the zoom. Extreme magnifications, while smooth, will very likely not appear realistic. We suggest that for extreme zoom effects, you may wish to generate several sequences using different resolution sources. ARexx Operation --------------- zoomclip [xs] [ys] parameters: - required Percentage from 101% to 2000% - required Percentage from 101% to 2000% ---- required Horizonal (X) Center, in pixels ---- required Vertical (Y) Center, in pixels -- required Name for the newly created clip [xs] ---- optional (X) Size for newly created clip [ys] ---- optional (Y) Size for newly created clip effects: ARexx variable RC is set to zero if no problems, nonzero for error if OPTIONS RESULTS is in effect, returns ARexx variable "RESULT" as the number of the newly created clip. example of use: /* test script for 'zoomclip' in sequence processor */ options results /* let image processor return results */ 'tween 101 200'; /* get value for this frame, 101% to 200% */ Z = result; /* copy to variable named "Z" */ 'zoomclip' Z Z 100 100 "zoomed image" 320 200; /* do the zoom */ 'finish'; /* tell image processor script is done */ ---------- Image masks =========== General ------- In the image processor, images may have a local mask. This mask is permanently associated with the image, and its purpose is to define the usable (valid) region of the image. For instance, if you create a text object image, there is a mask that is the shape of the text which "masks off" the rest of the image area, which is actually rectangular. In addition, when you specify a region of an image you want to do something to with any of the region selection tools, you are creating a temporary mask within which the effect is to occur. In normal operation, if the image has a local mask, both the local mask and the temporary main (area selection) mask are used to specify the region to be affected. Loading and Saving Masks ------------------------ You may load, and save masks from and to both the main (area selection) and local (validation) masks. In addition, you can specify logical operations to occur when you load a mask; you can 'or' it with the currently existing mask, replace the current mask with it, and so on. Note that there are corresponding ARexx commands for loading and saving both masks. Virtual Resolution ------------------ Masks are saved in the resolution of the image they are associated with, so this is the limit of detail you can save. When masks are loaded, however, they are scaled to the same size as the current image. This "virtual" resizing allows you to use a mask as a cookie- cutter on any size image simply given that you've defined it the way you want to. One example of this might be to create a text object, and then save the mask. Now, reload that mask as the image mask using replace, and the only parts of the image that are valid are those regions within the shapes of the letters. This is a very powerful capability. Masks from ARexx ---------------- From ARexx, you can use masks with the sequence processor very handily. Say you have a series of images within which you wish to affect the same relative region. Load one of the images, and carefully define the area to be affected. Save the main mask. Now, in the sequence processing script, you can reload that mask using REPLACE mode and each image processed in the sequence will be affected in the same region. The ARexx commands are 'loadmask', 'savemask', 'loadimask' and 'saveimask'. All are explained later in this document. The load commands have logical variations; and, or, xor, subtract, replace. ---------- Shadows in Compositing ====================== General ------- Shadows can be generated as an additional effect during compositing operations. There are two controls in the Compose panel that facilitate this. The "switch" that controls whether a shadow is generated is called "Shadow Enable". When this is selected, a shadow is generated. How the shadow appears is controlled by the panel that appears when you select "Shadow Control" from the compose panel. In this panel you will find the means to set the direction of the shadow to any angle, it's intensity (how dark the shadow appears) and the length of the shadow. The angle should be set to the opposite direction that you want the illumination to appear to be coming from. '0' degrees is straight up, and as the angle increases, the shadow proceeds clockwise from that position. 1/4 of a turn is 90 degrees. Shadow intensity is least (lightest) when it is set to zero, and most intense (darkest) when it is set to 255. Note that if you are using any blending techniques, the shadow will also obey the blend parameters; a partially transparent object will produce a lighter shadow than a non-transparent object. The shadow will follow the transparency curve of the object exactly unless you specifically tell it not to. The length of the shadow is specified in pixels, and it essentially defines the distance that the shadow position is offset from the position you placed the original item being composited. This capability allows you to create shadows with realistic soft edges easily. One technique you might like to try is setting a blend with very soft edges, and with shadow on, compositing the images together. Next, turn the shadow off, and the blending off; now re-composite the images using "Previous Region". This will generate a perfect shadow with soft edges, yet the composed image will be sharp. This effect duplicates what happens when an object is removed a significant distance from the surface where the shadow is cast. ---------- FilmStrips ========== General ------- The image processor's film strip capability provides you with two distinct capabilities; - you can have a visual record of what you've been doing - you can animate the contents of a filmstrip as a test The filmstrip contents may be saved and reloaded; you can view the filmstrip in interlace or non-interlace; you can manually insert frames or let the image processor do it for you, automatically; you can use a VCR-style control panel to go anywhere in the filmstrip; and you can set the filmstrip to any length you like (based upon how much memory you have, of course). When you change the length of the filmstrip, if the new length is longer than the previous length, the filmstrip contents are retained. If the new length is shorter, then any frames which were "deeper" into the filmstrip than it's new length will be lost. You can change the animation playback from "pong" to "loop"; this will come in handy often. Reverse animation is also available. Other controls available include insertion, deletion and swapping of frames. Frames are numbered to facilitate these operations. You'll find the filmstrip controls in the DISPLAY, Morph and Sequence panels. Filmstrip allocation is performed only in the display panel. ---------- Sequence Processing =================== General ------- In the File I/o panel, the control "Set Up Multi-frame Sequence" provides access to the sequence processor. This is a capability that allows you to select a group of images to be loaded (or you can select a single image to come from the secondary buffer), processed, and optionally resaved in either 24-bit IFF format or rendered to another display mode - or both. We strongly suggest you have the FilmStrip operating when you do sequence processing. This will allow you to see each frame as it is processed as a history, which is very enlightening. Also, if you elect to run the sequence without generating any output, you can use the filmstrip to examine the general effect to see if it was what you wanted. Processing is done using a very simplified form of an ARexx script, which can be as simple as three lines of text, or as complex as you like. The script you choose is executed once for each frame in the sequence - we'll show you how to do it here. It is very important that you take the time to look at the example scripts presented here, even if you are NOT an ARexx user; we have designed this capability so that you can use it VERY easily and if you elect to ignore it you're going to be shooting yourself in the foot - no kidding. Brief Description ----------------- Essentially, multi frame sequence processing is broken up into two stages. First, you need to prepare a simple ARexx script that will process your images in the fashion you desire. Second, you use the sequence processing control panel to select a set of images to apply these effects to; you also select what you want done with the results - save them as IFF, render them to a particular output mode, or discard them (this last is useful to test scripts to see if they have the desired effect). As we mentioned previously, we strongly suggest you have the filmstrip turned on. One of the most revealing things you can do to a sequence to see if it's what you wanted is to animate it using the filmstrip. You can see if the results are smooth enough; if not, you should use more frames. Perhaps you'll determine that you can get away with fewer frames. Even if you got everything perfect on the first try, it's nice to have that confirmed by the filmstrip animation. We describe two example ARexx scripts in painstaking detail further on in this document; we'll begin with a description of the options available to you in the sequence control panel. Sequence Control Panel ---------------------- This control panel presents you with two lists, one on each side of the display. The list on the left acts like a file requester; you use it to navigate through the Amiga's filesystem and choose files. Each file you choose from the left hand list is placed into the right hand list, which is the list of files that will be processed for this sequence. Below the lists are the name of the ARexx script that will be used to process each of the selected images, and the number of image files that have been selected for processing. Finally, at the bottom of the display are a set of controls which allow you to set up various items used in the sequence processing. Here is a description of each control: "Set Path" allows you to set the path where the list requester will begin looking for image files. "Parent" causes the left list requester to change directories to the parent directory of where it is currently located. "Set Script" allows you to specify up to four ARexx scripts to be used to process the sequence of images. "Save List" and "Load List" allow you to save and reload the right-hand list of images for later use. "Delete Entry" allows you to remove a particular image file from the right hand list after clicking on that entry. "Film" provides access to the filmstrip controls. "Run List" opens a new control panel where you specify the output filenames for the results of the sequence process operation; you can cancel out of this panel if needed, or you can execute the operation there. You can also use the secondary or primary buffer as the source for the operation, repeatedly. "Done" exits the sequence processing panel without actually doing a sequence. ARexx Script Particulars ------------------------ There is one new command which must be used at the end of any script that is built for multi-frame processing. This command is 'finish'; It tells the image processor that all operations in the script have completed, so another image may be loaded (or the operation can terminate, if the last frame has been processed. If you neglect to include the 'finish' command, only the first frame of the sequence will be processed. In addition to the 'finish'; command, we have provided the 'tween'; command. You'll use it in scripts where you want various parameters to change from frame to frame. We'll show you how to use this command a little further on. For the user who really wants to get into the "nitty gritty" of working with these scripts, two arguments are always passed to the ARexx script which you may use if you like. The first argument is the current image number. In other words, if you have selected 20 images to be processed, and this is the third image, then this argument will be "3". For a sequence of 20 images, the argument will go from 1 to 20; it will never be zero. The second argument passed is the total number of frames. In the example we explained just previously, the second argument would be 20. These two arguments can be used to control anything you can imagine, but require you to be fairly sophisticated in your script-writing. For the vast majority of users, the 'tween'; command will handle everything you need to do. Constant Effects Across Multiple Frames --------------------------------------- Here is a very simple example of how to apply a particular set (constant) effect across a sequence of images. /* SimpleSeq.rexx - minimal demonstration script */ 'entire'; /* specify do entire image */ 'contrast 50'; /* 50% contrast increase */ 'finish'; /* mandatory final command */ SimpleSeq.rexx is a good example showing just how really simple a script can be. It selects the region to be affected (the entire image), applies a 50% contrast to that region, then informs the image processor that it may proceed to the next image in the sequence. If you select 60 images, all of them will have this exact amount of increased contrast. Variable Effects Across Multiple Frames --------------------------------------- We'll look at how you might gradually apply the contrast effect over time now, using the 'tween'; command. The example script here has only three more lines than the example that showed you how to apply a constant level of contrast; this clearly shows how easy it is to create extremely powerful, perfectly sequenced effects automatically. If you've been avoiding ARexx, it's time to have some real fun! Here is the actual script, ready to use: /* Contrast.rexx - shows how to get varying effects across frames */ options results; /* this tells IM, IMFC or IP to return "result" */ 'entire'; /* select entire image as operation target */ 'tween 0 100'; /* get "tween" value into autovariable "result" */ 'contrast '||result; /* apply the tweened amount, changing smoothly */ 'finish'; /* mandatory final command - end of script */ Here is a line by line explanation of the script. /* Contrast.rexx - shows how to get varying effects across frames */ -------------------------------------------------------------------- This line is an ARexx "comment". It serves two purposes here. First, the ARexx language says that the first line of an ARexx script MUST be a comment - so you have to at least put the comment delimiters in the first line, shown here... /* */ ...or ARexx won't even attempt to execute the script. The other purpose is to inform you what the script is about. After all, since you are required to put the comment there, it might as well be useful, eh? Comment lines may appear anywhere and have no effect upon the actual operation of the script. options results; ---------------- This is a command to the ARexx language itself which informs any program receiving a command (the image processor, in this case) that it is ok to return a value if a macro command is executed that should return one. If this line is not present, then you won't get a value back from the image processor. We need it here because the 'tween' command does need to return a result to the script (see the next explanatory paragraph for details on this). 'entire'; --------- This is a command to the image processor which tells it that the region we want to affect by the next process we execute is the entire image. You might have used 'oval' or 'rect' here instead, if you just wanted to contrast a portion of the image. 'tween 0 100'; -------------- This command to the image processor is the key to easy variable processes over multiple frames. What it is saying is that over the course of this sequence, the starting value (for the first frame processed) is to be "0"; and the ending value (for the last frame processed) is to be "100". The tween command uses this information with internal information the image processor maintains about how many frames there are and which one is being processed now, to determine the appropriate value to return for this particular frame in the sequence - no matter what frame it is. The 'tween' command can start with a low value and go to a high one, or vice- versa. It can also handle negative numbers. For operations where there are multiple parameters, just use multiple 'tween' commands and put the "result" from each into it's own variable. The 'tween' command is simple, and very powerful. Here are some examples... 'tween -100 100'; var1 = result; 'tween 100 0'; var2 = result; 'tween -75 50'; var3 = result; ...now var1, var2 and var3 could be used later as different parameters for a script that needed several different values. 'contrast '||result; -------------------- This is the actual command to the image processor which instructs it to apply a certain amount of contrast to the image of the sequence that is currently being processed. The image processor's contrast command can take values from -100 to 100, and the variable "result" contains a value within these limits, which we got from the 'tween' command. Note that the variable "result" is set whenever you call ANY command to the image processor after executing "options results", so it is constantly being reset to a new value. Often, the best course is to copy the value in "result" to a new variable, like we showed you in the explanation for the 'tween' command. Here's another example... 'tween -25 25'; tweenvalue = result; ...where the semicolons serve to separate ARexx commands. The next command changing the contents of "result" won't unintentionally lose you your returned value here. In the script example, because we use "result" immediately after we get it from the 'tween' command, we don't need to copy it, it's still got the value we wanted in it. The dual vertical bars are a concatination operator; they "glue" text together. Let's say that the variable "result" contains the number "25". The result of this line will be sent to the image processor and it will look like this... contrast 25 ...which is exactly what you want. 'finish'; --------- This line tells the image processor that the script is complete. The sequence processing then knows to go on and load the next frame to be worked upon, or to terminate if the last frame has been completed. Note that the scripts described here belong in the "Pre-Render" script entry. The other three script entries are used to control more complex batch operations. ---------- Morphing ======== General ------- This is a compose operation. Morphing is the process of combining two images to form a third image, using geometric (positional) and color information from both source images. Usually, it is also taken to mean the generation of a sequence of images which provide a continuous (or as nearly so as possible) change from one image to the other. This effect is the basis for many current video and cinematic scenes of startling content. You'll find it under "Special Combinations" in the Compose Panel. You can only use it if you have both a primary and a secondary image loaded. The Morph capability implemented in our image processor provides the abilities to generate individual frames as needed, or a sequence of frames to your specifications. You have excellent control over the two most important factors in the process: 1 - The geometry transform information (positional changes) 2 - The colorimetry transform information (transparency changes) The first, geometric control is provided by the user specifying "control points" on both of the source images. To understand what this means, let's consider a simple example. Say you wish to apply the morph process (we'll simply call this "morph" from now on) to a man's face and a woman's face. The images are quite different; the man is swarthy and has a wide, solid face, while the woman is elegantly slim, with high cheekbones and has an oriental cast to her eyes. A good beginning for working on these two images is to start with what the images have in common; what the viewer will "naturally" assume are features that are "the same". Examples of this are eyes, eyebrows, nose, mouth, and ears. For the eyes, you might place control points on the start image at the corners of the eyes. Note that points automatically appear in the same location on the other image. Now, you move the points on the other image so that these points are also in the corners of it's eyes. What you have done is told the image processor that you expect these two locations - the eye corners - to remain "attached" to each other throughout the morph process. You'll continue to apply control points to the pupils of the eyes, across the eyebrows, the lips, the ears, the edges of the face and so on. You may use as few as ten or so points, or you may use several hundred. The more you use, the more precisely controlled the morph effect will be. Note that you can save your control point sets; you should do this often, so as to prevent the loss of your work in case of a system failure of any kind. The best way to learn how to morph is to try a few. We strongly suggest that you start with two faces; and that you keep the initial morphs very small, about 96x60 or 48x30. Morphing is a computationally intensive process, and generating each frame takes considerable time. Here's a useful hint. When you're experimenting, set the number of frames to 20, and then generate only frame 10. Use a linear transparency curve. This will show you what will occur for a morph that is 50% complete; that is when both images are maximally merged with each other. If you have missed something important, it will likely show more at this time than any other. The morph capability is extremely open-ended; experimentation will produce outstanding results. We have found that you typically need between 50 and 150 control points to create the most effective morph results. Fewer points tend to leave areas "uncontrolled", more result in longer computation times and not much difference in output quality. By all means experiment, though - you may achieve effects we did not expect which please you. Following are specific descriptions of the items available to you as part of the image processor's current morphing capabilities. Elements of the Morph Display ----------------------------- At the top left, the source image is presented. This is the image that has the most impact upon the morph at the beginning of the sequence (using the default transparency curve). At the top right, the destination image is presented. This is the image that has the most impact upon the morph at the end of the sequence. In the center bottom portion of the display is the point vector window. This window presents you with the paths over time that the points you have defined will travel; and where they will be for the particular frame being generated (during the actual morph process). At the right center is a small frame where postage-stamp sized images are presented during sequence generations. This lets you know where you are, so to speak, when the morph is operating. At the left center, some text is presented which tells you how many control points are currently defined. Finally, at the bottom is a control panel used to control major operations and modes within the morph generation. Add Points ---------- When this button is depressed, you can add points to the source (left) image. When you add a point, it will also appear (in the same relative location) on the right image. You can immediately move the points on the right image, even though you are still in Add Points mode. You cannot add points to the destination image, only the source image. Move Points ----------- When this button is depressed, you can move any point on either image. Delete Points ------------- When this button is depressed, you may delete any point on either image. When a point is removed from an image, the corresponding point on the other image is also removed. Delete All Points ----------------- This button removes all of the points that are currently defined. Swap All -------- This button allows you to swap the source and destination images, and all the points that were defined for them. This causes the morph to be generated in the opposite order, and may help you if you are having trouble building a mental image of what you want to happen during the morph. Swap Points ----------- This swaps only the point definitions. This is useful when you enter the morph tools with the primary and secondary images loaded backwards; instead of having to exit the morph panel and start over, you can just swap the points. This makes it so that the proper set of points is associated with the correct image. If the morph is now backwards, that is, the generation will be in the opposite order than that which you intended, then use Swap All to reverse the sequence and you'll be ready to go. Load Points ----------- This allows you to load a set of points which were previously saved. Note that all point position information is in a virtual space. This allows you to perform experimental morphs using very low resolution copies of images (we suggest 160x100 for most attempts) until you get the morph behaivior the way you want it; then, you can use higher resolution images and the morph point set will still be located in the same places on the image - the virtual space causes the translation to be completely transparent to you. Save Points ----------- This allows you to save the currently defined set of points in a named file for later reuse. Interlace Work Area ------------------- This control allows you to use an interlaced screen display to work with the morph tools. If you have a deinterlacing device attached to your computer, or flicker doesn't bother you, you should use this setting. The additional vertical resolution allows more precision when placing points, and also provides better grey scale accuracy (due to more, and smaller, points available for dithering). Set Controls ------------ This button opens a new control panel. Here, you load or create a transparency curve; once created, you can save the curve for later use. You may draw the curve using your mouse. Note that when curves are saved as files, they are saved in ASCII format so you can, if you are so inclined, edit the files yourself. The file format includes a virtual resolution for the morph, comments, and specific point-pair information. You also set the total number of frames you wish to be considered when morphing from the source image (the one on the left) to the destination image (the one on the right). Finally, you also set the output resolution here. The output resolution is the resolution that the morph frames will be generated in. Morph 1 Frame ------------- This control will prompt you for the single frame you wish to generate out of the sequence you have defined (using Set Controls). Once you tell it what frame you want to do, it will immediately proceed to that frame, bypassing any others which would normally preceed it, and build that morph state. If you abort the generation, it will return to the morph control panel. If the morph process is allowed to proceed to completion, you are presented with the buffer selection panel. Once you choose a destination buffer, the main control panel returns. Sequence Generate ----------------- In this panel, you set up the path, name and extension you wish to be used for the generation of multiple output frames. You have the opportunity to select a subset of the complete morph; in other words, if this is a 20 frame morph, you can specify that you only want to generate frames 14-17 or any other contiguous sequence. You can specify that the current render settings be used, in which case each frame of the morph will be rendered instead of saved as 24-bit images. Note that for most renders which are going to become animations, you will have to carefully provide a good set of colors to use or the animation will be poorer quality. An effective way to pick the "right" colors is to render a small set of morph frames (80x50 is good) and then composite those into one frame. Let the render tools pick colors from that single frame, then save the resulting palette. This will be an excellent palette to use across the total morph in the larger size. You may cancel out of this panel, in which case no frames will be generated, or you may select Done to initiate the proceedure. The generation of the morph sequence may be interupted at any time by pressing the close gadget on the progress bar indicator. Exit ---- This exits the morph control panel without generating any frames. ---------- List Requester (ARexx-based capability) ======================================= This capability allows you to bring up a list requester inside the image processor from which the user can select an entry; once an item is selected, a value (selected by you) is returned to the calling ARexx script or macro. The list environment for the PI Modules is implemented using this capability. For more details, see the information describing the list environment for PI Modules. In particular, see the script "launch.rexx" and the file "list.list" for a complete example of how to use this powerful capability. Here is the format of the ARexx command: 'listreq "Title text",listfilename,"keywords,etc"' ---------- Buffer Management ================= Load Image as Secondary ----------------------- This option will appear when you already have a Primary image buffer, it allows you to load the next image in automatically assigned as the secondary buffer. If buffers besides the primary are already loaded, then you will also be presented with the option to replace an old buffer as secondary. ---------- Load Image as Blend ------------------- This option will appear when you already have a Primary image buffer, it allows you to load the next image in automatically assigned as the blend buffer. If buffers besides the primary are already loaded, then you will also be presented with the option to replace an old buffer as blend. ---------- Load Image as Brush ------------------- This option will appear when you already have a Primary image buffer, it allows you to load the next image in automatically assigned as the brush buffer. If buffers besides the primary are already loaded, then you will also be presented with the option to replace an old buffer as brush. ---------- Co-ordinates ------------ The image processor now provides you with the option of displaying image X and Y co-ordinates while you work in the display. This option is controlled by a button in the Display panel called ``Show Cords''. There is another button that affects the co-ordinates, also in the Display panel. This one is called ``Drag Relative''. If you select it, then the co-ordinate display will show you the size of the object, or the distance of the pointer from the location you started drawing or selecting. This is useful if you need to create a specific size object. You can use the ``Cords at bottom'' button to switch the display from the top right to the bottom right. The ``s'' key will do the same thing when pressed while you are drawing. The following two ARexx commands allow to to set these conditions up: COORDS [showattop] ------------------------- Here, is required, 0 means no, 1 means yes GRID ----------------------------------------- Here, is required and should be 1 for on, 0 for off. If is present, then the other four parameters must also be. and define the spacing of the grid. and define the offset from the top left edge of the image where the first vertice of the grid will occur. These last two parameters MUST be values less than the first two. ---------- Grid ---- The image processor provides a grid capability. This is enabled in the Display panel by the ``Use Grid'' button, and when on, allows you to draw only on the selected grid size. Grid size and position is controlled by two buttons in the Display panel called ``Set Grid Interactive'' and ``Set Grid Numeric''. If you use the interactive mode, you are presented with the main image, and you use the mouse to pull out a rectangle. That rectangle sets both the gird size (the same as the rectangle) and its origin (the same as the rectangles corners). If you use the numeric method, you are prompted for an X and Y size, as well as an X and Y origin. The sizes represent the width and height of each grid cell. The origin represents the distance from the upper left hand corner (0,0) of the image that the first ``snap'' point occurs. ---------- Adding Noise ------------ The function F/x Random Dither allows you to add noise to an image if the region is too smooth for your taste. You can set the amplitude of the noise to your liking. You can select luma or an indpendant RGB dither. ---------- Clip to exact size (F/x) ------------------------ This capability allows you to specify a rectangular region, for instance 100 by 75, and then clip that exact size region from the primary image. This is useful when you are trying to create a smaller output image from an already existing larger image. ---------- X-Specs Over-Under ------------------ This function takes an image that is interleaved for the X-Specs glasses and modifies that image to the X-Specs Over-Under format, used by some X-Specs viewers. The conversion takes place entirely in the Primary buffer. ---------- X-Specs Interleave ------------------ This function takes an image that is over-under, that is, has one field over the other, and changes it to the interleaved format. The conversion takes place entirely in the Primary buffer. ---------- X-Specs Separate ---------------- This function takes an interleaved X-Specs image in the Primary buffer and separates the two fields into two new buffers. You have the opportunity to name these buffers if you like; if not, they will be called Clip_N and Clip_N+1, where N is the current clip number. Note that this process creates two new buffers which have half the number of lines of the Primary buffer in addition to the Primary buffer, and as a result will require as much additional memory as the Primary buffer consumes. ---------- F/x User Transforms ------------------- This is one of the most flexible, and potentially complicated, operations in the entire image processor. In simple terms, this provides you with a graph, where you have the opportunity to specify the resulting output from every level in a buffer. You can cause this function to create the exact operations for contrast, brightness, gamma, negative, histogram equalization and more. You can save (and reload later, of course) any transform curve you create; several are provided as ``boilerplate'' for you to try out. A special function also sets the transform curve to the current curve of the image itself; this can be used to equalize the image. The files that are saved are in a textual format. The file should contain at the beginning the four letters ``TFRM''. Following that first line, you can have one of three things on any line of the file. A blank line, which will be ignored; a line that begins with the ``*'' character, which allows the line to contain any comment; or a number from zero to 255. Only the first 256 lines which contain numbers are read from the file. You can create, or modify, these files with any good text editor (but not a word processor). The curve itself can be drawn with the mouse, smoothed, or as mentioned previously, generated from the image. Note that there is a smaller graph area which contains the current transform curve of the image at the upper left. ---------- Stretch (Scale, Zoom) --------------------- The Stretch Clip operation now has the ability to stretch to a particular percentage, as well as the original stretch to a particular pixel size. ---------- Map to Range ------------ This tool is similar to the Map To Palette capability, except it uses the current range, and (since ranges may be smaller than 256 colors) the range will be automatically interpolated (smoothed) if the range is 255 or less colors. ---------- Color Balance ------------- Color Balance is a tool that re-balances the entire image, based upon a region you specify. The principle underlying Color Balance is the same as that used by Grey and White balance operations, but with a twist. The assumption made is that you can (by observing) locate an area on the image that you want to be tinted to an exact shade of a particular color. If you can, you identify this area using the region select tools, and the function will re-balance the entire image based upon that information. What you end up with is a tinted image; similar to using a dye when developing film. ---------- Black Balance ------------- Black Balance is a tool that re-balances the entire image, based upon a region you specify. The principle underlying Black Balance is the same as that used by Grey and White balance operations. The assumption made is that you can (by observing) locate an area on the image that should have been black. If you can, you identify this area using the region select tools, and the function will re-balance the entire image based upon that information. This is very effective for images that have low contrast or coloration. ---------- Force Dynamic ------------- This operation is similar to the Dynamic Range operation. To understand the difference, we need to look at Dynamic Range. The Dynamic Range operation examines the entire image, finds the darkest and lightest regions, and then linearly expands the contrast and moves the brightness center appropriately. This results in the maximum possible contrast without losing any image information. Force Dynamic does the same thing, except that the examination for maximum and minimum regions is only performed in the region you specify, not the entire image. As a result, Force Dynamic can indeed lose image data. One possible use would be for an image that was contained as a sub- image within another --- for instance, a picture on a television in a larger image. You can use Force Dynamic on the TV image, and that image will be brought to it's best possible contrast (and the rest of the image will be seriously damaged). ---------- X-Specs Conversion ------------------ This operation allows you to create an X-Specs interleave format image from the image in the Primary buffer and the image in the Secondary buffer. You can even do this with dissimilar size images! ---------- Absolute Resample - no anti-aliasing ------------------------------------ The stepped Zoom operation now allows you to reduce an image's resolution without averaging neighboring pixels; this was added so that the automatic expansion of HAM-E images to hi-resolution pixels (with synthesis of intervening pixels using the same method as our advanced Anti-Alias engine) could be reversed without any unwanted smoothing of the image. Suggested use is to use it on the horizontal axis only. ---------- Merge with Render from Range ---------------------------- This operation will take a range of colors you have defined in the palette and render the secondary image into the primary image using only those colors. The operation is similar to a merge, in that the entire secondary image is rendered into the region you specify. For instance, if you have a 4 color range that consists of black, white, and two intermediate grey levels, then that's how the image will be placed into the primary image. This allows you to use unlimited creativity in color compositions. One option is to use dither when rendering using the range colors. Dither effectively increases the available color space, and images will look more accurate, as well as somewhat ``rougher''. Another option is to turn ``Excursion Off'' for the render. This is only effective if dither is on; the effect is to increase the number of colors available in dither, but it will also make the iamge appear even rougher. Another option allows you to select a stretched merge, or a sub- sampled merge. You can use blending in the normal fashion with this operation, also. You should be aware that when blending is on, more colors are used to composite the image, as various levels of the colors in the range are blended with the colors in the primary image. ---------- Additional Render Controls and Capabilties ------------------------------------------ Our image processor's Amiga mode rendering procedures have been completely re-written during the production of revisions 7.02 and 7.03. We are confident that our rendering capabilities now meet or exceed those of any other product currently available for final image quality. Comparison renders performed at Black Belt Systems using the latest releases of commercial Amiga packages which also render to Amiga mode images provide the basis for this confidence. If you have other software which performs these tasks, we encourage you to make the same comparisons. Knowing what package performs better in this regard will serve you well as your create your Amiga mode images. Details ------- The control "Turn Off Excursion Limit" may now be used to modify the quality of most render modes. It works with dithering to provide a larger color space. If you turn off the dither when rendering, this has no applicability. If you turn excursion off, the dither operations can reach more colors in the color space. The image may appear rougher as a result. We suggest you try things both ways before committing to a final render. Most images will be better with this button depressed. All Amiga render modes now have multiple dither choices for your rendering convenience; you may currently choose from: No Dither ------- Uses the nearest color in the palette; contours. 2-Point EDD ----- Most color accuracy; roughest image. Heavy dithering >Floyd-Steinberg - Best compromise; not too rough, good color accuracy Jarvis ---------- Smooth; color begins to show contouring (mach bands) Stucki ---------- Extremely smooth; contouring quite evident Random F-S ------ Rough; good color accuracy, tends to hide errors Dual Random F-S - Not so rough; good color accuracy. Less clumping. You may modify any dither method with either Left->Right scan or Serpentine scan. Serpentine is almost always better. For low color renders that pick new color registers, 16 colors for instance, you should try "Chekov Forcing" and see if your image renders better with it on. This will cause the color picking code to choose slightly different registers which will help portions of the image that have color "hot spots" to render more accurately. Our suggestion for the best render quality for most images (there will be a few exceptions to this) is to use the Floyd-Steinberg dither, serpentine scan, excursion limiting off. Chekov forcing is a 50-50 kind of thing. Sometimes it helps a lot, but it may make the render worse. ---------- Compose with Logical OR ----------------------- This image composition operation will combine the Secondary image into the Primary image using the logical OR operation. ---------- Compose with Logical AND ------------------------ This image composition operation will combine the Secondary image into the Primary image using the logical AND operation. ---------- Multiple Blend Technique Application ------------------------------------ You can now use any of the three blending techniques in combination with each other. The manual implies that the blending techniques are independant and exclusive. While you can still use them independantly, you can also use them together in any combination. ---------- Smooth Edge Blending as a Percentage ------------------------------------ The smooth edge blending capability now has the ability to be specified as a percentage of the region's size. The specify by number of pixels is still intact, of course. This will help you use the technique on larger images, and also allows you to apply similar looking edge blends without having to re-specify the blend lengths. ---------- Masks ----- The image processor can now save masks with images, contrary to the statement in the manual that it does not. These masks are in a proprietary format readable by the image processor, and will be (should be) ignored by other IFF readers. The PMBC Public Interface module will also save and load masks with images. ---------- Color Separations ================= General ------- The image processor now has full RGB, CMY and CMYK color separation capability for both 12 and 24 bit images. The color separation tool is located in the File I/O panel; it is extremely flexible and allows you to save multiple control parameter settings for your various color separation needs. Color separations are positive, and so where you expect a lot of ink to be on the paper, the image on screen will have the most color (``ink''). If you use a color map, the image will be the color of the separation (cyan, for instance) where the paper is white, which is somewhat counter-intuitive, and it will be black where it is maximum cyan. ---------- Under Color Removal ------------------- This control sets the amount of color (cyan, magenta, yellow) ink removed when they can be replaced by black. ---------- Gray Component Replacement -------------------------- This control sets the amount of black ink that replaces what was removed by the Under Color Removal tool. ---------- Magenta Ink Mix Correction -------------------------- This control compensates for impure ink colors, IE, the cyan ink is not pure cyan. The default value is set for Inkum Inks, which we strongly recommend for inkjet use. ---------- Yellow Ink Mix Correction ------------------------- This control compensates for impure ink colors, IE, the magenta ink is not pure magenta. The default value is set for Inkum Inks, which we strongly recommend for inkjet use. ---------- Output 12 Bit ------------- This setting allows you to create 12 bit color separations, needed for some Amiga DTP programs. You should always use 24 bit separations for professional work. ---------- Output 24 Bit ------------- The setting allows you to create 24 bit accurate color separations. ---------- Gray CMAP --------- This section causes a grey CMAP to be placed in the output file, which is required for proper color separation operation. The alternative, Color CMAP, makes the images easier to understand and view, but is not useful for real separations. Color CMAP ---------- This places a color CMAP in the separation file, which will let you visually cue in to how much ink will be used when observing the files. Do not use this settings for final work; You must place a Gray CMAP in the file for it to be useful. ---------- Set To Default -------------- This control forces the Under Color Removal, Gray Component Replacement, Magenta Ink Correct, and Yellow Ink Correct to their respective default values. Set To No Correction -------------------- Just as it says. The colors are created via a straight mathematical transform with no correction for the shortcomings of!inks and paper. Generate CMYK Separation ------------------------ This produces four output files, cyan, magenta, yellow and black. This is what you will typically use for professional separations. Generate CMY Separation ----------------------- This produces three output files, cyan, magenta and yellow. This is what you will typically use for three color printer ribbons. Generate RGB Separation ----------------------- This allows you to separate the image into it's respective R, G and B components. We don't know what use it is, but others have this capability, so we added it also. Save Settings ------------- This allows you to save the current settings of the Color Separation panel. This is very useful for situations where you'll be outputting to various print agencies or printers, and the settings are different. Note that if you save a settings file and name it ``Default.csep'', it will be automatically loaded when the software starts. It should be located either in the current directory or drawer (not recommended) or in the s: assignment (highly recommended). ---------- Load Settings ------------- This loads any settings that you saved. ---------- Extensions ---------- You can preset the extensions used on the color separation files if you like using the four text entry fields provided. ---------- CMYK and RGB Recombination ========================== Recombinations are done with the compose panel. The general idea here is that you prepare a blank buffer (White for CMYK, Black for RGB) to receive the recombined image. Each portion of the image to be recombined is loaded as a secondary buffer, then processed using the matching recombination function. For instance, to recombine a CMY image, you would create an all-white buffer of the size you want the output image. Now, load the Cyan (C) portion of the separated image. Make it the secondary and recombine that portion. Now load the M and Y portions and do the same. For CMY or CMYK recombination, you need to know what the UCR, GCR and ink correction settings were or the image colors will come out wrong. To do this with an RGB image, the process is the same except for one thing; you need to start with an all-Black buffer instead of a white one. This is technically because RGB colors are additive and CMYK colors are subtractive. Genlocking ========== Creating a Transparent Region ----------------------------- Rendering now allows you to specify Transparency for genlocking by marking a region that you do not want to be transparent. So, if you have drawn a graphic you want to appear in the top right of the frame, just move the object there using the usual tools, then when you render, just define that object as the ``non-transparent'' region. The entire remaining portion of the image will be drawn using the Amiga (or HAM-E) ``color zero'', which will make it transparent for genlocking purposes. Keep in mind that not using the color zero color can substantially reduce the render quality of an image, especially when you are using fewer colors. ---------- Color-Keying: Transparency by Color ----------------------------------- You can also create a genlock (transparent) region by selecting the Color Gen Mask button. This will cause the image to have transparent (genlock) areas wherever the color in the image matches the color selected in the process panel using "define color". The color radius also affects the genlock area generation. An example would be where you have a picture of a model you have taken against an aqua background. Select the aqua area as the "defined color", and then use Color Gen Mask to build the genlocked image. The image will be transparent everywhere but where the model is. Of course, if the model is wearing any aqua color, or has aqua eyes, that region will be transparent as well. You can fix this up by changing the colors of that region using the paint tools. Keep in mind that not using the color zero color can substantialy reduce the render quality of an image, especially when you are using fewer colors. ---------- Creating Non-transparent Renders -------------------------------- If you want a render to be totally non-transparent (that is, doesn't use the Amiga color zero anywhere), then select the "Identify the genlock non-transparent area" button an choose "entire image" as the region. The entire image will be non-transparent. Keep in mind that not using the color zero color can substantialy reduce the render quality of an image, especially when you are using fewer colors. ---------- DCTV ==== Compatibility ------------- The image processor can now load DCTV files from the 1.1 version of the DCTV software as well as the original software format and the library format. Filtering --------- The DCTV library allows you to filter the RGB image that is used to create the final DCTV image. If you select the "Use DCTV RGB Filter" button when you render DCTV images, this filter is called into action. Again, this function is entirely dependant upon the code in the DCTV.library software, and Black Belt Systems is not responsible for any image degradation you may experience in the final DCTV image. ---------- Brushes ======= Transparent Brush Cutting ------------------------- When you select "Cut Out New Brush", you will now get a two button panel that asks you if you'd like to do this as a transparent operation or just as a solid area. If you do select transparency, the transparent portion of the cut will occur where the background color (See Color Definition, next) is similar to the color in the cut region. The color radius affects the transparent region calculations. ---------- Color Definition ================ Adjust Foreground Color ----------------------- This new option within the paint panel allows you to immediately adjust the foreground color using RGB controls. ---------- Sample to Foreground Color -------------------------- This new option within the paint panel allows you to immediately adjust the foreground color by selecting a region on the Primary image. ---------- Adjust Background Color ----------------------- This new option within the paint panel allows you to immediately adjust the background color using RGB controls. ---------- Sample to Background Color -------------------------- This new option within the paint panel allows you to immediately adjust the background color by selecting a region on the Primary image. ---------- Palette Mapping --------------- In the main paint panel there is a new option called "Palette Mapping". This function is for artists who wish to change colors which have already been painted with, from the palette or from a range. To do this:- (1) Copy the range that you have drawn with into the current palette, (2) Choose "Palette Mapping" and "Establish Map", you will then be able to select the area to be affected, (3) Adjust the colors in the palette to the new colors you want, (4) Choose "Palette Mapping" and "Apply Palette Changes"; This will change the drawn colors in the image in the same way you changed the palette colors. Note that the "Establish Map" function only works on colors that exactly match those in the palette. Also, "Toss Map" can be used to free up some memory after you have finished Palette Mapping. ---------- Paint Settings To Disk ---------------------- In the Paint Panel are Load and Save Paint Settings buttons. This saves all the settings you are then using to paint with including the foreground and background colors. ---------- Filling ======= Brush Emboss ------------ This fill mode will emboss the image with a pattern derived from the brightness of the current brush. The fill proceeds in a regular rectangular fashion. ---------- Brush Brick Emboss ------------------ This fill mode is similar to Brush Emboss, but every other line of repeated brush patterns is offset by 1/2 the brush width, resulting in a fill that has the 50% offset characteristic of brick architecture. ---------- Poly-range Fills ---------------- Polyrange fills are a new and unusual type of fill developed by Black Belt specifically for our image processing software. The best way to describe a polyrange is to begin with a polygon. Let's take a polygon in the form of a triangle as our example. A triangle has three points. What polyfill will do is assign a color to each of those points from the range you supply, assuming only that the range you supply has three points. So, if you have a range that is red, green, blue, yellow... etc, then the triangle will have red, green and blue assigned to the three points of the corners. Now, there are two different ways that polyranges will work, depending on the Smooth Range fill setting. If smooth range fill is off, then the pixels inside the triangle will be filled according to the vertex (point) they are nearest to. So, pixels near the red vertex will also be red, and so on. If smooth range fill is on, then the pixels inside the triangle will be filled with all three colors, proportionally to how near they are to that particular vertex. So, for pixels right at the red vertex, you get red. For one halfway between red and green, but far away from blue, you'll get a yellow color. Keep in mind that polyranges can work with any number of points, so you can make some really spectacular fills. Note that large numbers of vertexes will cause long computation times, however. Rectangles and full screen polyrange fills act like four vertex polygons, and so require a four color range. If you have less colors in the range than there are vetexes in the polygon, then the range will repeat along the vertexes untill all vertexes are assigned a color. ---------- Freehand and Elliptical Polyranges ---------------------------------- We've done something wild, here. Since a freehand area or an ellipse are not composed of vertexes as polygons, polyarcs, rectangles and so on are, we need a different way to apply polyranges to them. What we do is find out the length of the edge of the freehand area or ellipse, and the we distribute the entire range of colors around the perimeter of the region. Let's say you have a 6 color range (you might want to try this, the results are stunning!) or Red, Yellow, Green, Aqua, Blue, Purple. These colors are placed at points equidistant from each other around the perimiter of the object. So, if you draw a very round ellipse, with smooth range on, you get a gorgeous ``color wheel''. Freehand areas provide very strange and beautiful results. Again, be careful not to use ranges with very many colors unless you are prepared to wait a long time. ---------- Dual Range Fills ================ The image processor now provides for a new type of fill that uses two separate color ranges to derive fill colors. These can be utilized once you have selected two ranges; you can select both from the paint panel, the new button to pick the secondary range is called ``Select Second Range''. Once you have picked the two ranges, you can use the following fill tools: Dual Horizontal Range --------------------- This fill mode places the two ranges above, and below the region to be filled. The pixels in the filled area are derived as a function of the distance between the top range, and the bottom range; they change horizontally across the filled region as they utilize different pixels from the two adjacent ranges. Dual Vertical Range ------------------- This fill mode places the two ranges left, and to the right of the region to be filled. The pixels in the filled area are derived as a function of the distance between the left range, and the right range; they change vertically across the filled region as they utilize different pixels from the two adjacent ranges. Dual Horizontal Warp Range -------------------------- This fill mode places the two ranges above, and below the region to be filled. The pixels in the filled area are derived as a function of the distance between the top range, and the bottom range; they change horizontally across the filled region as they utilize different pixels from the two adjacent ranges. The ranges are ``pinched'' together near the edges of the filled region. Dual Vertical Warp Range ------------------------ This fill mode places the two ranges left, and to the right of the region to be filled. The pixels in the filled area are derived as a function of the distance between the left range, and the right range; they change vertically across the filled region as they utilize different pixels from the two adjacent ranges. The ranges are ``pinched'' together near the edges of the filled region. ---------- Dual Range Example ------------------ You need to create two different ranges. You can use as few as two colors in the first range, and five in the second range. You're going to be using the "Smooth Range" modifier, so you'll get a beautiful spread of colors anyway. Make the first range all dark blue. That's right, NO color change in the range. Make the second range go from aqua to orange to aqua. That's easy to do, just set one end of the range of colors to orange, one to aqua, and choose mirror range. From the palette display, select the aqua-orange-aqua range and place this in the range panel. Return to the palette, and then place the Blue-Blue range in the range panel. Since the Blue-Blue is the last range you entered, it is the current range. Now, exit back to the paint panel. Here, select the Second range (the aqua-orange-aqua one) using the control provided for that purpose. Go into the Fill panel, select "Smooth Range" and also select the fill mode as "Dual Horizonal Range". In this context, "Horizontal" means the way that the range lies on the image - NOT the way that the fill occurs. Here is how the fill will work: Top of fill Range 1 Blue <----------------------> Blue ^ ^ ^ | | | | | | Filled area where color | | | <-- changes smoothly between | | | the two adjacent ranges | | | v v v Range 2 Aqua <-------Orange---------> Aqua Bottom of fill You're ready to try the fill itself now. Select a rectangular region and fill it, or do the entire image if you'd like. You should have blue at the top, and this should fade down to an orange glow in the middle where the sun has just dissapeared. ---------- Any Angle Range Fill -------------------- This powerful fill mode consists of an angle entry field and a mode button in the fill modes panel. You can specify any possible angle, either positive or negative. ---------- Buffer Operations ================= DPI operations -------------- There are several operations that work within the concept of "Dots- Per-Inch". One is accessed in the Buffer panel; it allows you to "Set Current DPI and Size" for a buffer. For instance, you can say, this buffer is 8.5x11, or that it is 200 DPI. There is an operation in the F/x panel that allows you to rescale using DPI as the criteria. You may find this particularly useful if you are into printed graphics. ---------- Initialize to Color ------------------- This brings up the RGB panel and allows you to create the buffer filled with a specific color. ---------- Setup Panel =========== There is now a setup button in the image processor that provides you with the ability to specify Interlace or Non-interlace when the program starts. ---------- Information =========== Other Buffers ------------- This tool allows you to obtain X:Y pixel information, total memory used, parent, and other information about any buffer in the system. ---------- Display ======= Fast HAM draw mode ------------------ This display mode uses a pre-calculated palette for fast drawing. Future updates of the image processing software will concentrate on improving the speed of this tool; it will be the very first to be re- coded into assembly language. ---------- ARexx ===== Port Names ---------- Here's something we inadvertantly left out of the manual... the port names for the ARexx ports in Imagemaster, Imagemaster F/c, and Image Professional. Here they are: IM_Port For both IM and IM F/c. IP_Port For Image Professional. ---------- Render command changed ---------------------- On page 177 of the manual, the parameters given are not complete. Parameter number six , described on page 178 (correctly), is missing. Make sure you take this into account if you are using the render command. Here is the correct command string: render [cols] ---------- Filerequest command changed --------------------------- This command now returns the string 'FR_CANCELLED' if the user cancels the file requester. This allows you to abort operations in progress. ---------- Newbuf command (changed) ------------------------ The newbuf command now has the following syntax: newbuf [name] [MASK] The new keyword MASK allows you to specify a new buffer with a local mask plane available. This is required if you are writing a PI Load module that will need a local mask (for a non-rectangular image). Note that there are two optional parameters here; you'll need to provide a NULL string for the "name" parameter if you want the automatic naming to work, as in the following example: 'newbuf "'||width||'","'||height||'","","MASK"'; ---------- Firecracker-specific manipulation (new commands) ------------------------------------------------ The ARexx commands FCHIDE and FCSHOW have been added; these turn the FC24 display on and off. They have no effect (and cause no error) in the other versions of the image processor. ---------- Finding the mouse location from ARexx (new command) --------------------------------------------------- The ARexx command "WHEREMOUSE" returns the mouse's current co- ordinates using the image resolution. ---------- coords (new command) --------------------------------- This allows you to turn the co-ordinate facility on and off from ARexx, and also to control the placement of them. If show is 1, then co-ordinates are on. If 0, then they are off. If top is 0, then the co-ordinates are displayed at the top of the screen. If 1, then at the bottom. ---------- grid (new command) ----------------------------------------------------- This command allows you to set a particular grid. When on is 0, the grid is off. When 1, grid is on. xgrid and ygrid allow you to set the spacing between grid lines; xoff and yoff allow you to set any offset from the top left corner (0,0) of the image. ---------- newasprimary (new command) -------------------------- This is similar to the newbuf ARexx command, except that the buffer it creates is always the primary buffer. The newbuf command would create the new buffer as the primary buffer only if there was no previously existing primary buffer; otherwise, the new buffer was just added as ``another'' buffer in the system. When you use OPTIONS RESULTS in the ARexx script so that the image processor knows it can return data to you, the number of the buffer created will be returned. This new command ensures that the newly created buffer will be the primary buffer, regardless of previously existing buffers in the system. ---------- newbuf (changed) ---------------- The ARexx newbuf command now returns the number of the buffer it creates if you use OPTIONS RESULTS in the ARexx script. ---------- fromdigiview (changed) ---------------------- The ARexx fromdigiview command now returns the number of the buffer it creates if you use OPTIONS RESULTS in the ARexx script. ---------- dome (changed) -------------- The ARexx dome command now has an optional extra parameter, "effect". You call it this way: 'dome 60 50'; /* dome [effect] */ or... 'dome 60'; If you don't use the extra parameter, it defaults to 100% ---------- caric (changed) --------------- The ARexx caric command now has an optional extra parameter, "effect". You call it this way: 'caric 60 50'; /* caric [effect] */ or... 'caric 60'; If you don't use the extra parameter, it defaults to 100% ---------- imagemaspect (new command) -------------------------- This command returns the aspect ratio of the chosen buffer. 'imagemaspect '||BUFFERNUM'; /* get aspect ratio */ loadimask (new command) saveimask (new command) ----------------------- This command loads the image mask (the valid image area mask) from a saved mask file. 'loadimask [mode]' where... mode 1 = Replace existing mask (default) 2 = OR 3 = AND 4 = XOR 5 = MINUS The opposite command is: 'saveimask '; loadmask (new command) savemask (new command) ----------------------- This command loads the main mask (the region selection mask) from a saved mask file. 'loadmask [mode]' where... mode 1 = Replace existing mask (default) 2 = OR 3 = AND 4 = XOR 5 = MINUS The opposite command is: 'savemask '; backuptoundo (new command) -------------------------- This command has specifically included to enhance the public interface capabilities. If you are writing an external process, and are operating upon the contents of the Primary buffer, using this command before you perform your process will copy the initial contents of the Primary buffer into the UnDo buffer, allowing the user to UnDo the changes caused by your process. ---------- coords [showattop] (new command) --------------------------------------- Here, is required, 0 means no, 1 means yes. ---------- grid (new command) ------------------------------------------------------- Here, is required and should be 1 for on, 0 for off. If is present, then the other four parameters must also be. and define the spacing of the grid. and define the offset from the top left edge of the image where the first vertice of the grid will occur. These last two parameters MUST be values less than the first two. ---------- autoactivate (new command) -------------------------- The autoactivate ARexx command has been added so that you can change the state of the image processor's automatic re-activation of it's main control panel when it completes all pending operations. Since there may be times when you have another process running, and don't want the image processor to reactivate it's window during that time, this command was added. Use it as autoactivate 0 to turn autoactivation off, and use it as autoactivate 1 to turn it back on again. If you are passing control to another program, make sure that autoactivate 0 is in the ARexx script before the other program is called; and when control is returned to the image processor, make sure that autoactivate 1 is in the script before you bring up the the image processor screens. Bringing the the image processor's display to the front with autoactivate off may seriously confuse the user. ---------- setpalette (new command) ------------------------ This ARexx command has been added so that the color of any of the 256 palette entries may be set from a script. The PI Module which is now supplied uses this command to set palette entries once it has read the IFF file and extracted the CMAP (color map) chunk from within the image file. Use is simple: 'setpalette' entry R G B; Where the parameters are defined as: entry: [0-255] (which palette color of 256) R: [0-255] (intensity) G: [0-255] (intensity) B: [0-255] (intensity) Here is an ARexx fragment that sets the palette to a grey scale: do i=0 to 255 'setpalette' i i i i; end; Here is an ARexx fragment that sets the palette to all black: do i=0 to 255 'setpalette' i 0 0 0; end; Here is an ARexx fragment that sets the palette to a reverse grey scale: do i=0 to 255 'setpalette' i 255-i 255-i 255-i; end; ---------- DISPLAYMODE (new command) ------------------------- DISPLAYMODE [quality] ------ for Image Professional DISPLAYMODE ----------------- for Imagemaster DISPLAYMODE ------------------ for Imagemaster F/c This command allows you to change the current display mode within the image processing software. It has no effect upon the image itself, nor upon output render results. In the following table, "Q" is used to specify the [quality] switch. for IP is 0 = luma 1 = avg 2 = reg Ord Dither 3 = HAM-E 24 bit (also depends on Q flag) 4 = HAM-E 18 bit (also depends on Q flag) 5 = EDD 256 colors 0 = non-lace 1 = lace display [quality] 0 = normal 1 = high quality (HQ) for IM is 0 = luma (in 16 shades) 1 = avg 2 = 16 color hi-res 3 = 32 color lo-res 4 = half-brite 5 = HAM (fast) 6 = HAM (quality) for IMFc is 0 = luma (256 shades) 1 = avg 2 = color (24 bit) (the second parameter is then ) 0 = low res 1 = med-res 2 = med-res 2 3 = hi-res ---------- pal (new command) ----------------- This is used with options results in ARexx. Reports 0 for NTSC and 1 for PAL modes. Used to determine how Imagemaster is running at the time of macro execution. ---------- autoprimary (new command) -------------------------------- This command puts the image manipulation software into a mode where any newly allocated buffer is automatically made the primary buffer. This makes ARexx scripting, especially in Sequence or Morph scripting, much easier to deal with. mode = 0 new buffers do not become the primary unless there are none mode = 1 " always become primary ---------- render (changed) ---------------- The following replaces the description of the RENDER Arexx command on pages 177 and 178 of the manual. Summary of changes: - * 19 new render modes * No more size restrictions, except when rendering for DCTV (as required by the device). * Number of colors defaults to the maximum for that render mode. Detail ====== render [numcolors] --------------------------------------------------------------------- 0 = no, 1 = yes. Ignored for GIF and the non-viewable IFF renders. render image width. Only restricted to between 640 and 736 for DCTV. render image height. Only restricted when rendering for the DCTV to between 200 and 241 for non-lace and between 400 to 481 for lace. 1 = HAM-E mode, 18 bit 2 = HAM-E mode, 24 bit (extended color space dithering) 3 = Register mode for the HAM-E device, undithered 4 = Register mode for the HAM-E device, dithered (EDD) 5 = Register mode for the HAM-E device, Black and White average 6 = Register mode for the HAM-E device, Black and White luma 7 = 256 color GIF 8 = 16 shade Amiga hi-res - Black and White Average 9 = 16 shade Amiga hi-res - Black and White Luma 10 = 16 color Amiga hi-res - color 11 = 32 color Amiga lo-res 12 = 64 color Amiga half-brite 13 = Amiga HAM 14 = DCTV 3-bitplane (width must be 640 to 736, and height 200 to 241, or 400 to 482) 15 = DCTV 4-bitplane (width must be 640 to 736, and height 200 to 241, or 400 to 482) 16 = Amiga Hi-Res with 1 bitplane and 2 colors 17 = Amiga Hi-Res with 2 bitplanes and 4 colors or less 18 = Amiga Hi-Res with 3 bitplanes and 8 colors or less 19 = Amiga Lo-Res with 1 bitplane and 2 colors 20 = Amiga Lo-Res with 2 bitplanes and 4 colors or less 21 = Amiga Lo-Res with 3 bitplanes and 8 colors or less 22 = Amiga Hi-Res with 4 bitplanes and 16 colors or less 23 = Amiga IFF render (not displayed ) with 6-bitplanes and 64 colors 24 = Amiga IFF render (not displayed ) with 7-bitplanes and 128 colors 25 = Amiga IFF render (not displayed ) with 8-bitplanes and 256 colors If 0 the image colors will be chosen; if 1 then the currently loaded palette will be used. The image name used to save the rendered image to. The full name will be a combination of the render path that was set with the RENDERPATH command, this name, and the extension that was set with the RENDEREXT command. [numcolors] The number of colors used to render with. This defaults to the maximum number of colors possible for each render method. This only indicates the number of registers for Amiga HAM and HAM-E modes even though the actual number of displayable colors is much higher. (Ignored for DCTV renders.) ---------- Public Interface ================ Provided PI Modules ------------------- We have provided a number of PI modules with the image processor. These PI Modules provide: * JPEG load and save capability * PMBC load and save capability * RAW load and save (both color and B&W) * Direct insertion of an image to the FireCracker 24 Black Belt Systems has accomplished a number of ``firsts'' with these PI Modules; Our image processing software is the first commercial software on the Amiga to provide JPEG load and save capability, and the only software of any kind to provide PMBC save and load capability. ---------- Installing the PI Modules ------------------------- To install the provided modules, go into the directory on the release disk that is named the same as the PI module (JPEG, PMBC, RAW, etc) and read the file entitled ReadMe. This gives explicit directions on installation and use. Generally, a PI Module contains an ARexx script, and one (or more) CLI/shell commands. ---------- Image Locking ------------- This capability provides a safety net under all Public Interface Modules. What happens is that when an ARexx script LOCKs a buffer, it cannot be changed from inside the image processing software; this allows external processes to run long operations without the concern that user might quit the program and pull the rug out from under, so to speak. Image locking is done with the following commands: LOCKIMAGE UNLOCKIMAGE UNLOCKALL Note that the NEWBUF command now returns the buffer number if you set OPTIONS RESULTS before you call it. This conveniently provides the buffer number to lock without any further ARexx manipulation. ---------- Unlock Buffer (in Buffer Panel) ------------------------------- This is the "escape hatch" for the user if they believe that a buffer has been left locked by mistake. This should rarely, if ever, be used by the normal user. However, if you are developing PI Modules, it may come in very handy. Unlocking a locked buffer when it is still being accessed by an external process means that the image processor can delete the buffer, or even exit and delete everything - which means that the task that was writing into the buffer will now be writing in what the system thinks is free memory - very scary stuff. This button warns the user that unlocking isn't advised normally. ---------- Access to any buffer for PI Modules ----------------------------------- This is similar to what you can do with the JACKIN operation, but it is specific to a single buffer. The intent is to allow an ARexx script to create a new buffer which is NOT the primary buffer, and begin working on it without getting in the user's way; the user can continue to work normally, yet this other buffer is "happening"; for instance a ray tracer can render right into it while you do other things. Here are the relevant commands: UNPLUG plugpointer = PLUGIN which returns a pointer to a structure as follows: struct plugina { struct jackinbuff *buffer; unsigned char id[4]; / * 'P','L','U','G' * / }; ...where "buffer" points to: struct jackinbuff { unsigned char *red; unsigned char *green; unsigned char *blue; unsigned char *mask; unsigned short x; unsigned short y; }; The expected sequence of operations is to allocate a buffer, PLUGIN to it, LOCK it, do stuff to it, and finally UNLOCK it. Before you use a "plugina" structure, you should check the "id" array and make sure that the four characters P, L, U and G are in positions 0, 1, 2 and 3. If not, the structure isn't valid and your command should fail with a warning to the user. ---------- Structures ---------- If you are working with the Public Interface, you'll find these structures useful: /* * Structure that represents each buffer in IM */ struct rgbu { unsigned char *red; /* X by Y size array */ unsigned char *green; /* X by Y size array */ unsigned char *blue; /* X by Y size array */ unsigned char *mask; /* X by Y size array (?null?) */ unsigned short x; /* X size */ unsigned short y; /* Y size */ }; The rgbu structure represents the data built for you about each of the buffers (Primary, Secondary, Brush, Blend, Undo). In the case of the UnDo buffer, the mask pointer will always be NULL. The red, green and blue pointers point to a linear array of unsigned bytes where 0 is fully dark, and 255 is fully bright for that color. The mask pointer, if present, points to an array of unsigned bytes that will contain non-zero values where the image exists, and zero where it does not. If you write image data in regions of the red, green and/or blue buffers that is masked (mask is zero), the user will never see it. The memory is there and you may write in it if you feel you have a good reason (temporary storage?). The x and y values represent the x and y dimensions of the buffer. Buffer data is arranged X first, then Y. If an image is 320 by 200, the first pixel of the first line is at offset 0 in the buffer; the second pixel in the third line is at offset 961. You can locate pixel data using the following formula, where ``x'' is the width, Y is the current Y position and ``X'' is the current X position: p = (Y * x) + X This should be all the information you need to utilize the data in the rgbu structure. /* * Represents the main info struct in IM */ struct jacker { struct rgbu *pr; /* Primary Buffer */ struct rgbu *se; /* Secondary Buffer */ struct rgbu *un; /* UnDo Buffer */ struct rgbu *bl; /* Blend Buffer */ struct rgbu *br; /* Brush Buffer */ unsigned char *msk; /* User Mask (Primary-size) */ char jack[4]; /* verify: chars J,A,C,K */ struct Screen *showscr; /* screen of gadget panel */ unsigned char pname[4]; /* processor name: 'IP'00 'IM'00 or 'IMFC' */ long ver; /* version of the program */ }; The jacker structure contains only two types of data. First, there is a group of pointers to the various rgbu structures that represent the state of those buffers within the system. If one of these pointers is NULL, then that buffer does not currently exist. Next, there is a pointer to a mask. This mask is always the same size as the Primary buffer; it will only exist if there is a Primary buffer; and as a result, you can get the X:Y size of the mask by examining the X:Y sizes specified in the rgbu structure for the Primary buffer. ---------- PI Module Code Examples ----------------------- The following code fragment assumes the use of the above structures. It is the beginning of a CLI command which accepts the pointer passed in from the ARexx script fragment shown, and then checks for reasonable values in the structures. There is an additional item in the jacker structure which is a short character array that is loaded with the four ASCII characters J, A, C and K. This is not documented in the manual, but it is there in all cases and you should ALWAYS check for it before assuming that everything is ok to proceed. You should always do this, or it's equivalent, when beginning a process operation upon the primary buffer: void main(argc,argv) int argc; char *argv[]; { int tot,i; struct jacker *j; unsigned short dx,dy,x,y; if ((argc != 2) || (strcmp(argv[1],"?")==0)) { printf("%d arguments...\n",argc-1); printf("Requires one argument:\n\n"); printf("'JACKIN' hex pointer\n\n"); exit(1); } sscanf(argv[1],"%x",(int *)&j); /* *jackin */ if (j->pr == 0) { printf("No Primary Buffer!\n"); exit(2); } if ((j->pr->x == 0) || (j->pr->y == 0)) /* bad */ { exit(3); } if (j->jack[0] != 'J') exit (4); /* check sanity */ if (j->jack[1] != 'A') exit (5); if (j->jack[2] != 'C') exit (6); if (j->jack[3] != 'K') exit (7); /* * We got here, so there IS a primary * buffer. We can now proceed... */ The previous example used a value passed by the following ARexx code fragment: address 'IM_Port'; /* talk to the image processor */ options results; /* allow replies */ 'jackin'; /* get pointer to structs */ jackadr = result; /* copy return value */ options; /* disallow replies */ 'wbtofront'; /* bring WorkBench up */ address command 'c:ccpr '||jackadr; /* send... */ This ARexx fragment, or something extremely similar to it, is what you use to send the Public Interface pointer to your custom process, image loader, or image render program. Note that in combination with the other ARexx commands for panels, file requesters, area control specifiers and so on you can create a great deal of the required logic for your tool(s) using nothing more than the ARexx interface. There is a complete example of a "process" type of PI Module on the release disks, with SAS C source code, ARexx, and linkable object modules which provide progress bar indication and control panel based message services. Changes List (from v7.00 onwards) ================================= The following information provides a terse list of changes applied to each revision of the image processors listed. For details, refer to the text in the preceeding sections. The most recent changes are at the end of the list. When reading the changes list, you can interpret items which have a leading (+) symbol to be features added; items which have a leading (-) symbol are items which have been removed or bugs we've fixed. v7.00 ----- + New ARexx command 'listreq "Title text",listfile,"keywords,etc"' If there is more than one keyword they should be put inside double quotes but separated by spaces or commas. + All new buffer creation operations that can have a choice for the destination bring up . New as Secondary . New as Brush . New as Blend and when an existing buffer can be replaced, there is also . Old as Secondary (Hold Primary) . Old as Brush (Hold Primary) . Old as Blend (Hold Primary) v7.01 ----- + Change to ARexx command DISPLAYMODE [lace] [quality] in IP only modes are 0 = luma 1 = avg 2 = reg Ord Dither 3 = HAM-E 24 4 = HAM-E 18 5 = EDD 256 colors lace 0 = non-lace 1 = lace display quality 0 = normal 1 = high quality - Now all display mode changes intelligently do not re-allocate display screen. Helps reduce memory fragmentation problems + Image composition Logical And + Image composition Logical Or + New compose operation Add as Cyan (from color separation) and ARexx command 'addasc' + New compose operation Add as Magenta (from color separation) and ARexx command 'addasm' + New compose operation Add as Yellow (from color separation) and ARexx command 'addasy' + New compose operation Add as Black (from color separation) and ARexx command 'addask [ucr] [gcr]' These values are the user's best estimates of what was used to create the separation and only the ratio is significant. Normally they are 64, 64. If they are ommitted then the program supplies the last values it used, so separating and reloading will work simply. + New ARexx command 'WHITEN' which makes the primary image all white (faster than newbuf can) + New ARexx command 'VERSION' which returns the version,revision v7.02 ----- + Compose Morph screen and operations enabled for release :^) + New File I/O buttons 'Set Render Mode' 'Set Render Size' 'Set Dither Type' And 'Render to File' just asks for area select + Dither types added are No Dither Normal Edd Floyd-Steinberg Jarvis,Judice,Ninke Stucki + Lace gadget in Render Size panel now changes the Vertical Size + Amiga mode renders now update the paint palette with the rendered palette. So that before rendering 'PALETTELOAD name' will load colors and after rendering 'SAVEPAL name' will save rendered colors Note! All renders from ARexx always took note of the parameter which causes the renders to use colors from the palette. + File I/O panel now has a 'Set Render Mode' option. The Render to File operation no longer asks about render settings. + Aspect ratio is now saved with rendered images, and all IFF file loading sets the aspect ratio of the incoming image. + Renders to IFF with more than 100 colors use Ben's Spectral method less colors use Barry's method. + IP 'gate" enabled for release. Only HAM-E owners will now be able to use IP, as we originally intended. 7.03: ----- + Dither Type panel provides 'Left->Right Error Prop' or 'Serpentine Error Prop' - 16 color Hi-Res Render and 32 color Lo-Res render had their vbar titles swapped. Fixed. + New dither methods Random F-S Dual Random F-S + Excursion limit gadget now in dither panel + Render and Morph path and settings now get saved with default file + Chekov Forcing in dither panel added. Significant render improvements are possible using this option in low color renders + Match Image Size in Render Size panel sets props + DCTV 1.1 images can now be read as well as 1.0 and library generated ones 7.04: ----- + New compose operation Add as Red (from color separation) and ARexx command 'addasr' + New compose operation Add as Green (from color separation) and ARexx command 'addasg' + New compose operation Add as Blue (from color separation) and ARexx command 'addasb' + You can now select rendering as the output of the morph capability instead of only 24-bit files. Uses the current render settings - Panning in IP would confuse at the bottom edge, fixed - Changing display in IP from non-lace to lace when panned to the bottom sometimes crashed. + Auto-Activate control in Display control panel for multitasking friendly operations. If Auto-Activate is off, no window will activate and no screen will come to the front automatically. - In Morph sequence after the 'Total Frames' is decreased to less than the 'End Frame', the end frame was reset to one too high. + Special keystroke operation 'C' now saves the canvas to disk as an IFF in most areas of the program. Special keystroke 'G' still active for all gadget panels. - Special keystroke operation 'P' (show display palette) is only active when an image has just been drawn in the canvas. + File requester now when return is hit in the file name gadget. Also, pressing return in the path and extension gadgets does not blank the other fields. The next active gadget then becomes the file name gadget. 8.00: ----- + 68030 and FPU version of IM, IMFC and IP now available + Sequence Processor added for multiple image handling + Shadow generation added to all compose operations + Morph processor can now tack down image edges + Filmstrip capability added + ARexx command "finish" added for sequence processor + ARexx command "tween" added for sequence processor + Panel may now be hidden during progress bar activities (right mouse) + Caricature operation now has "effect" control as well as radius + Dome operation now has "effect" control as well as radius + Caricature ARexx macro now has extra parameter for effect (def to 100%) + Dome ARexx macro now has extra parameter for effect (def to 100%) + GIF loader taught how to deal with faulty image size info - Errors from 7.02 onwards in 256 color image generation fixed - ARexx oval and rect commands fixed 8.01: ----- - Error that caused 68000 version of 8.00 to crash instantly if the user attempted to morph fixed - A number of "enforcer hits" fixed, all harmless (byte reads from low memory) - Bug that caused 250 ms delay (1/4 second) each time a morph point was added in a 3000-class machine fixed 8.02: ----- + Balance to Color in process panel + The File I/O panel now allows render settings to be changed even when no buffer is loaded. Inappropriate gadgets are ghosted. + Render and Save as 24-bit can both be selected in multi-frame processor + Load and save main mask + ARexx commands 'loadmask [mode]' mode 1 = Replace existing mask (default) 2 = OR 3 = AND 4 = XOR 5 = MINUS ...and 'savemask ' + Load and save image mask + ARexx commands 'loadimask [mode]' mode 1 = Replace existing mask (default) 2 = OR 3 = AND 4 = XOR 5 = MINUS If the image does not already have a mask, [mode] is forced to 1 ...and 'saveimask ' + Amiga draw modes in IM improved + ARexx command 'imageaspect ' reports aspect ratio + Multi-frame processor has 'Execute Using Primary' - Cancel in multi-frame processor now resets the 'finish' status - The script in the multi-frame processor was clipping in the wrong place and clipping in this panel could disturb the actual script and path strings - Trying to run the multi-frame processor without a script is handled with a message - Dome and caricature could not handle large negative effect amounts that can be passed from ARexx - Number of frames was not being reset in display panel after a new film strip was loaded 9.00: ----- + Process panel and sub-panel reorganization + Compose panel reorganization + User can now select either the 2.0 (ASL) file requester or the Black Belt Systems file requester, as they prefer. Khalid Aldoseri's ASL replacement file requester has also been tested and now works with this software. ARexx supported. + "Zoom Clip" operation added. Provides a scaled zoom into the primary image. ARexx supported. + The font list requester can now handle fonts with names (including the point size) up to 46 characters in length + Sort directory list button in Multi-frame Processor allows you to optionally sort the list of files + Info button put back into main panel for ease of access + Color Separation button in File I/o panel moved to the second line so that all render controls would locate in the first line - Numerous small bug fixes applied. 9.01: ----- - problem when calling FR from ARexx with new requesters only 9.02: ----- - Jarvis and Stucki dither were broken - The Info gadget needed to be ghosted when IP started until the code is entered - Zoom Clip prop gadgets would drop percent by 1 on re-entry 9.03: ----- - Radial Wave ran out of precision in images higher than 400 lines 9.04: ----- + Entire image area selection made about 4 times faster - Radial Wave, Dome, and Caricature were unprotected against zero wavelengths/radius passed from ARexx - Radial wave prop gadgets got thrown back to zero after being last set at max 9.05: ----- + The multi-frame and morph sequencer can now both handle four scripts: (1) Opening before all frames. :-- (2) Pre-render after image load or morph + ops, loop | but prior to the save or render. :-- (3) Post-render after each render. (4) Closing after all frames. Any of these script names may be blank and will then be skipped. If any script exists, you MUST complete it with a 'finish'; command! The objective here is to allow you to create a "setup" script, a "do the job" script, a "clean up" script, and a "finish everything" script. We have used this to build in a complete ANIM generator... rxpi:animwr1.rexx - for the "setup" script [optional script] - for the "do the job" script rxpi:animwr3.rexx - for the "clean up" script rxpi:animwr4.rexx - for the "finish everything" script ...for any set of effects you run in the sequence processor or the morph generator. For just morphing or rendering, you won't need to use a "do the job" script. The morphed output from a sequence becomes the current buffer temporarily. The displaced current buffer and the old secondary buffer are locked until they are returned after the sequence. + The gadget panel can be displayed in lace via a default settings button (you have to set it, save defaults, and then restart) + ARexx command 'setpalette ' added + Aspect ratios default to 44 / 52 rather than 10 / 11 + Render Palette from Image now uses the A method for number of colors under 100 and B method over 100 + New Process/Special Effect - 'Render Palette for Amiga Ham' - When a non-primary buffer is being rendered, the 'Selected Area' should be automatically set to 'entire', and if 'Match Image Size' is selected then output resolution is set to the full image size - Color assignment for 16 color Hi-res just after image colors had been mostly but not radically changed, were sometimes throwing in a strange color causing renders to be noisy. - 16 color Hi-Res and 32 color Lo-Res gadgets in render mode panel were inverted text-wise - cosmetic change only for panel - Render from ARexx would not render sometimes - Morph and multi-frame sequence now appends .0001,.0002,.. to output filenames instead of "_" character + number - Clip with exact size will now remember its parent 9.06: ----- - Cancelling the multi-frame processor will replace the displaced buffers + The multi-frame processor can run without any scripts at all - When rendering from the multi-frame process the entire area is marked for rendering 9.07: ----- - Color preview not showing when the gadget panel is in lace - Define color from composition panel was not running 9.08 ---- + Post-render Script gets passed three parameters instead of two, used in the animation writer for the sequence processor and morph tools; they are: thisframe totalframes "renderfilename" NOTE: The ANIM generation tools MUST be run using 9.08 or later; they require this particular capability and will not operate properly on earlier versions of the image manipulation s/w. 9.09 ---- + VERY IMPORTANT For Image Professional Users!!! In Image Professional, the ARexx port name has been CHANGED from "IP_Port" to "IM_Port"! For all of our scripts, this should cause no problem, as they have been written (up to this date) to use either the IP_Port name or the IM_Port name. From now on, we will write ONLY for the IM_Port name. This will simplify many ARexx scripts, and will ensure that third- party scripts have fewer problems between the various versions of our image manipulation software. At this point, Imagemaster, Imagemaster F/c and Image Professional ALL have the same port name. + Many new PI Module capabilities (see PI_EXEC.DOC from the PI disk or the PIE.LZH archive for telecomm updates) + New capabilities which provide for automatic display updating on external/additional display dedvices. FC24 PI Module updated to utilize this capability. Display updating is very efficient, information on the rectangular sub-region that was changed is used to limit display refreshes. + Added ANIM writer capability (this also requires latest PI Mods) + If the morph generator is not calling any scripts, it will not redraw the main display for each frame (this saves time). + Roll image geometric process added - Palette from image operation would disturb the display. This has been fixed. - Bug where Image Professional only could not always reach the bottom scan line of an image using the area selection tools such as rectangle. Fixed. - ASKPROP ARexx command would not return values larger than four digits. Fixed. 9.10 ---- + Random dither now has luma mode; this is a VERY nice addition to the random dither effect - try it and see! + Pressing 'r' when the morph display is on will redraw the two morph windows as well as the control points + Added "Exclude Black" button to histograms... this has the effect of amplifying the histogram by removing what is often a high content, but low-information portion of the histogram data. + Select ALL button added to sequence processor + Filmstrip frames are now numbered + Added "reverse" animation button to filmstrip controls + You can now delete filmstrip frames by number + You can now insert filmstrip frames by number + You can now swap filmstrip frames by number + Filmstrip re-allocation is now non-destructive so that you may change the number of frames as a way to shorten or lengthen an existing filmstrip. - Loading images which did NOT have masks would not work properly as a brush. - Emboss positioning works better now - Clip with exact size would miss the bottom line in Imagemaster - Imagemaster palette foreground/background selection could get confused - Certain "short" windows in the control panels would show a bit of underlying data because they were too short - we've added some height so that this harmless, but unsightly artifact is gone. 9.11 ---- + The pointer is invisible when moving points in a morph + Filmstip now has speeds up to 30 + Loading and saving filmstrips has progress bar + Redraw scripts are sent a 'finish' parameter when the redraw script option is turned off or the image processor ended + The Redraw script name cannot be changed while the redraw script option is ON. + New ARexx command 'pal' which reports 0 for NTSC 1 for PAL + New ARexx command 'autoprimary ' mode = 0 new buffers do not become the primary unless there are none mode = 1 " always become primary + DCTV renders go to 566 vertically if IM is in PAL - Dual Vertical and Horizontal Warp range could divide by zero when the area is 1 pixel wide - Undo in Imagemaster now takes care of the color space so that undo-ing to an image with a different palette will no longer break during partial redraws. 9.12 ---- + Pre-defined shape area selections! Area select panel now has - 'Shape from Corner' 'Shape Centered' 'Load Shape' See EXAMPLE.ISH for an example shape file format. - Perspective scale was not correctly using the image local mask when it existed - EXTRA_HALFBRITE flag was not being set in IFF saves - Area print allowed area to be 1 pixel past image right and bottom causing the wrong area to be printed - Drawing an elipse on a <= 2x2 image would crash - Palette and range screens would draw with the wrong colors when the main display was in 16-color HI-Res - Palette and range screens would disturb main canvas color redraw color space - Hue change window overwrote the left text field - New/From Blend/From Digiview selection shows below gadgets - Message window was also too short - Buffer rename window was also too short - Paint fill operations did not clear mask second time through - New buffer did not initialize to color if there was no primary buffer - 2-way vertical blend was not using lower transparency curve correctly - Map to range went past the range in bright areas - Workaround for DCTV overscan limit of 704 under AmigaDOS 2.0 - Painting redraw in IM could redraw outside screen area - AmigaDOS file requester interface returned extension twice