home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / graphics / widget5_1 / !Widget5 / !Help < prev    next >
Text File  |  1995-11-08  |  33KB  |  829 lines

  1. Instructions for !Widget5 by Andrew Sellors
  2.  
  3. *****************************************************************************
  4. * NOTE:                                                                     *
  5. * !Widget5 is FreeWare.                                                     *
  6. * This means that you may freely copy and distribute it, provided that it   *
  7. * is complete with all original files, and that you do not sell it.         *
  8. * PD libraries may charge a nominal fee for the cost of duplication,        *
  9. * postage etc.                                                              *
  10. * In no circumstances shall the author be liable for any damage, loss of    *
  11. * profits, time or data or any indirect or consequential loss rising out of *
  12. * the use of this software or inability to use this software.               *
  13. *****************************************************************************
  14.  
  15. Contents:
  16. ~~~~~~~~~
  17.  
  18. About Widget 5
  19. Compatibility
  20. Operation
  21. Managing Filters
  22. Filter File Format
  23. Drawing Masks
  24. Configuration Window
  25. Security
  26. Setting the 3D bit
  27. Credits
  28. The Future
  29. Contacting the author
  30.  
  31. ********************************************************************************
  32.  
  33. About Widget 5:
  34. ~~~~~~~~~~~~~~~
  35.  
  36. * Widget 5 is a 256 grey level image processing package for square pixel
  37.   Sprites.
  38.  
  39. * Widget 5 will work with any size of image, memory permitting.
  40.  
  41. * Widget 5 loads any file as a 256 grey level image, disregarding any palette.
  42.   (Useful for owners of the Brainsoft video digitizer)
  43.  
  44. * Images are stored in 12 separate "Image Banks" in memory.
  45.  
  46. * Widget 5 can be run in any screen mode, but those which have 256 grey levels
  47.   in the palette will result in the best images.
  48.  
  49. * Widget 5 will store the images in a dynamic area when used with RISC OS 3.5+
  50.  
  51. * Widget 5 can load and saved squashed sprite files to reduce disc usage.
  52.  
  53. * Widget 5 supports the following image manipulation functions:
  54.  
  55.      * Add two images
  56.      * Average two images
  57.      * Mix two images
  58.      * Convolve an image to another using a NxM matrix (N,M in the range 1-9)
  59.      * Focal Analysis with the following localised processes on a
  60.        3x3, 5x5, 7x7 or 9x9 patch:
  61.                  * Mean greylevel
  62.                  * Median
  63.                  * Maximum
  64.                  * Minimum
  65.      * Changing image greylevels by:
  66.                  * Drawing the mapping function using the mouse
  67.                  * Applying a threshold value
  68.                  * Applying a gamma correction value
  69.                  * Applying histogram equalization
  70.                  * Applying S.L.C.E. (Saturating Linear Contrast Enhancement)
  71.      * Scaling an image by resampling using bi-linear interpolation
  72.      * False colouring selected greylevel ranges and calculating the percentage
  73.        of each range.
  74.      * Levels slice by false colouring equally spaced sections of the total
  75.        grey level range to a defined number of sections and calculating the
  76.        percentages of pixels contained in each of the ranges.
  77.  
  78. * Widget 5 allows an irregularly shaped area mask to be defined to allow
  79.   localised processing.
  80.  
  81. * Area masks can be loaded and saved as text files of point coordinates.
  82.  
  83. * Widget 5 allows the image to be zoomed using the usual magnifier window
  84.  
  85. * Widget 5 can draw the following graphs from an image:
  86.  
  87.      * Greylevel histogram
  88.      * Cumulative histogram
  89.  
  90. * Individual bar heights can be inspected on the graphs.
  91.  
  92. * Graph data can be saved as a CSV file to allow importation into another
  93.   package for analysis.
  94.  
  95. * Widget 5 allows Convolution Filters to be loaded and saved.
  96.  
  97. * Widget 5 uses the 3D bit in CMOS RAM to select 2D or 3D windows _and_
  98.   iconsprites on startup. (See the "Setting the 3D bit" section if you don't
  99.   like 2D windows)
  100.  
  101. ********************************************************************************
  102.  
  103. Compatibility:
  104. ~~~~~~~~~~~~~~
  105.  
  106. This program is for RISC OS 3.10 or later.
  107. It has been tested on both RISC OS 3.10 and RISC OS 3.50.
  108.  
  109. ********************************************************************************
  110.  
  111. Operation:
  112. ~~~~~~~~~~
  113.  
  114. NOTE: Clicking on an action icon with Adjust performs the action but leaves the
  115.       window open
  116.  
  117.       If a window contains icons where text can be entered in then pressing the
  118.       RETURN key when in the last icon has the affect of selecting the default
  119.       action button (the one with the yellow border if 3D windows are used).
  120.  
  121. About Image Banks
  122. =================
  123.  
  124. When held in memory, an image is assigned an Image Bank number so that it can be
  125. referenced to for subsequent operations. This is shown on the title of the
  126. image window and also on the menu displayed when the menu button on the mouse
  127. is pressed over an image.
  128.  
  129. Operations chosen from the menu on the image window always use that Image Bank
  130. for the source image.
  131.  
  132. When an image window is closed, the image is discarded from memory and the Image
  133. Bank becomes free.
  134.  
  135. Starting up
  136. ===========
  137.  
  138. The !Widget5 application starts up when you double-click on its filer icon.
  139.  
  140. Creating a blank image
  141. ======================
  142.  
  143. Clicking on the icon bar icon displays the create image window.
  144.  
  145. The size of the image can be changed by typing or using the arrow icons.
  146.  
  147. The radio icons determine which image bank the image is created in.
  148.  
  149. Used image banks icons are greyed out.
  150.  
  151. Loading a file
  152. ==============
  153.  
  154. When a sprite file is dragged to the icon it is loaded into memory and the
  155. place image window is displayed.
  156.  
  157. This allows the image to be placed into one of the Image Banks.
  158.  
  159. Unavailable banks are greyed out, if they are all greyed out then free one of
  160. the banks by closing the window, but remember to save the image first if you
  161. want to keep it!
  162.  
  163. More that one image can be loaded without being placed in a bank, and an image
  164. can be loaded (but not placed) when all the image banks are used.
  165.  
  166. Loading squashed sprites
  167. ========================
  168.  
  169. Squashed sprite files can also be loaded into Widget 5 in the same way as normal
  170. sprite files. These are the same as the files saved by the !Squash application
  171. that comes with the machine and save disc space by storing the data in a
  172. compressed form.
  173.  
  174. Only Squashed sprite files can be loaded, an attempt to load a file which does
  175. not contain a squashed sprite will return an error message.
  176.  
  177. Image menu
  178. ==========
  179.  
  180. Pressing the menu button over one of the Image Banks displays the menu for that
  181. bank. The Image Bank number is repeated on the menu title.
  182.  
  183. The "Info" subwindow shows the size and memory usage of the Image Bank, total
  184. number of used greylevels in the image and the overall greylevel range.
  185.  
  186. The "Save" submenu allows the image to be saved as a 256 grey level sprite.
  187. The name of the sprite in the file it set to the same as the filename (up to
  188. a maximum of 12 characters).
  189. Selecting the "Save squashed" option will result in the sprite being saved as
  190. a squashed sprite and so saving disc space.
  191.  
  192. The "Process" submenu allows one of the image processing operations to be
  193. selected. These operation will use the Image Bank as source that the menu was
  194. open over.
  195.  
  196. The "Graph" submenu allows graphs to be generated for that particular image.
  197.  
  198. The "Zoom" subwindow allows the size of the image to be changed on screen.
  199. Clicking on the "Zoom" entry itself displays the zoom window statically.
  200. The image that the zoom window refers to is displayed in its title and the
  201. zoom window is always kept above that image window.
  202.  
  203. The "Add mask" option adds a mask to that image bank and displays the mask
  204. tools window. If the image bank already has a mask then the option is greyed
  205. out.
  206.  
  207. Using Masks
  208. ===========
  209.  
  210. Many process windows have "Use Source Mask" and "Copy Outside" options. These
  211. options control how the mask defined on the source image is used by the process.
  212. If the source image does not have a mask defined then these options are greyed
  213. out. 
  214.  
  215. The "Use Source Mask" option when selected makes the process only apply to
  216. pixels within the mask area on the source image rather than on the whole image.
  217.  
  218. The "Copy Outside" option, when used in conjunction with the "Use Source Mask"
  219. option results in the pixels around the masked area to be copied unchanged from
  220. the source image. With this option off, the pixels around the mask area in the
  221. destination image are left unchanged.
  222.  
  223. Pixel Display
  224. =============
  225.  
  226. Clicking with the Adjust (right hand) mouse button over the image window
  227. displays the pixel display window which shows the X and Y coordinate of the
  228. pixel under the pointer and also the greylevel and a display of the intensity.
  229. The window remains whilst the button is held down and is updated as the mouse
  230. is moved around the image.
  231.  
  232. Processes
  233. =========
  234.  
  235. Copy:
  236. -----
  237.   This copies the image to another bank.
  238.  
  239. Add:
  240. ----
  241.   This adds the grey levels in the source bank to those in the destination bank.
  242.  
  243. Average:
  244. --------
  245.   This adds the grey levels in the source bank to those in the destination bank
  246.   and then divides by 2.
  247.  
  248. Mix:
  249. ----
  250.   This mixed the image in the source bank with another to produce a third which
  251.   can be placed in the same bank as the second source image.
  252.  
  253.   Clicking on "Start" on the source and destination selection window replaces it
  254.   with a second window containing a horizontal slider. This slider allows the
  255.   proportions of each image (shown below each end of the slider) to be changed
  256.   by dragging the sliderbar.
  257.  
  258.   Normally the resulting image is only created when the "Mix" icon is clicked on
  259.   , but if the destination Image Bank is different from both the source Image
  260.   Banks then the "Real-time" option can be selected. This updates the resulting
  261.   image when the mouse is released from the slider allowing different values to
  262.   be tried out easily.
  263.   
  264. Convolution:
  265. ------------
  266.   This performs a NxM convolution, where N and M can be any value between 1 and
  267.   9, using the matrix and anchor point selected. The values of the matrix and
  268.   anchor point can be entered by typing numbers into the icons or selecting
  269.   pre-defined filters from the pop-up menu.
  270.  
  271.   The matrix size can be selected by clicking on the up and down arrows by the
  272.   numbers indicating the current size or by clicking on one of the size buttons,
  273.   eg. "3x3". The menu of pre-defined filters only shows the filters for the
  274.   selected matrix size.
  275.  
  276.   The matrix size and anchor point values are shown as "ROWS X COLUMNS".
  277.   For the anchor point, 0,0 is the centre of the matrix with positive
  278.   coordinates in the right hand and upward direction.
  279.  
  280.   When changing the size of the matrix, if the caret is in the matrix it is
  281.   always returned to the centre (0,0) of the matrix.
  282.  
  283.   The matrix is overlayed on the source pixel (positioned under the anchor
  284.   point) and the overlapping values multiplied and summed together. 
  285.  
  286.   As the resultant value for each pixel after the convolution is normally scaled
  287.   in some way, the "Scale" value is provided to scale the value back to the
  288.   0 to 255 range of greylevels. This value is used to divide the result before
  289.   it is written into the destination image. Clicking on the "Auto" button
  290.   calculates the gain of the matrix and places it in the scale value. This value
  291.   will on average return the result back into the desired range.
  292.  
  293.   The "Offset" value is provided to shift the grey levels up or down before
  294.   they are written. If the gain of the matrix is zero then it removes the
  295.   D.C. component resulting in negative as well as positive results. A positive
  296.   offset of 128 for example will ensure that the negative results are shifted
  297.   up and not lost.
  298.  
  299.   Clicking on the "Clear" button sets all the values in the matrix and anchor
  300.   point icons to zero.
  301.  
  302.   Clicking on the "Save" button displays the "Save Convolution Filter As"
  303.   dialogue. This allows the values of the filter matrix and anchor point to be
  304.   saved to a file for later use or added to the list of filters in memory.
  305.   See the section titled "Managing Filters" further on in this manual for more
  306.   details.
  307.  
  308. Focal Analysis:
  309. ---------------
  310.   This performs various localised processes on the image.
  311.   The size of the patch of the image around each source pixel taken for the
  312.   process is selected in a similar way to the convolution matrix size with the
  313.   row of size buttons.
  314.  
  315.   An anchor point, also like in the convolution process, is provided to offset
  316.   the patch from the destination pixel position when it is placed over the
  317.   source image.
  318.  
  319.   These processes take the pixels contained by the patch in the source image
  320.   and process them to produce the value that is placed in the destination
  321.   image.
  322.  
  323.   Mean:
  324.   =====
  325.  
  326.   The mean (average) value of the set of source pixels in the patch is
  327.   calculated and if the difference between that and the original source pixel
  328.   is less than the threshold set in the submenu then this value is written to
  329.   the destination image. If the difference is greater than the threshold then
  330.   the original greylevel from the source pixel is used for the destination.
  331.   The threshold is provided to lessen the blurring on edges where a large
  332.   transition between grey level values occurs.
  333.  
  334.   L.A.C.E.:
  335.   =========
  336.  
  337.   Not implemented yet :-(
  338.  
  339.   Median:
  340.   =======
  341.  
  342.   The set of source pixels in the patch are sorted into numerical order and
  343.   the median (middle) value is selected for the destination pixel.
  344.  
  345.   This is a smoothing process which is particularly suited to removing scratches
  346.   from images.
  347.  
  348.   Maximum:
  349.   ========
  350.  
  351.   The maximum greylevel in the source patch is selected and used for the
  352.   destination pixel value.
  353.  
  354.   Minimum:
  355.   ========
  356.  
  357.   The minimum greylevel in the source patch is selected and used for the
  358.   destination pixel value.
  359.  
  360. Percentage Cover:
  361. -----------------
  362.   This allows ranges of greylevels to be selected and false coloured in the
  363.   image. Beside the image window is displayed another window showing the colours
  364.   and greylevel ranges selected as well as the percentage of the whole image
  365.   containing pixels in each of the ranges.
  366.  
  367.   Colours are selected by turning on the option button beside the relevant
  368.   colour box. This ungreys out the two writable icons into which the range of
  369.   greylevels for that colour is typed.
  370.  
  371.   Clicking on "Colour" false colours the current image with the parameters
  372.   selected.
  373.  
  374.   If "Copy to new image" is selected then the current image is copied to the
  375.   "New Image" image bank before being false coloured.
  376.  
  377.   Closing the window attached to the image bank window that shows the
  378.   percentages causes the image colours to revert back to the normal greyscale.
  379.  
  380.   The colours are preserved in the file when the false coloured image is saved
  381.   as a Sprite. As Widget 5 ignores any palette when loading an image, reloading
  382.   this image will result in the colours changing back to the original greyscale
  383.   but if the image is loaded into !Paint for example then the colours can be
  384.   seen.
  385.  
  386. Levels Slice:
  387. -------------
  388.   This splits the full range of used greylevels into a selected number of
  389.   equally spaced sections. These ranges of greylevels are false coloured and
  390.   have their percentages of pixels in each of the ranges calculated like the
  391.   percentage cover process.
  392.  
  393.   Clicking on "Colour" false colours the current image using the number of
  394.   levels selected.
  395.  
  396.   If "Copy to new image" is selected then the current image is copied to the
  397.   "New Image" image bank before being false coloured.
  398.  
  399.   Closing the window attached to the image bank window that shows the
  400.   percentages causes the image colours to revert back to the normal greyscale.
  401.  
  402. Greylevel Edit:
  403. ---------------
  404.   This allows the greylevels in the source bank to be mapped to different ones
  405.   and the resulting image placed in another bank.
  406.  
  407.   Clicking on "Start" on the source and destination selection window replaces it
  408.   with a second window that performs the actual functions.
  409.  
  410.   The large box shows the mapping function that maps the greylevels in the
  411.   source image (along the bottom of the box) to the resulting image (up the
  412.   side of the box). "0" is completely black and "255" is completely white.
  413.  
  414.   The mapping function can be changed by clicking in the box and drawing the
  415.   line for the new mapping function. When you hold the button down, the
  416.   greylevels in the source and destination images for the current point in the
  417.   box are displayed.
  418.  
  419.   Levels of smoothing can be applied when drawing the mapping function.
  420.     If "Normal Draw" is selected, then only the point in the line where the
  421.     mouse pointer is positioned is affected.
  422.     If either "Smooth Draw" or "V. Smooth Draw" is selected then the points
  423.     near the mouse pointer are also affected, the latter of which producing a
  424.     greater affect. This allows less jagged lines to be drawn.
  425.  
  426.   Various mapping functions can also be selected from the "Processes" menu
  427.   displayed by pressing the "Menu" mouse button when over the window.
  428.     "Linear" produces a resulting image identical to the source.
  429.     "Invert" produces a negative of the source image.
  430.     "Threshold" makes all the levels below the value black and above white.
  431.     "Gamma" applies gamma correction using the value entered in the submenu.
  432.     "Histogram" applies histogram equalization on the source to give the
  433.        maximum possible contrast.
  434.     "S.L.C.E." applies Saturating Linear Contrast Enhancement on the source to
  435.        enhance the contrast in the image. This looks much better than histogram
  436.        equalization as the resulting image is less harsh.
  437.  
  438.   Selecting "Real-time" results in the destination image being updated after
  439.   every operation instead of just when "Map" is selected. The image is updated
  440.   when the mouse button is released after drawing on the mapping function and
  441.   when any of the processes have been selected.
  442.  
  443.   The arrow buttons on the submenus for the Threshold and Gamma processes can
  444.   be used to adjust the values. If the SHIFT key is pressed when the arrows are
  445.   clicked upon makes the values change faster. If the "Real Time" option is
  446.   selected then the image is updated as the values change.
  447.  
  448. Scale:
  449. ------
  450.   This allows the source image to be scaled by resampling using bi-linear
  451.   interpolation. When an image is enlarged using this process the "blockiness"
  452.   , caused by the pixels being enlarged, is reduced.
  453.   The new size can be selected from either a percentage of the original size,
  454.   "To Fit" a resolution which can be typed in the two icons or to "Custom"
  455.   x and y scaling ratios.
  456.  
  457. Graphs
  458. ======
  459.  
  460. The "Greylevel Histogram" graph shows the number of pixels using each
  461. greylevel in the source image.
  462.  
  463. The "Cumulative Histogram" graph shows the total population of pixels in the
  464. source image at and below the grey level shown on the x axis. Thus if the
  465. greylevels are linearly allocated (ie. there is an equal number of pixels
  466. having each greylevel) then the graph is a straight line between the bottom
  467. left and top right.
  468.  
  469. The greylevel and height of the currently selected bar is shown on the bottom
  470. of the graph. The selected bar is shown in blue instead of the normal red.
  471.  
  472. Clicking on a part of the graph updates the greylevel and bar height display
  473. to the bar under the pointer.
  474.  
  475. The up and down arrows can be used to move the currently selected bar and
  476. pressing the SHIFT key when clicking on the up or down arrow makes the
  477. greylevel move faster.
  478.  
  479. Pressing the menu mouse button over the graph displays a menu that allows the
  480. graph data to be saved as a CSV (Comma Separated Variables) file and the size
  481. of the graph to be changed.
  482.  
  483. ********************************************************************************
  484.  
  485. Managing Filters:
  486. ~~~~~~~~~~~~~~~~~
  487.  
  488. Widget 5 holds a set of convolution filters in memory that can be accessed by
  489. the pre-defined filter menu in the Convolution Process window. The filters
  490. are referenced by size (ie. the number of rows and columns in the matrix) and
  491. filter name. The filter menu only shows the filters for the selected matrix
  492. size, or "None Found" if none are defined for that particular size.
  493.  
  494. When Widget 5 starts up it scans all the files in the default filters directory
  495. and loads up the filters that are present in the files to be shown in the menu.
  496. The location of this directory, which is by default, !Widget5.Filters, is setup
  497. with the system variable "<Widget5Filters$Dir>" in !Widget5.!Run. To add filters
  498. so that they are loaded on startup, simply place the files in the Filters
  499. directory (the !Widget5 application directory can be opened by double clicking
  500. on the filter icon with the SHIFT key pressed). If you want to place the
  501. directory somewhere else then just edit the !Widget5.!Run file with a text
  502. editor such as !Edit.
  503.  
  504. By dragging a filter file to the Convolution Process window the first filter in
  505. the file is used to set the values of the matrix and anchor point. This allows
  506. a library of filters to be built up and selected easily.
  507.  
  508. By dragging a filter file to the Widget 5 iconbar icon, all the filters in the
  509. file are loaded up into memory to appear on the filter menu.
  510.  
  511. When the "Save" button in the Convolution Process window is clicked on, a copy
  512. of the filter matrix and anchor point coordinate is taken and the
  513. "Save Convolution Filter As" dialogue is displayed.
  514.  
  515. The name with which the filter appears in the menu and is reference by must be
  516. entered in the "Filter Name" icon.
  517.  
  518. This window allows the convolution filter to be saved to a filter file by either
  519. dragging the filter file icon to a filter window or by typing in the full
  520. pathname for the file and clicking on "Save". As this overwrites a file if it
  521. is already present, Widget 5 prompts for conformation if a file will be
  522. overwritten.
  523.  
  524. If "Add To Current" is selected then the filter is added to the end of a filter
  525. file already on disc rather than replacing it. This way, more than one filter
  526. can be added to a particular file.
  527.  
  528. If "Add To Memory" is clicked on then the filter is added to the list of filters
  529. stored in memory and so will appear in the filter menu. This does not mean,
  530. however, that the filter will be present the next time Widget 5 is loaded.
  531.  
  532. If "Save To Default" is clicked on then the filter is added to the default
  533. filter file. This is a file in the default filters directory that holds the
  534. default filters. Thus by clicking on this button, the filter will be loaded next
  535. time Widget 5 starts. The filename of this file is also setup in the
  536. !Widget5.!Run file with the system variable "<Widget5$FilterDefault>". The
  537. default is !Widget5.Filter.Default.
  538.  
  539. As the filters are referenced by size and name, two filters with the same matrix
  540. size and name cannot be present in memory at the same time. For this reason,
  541. an attempt to do this by either loading a filter file or adding a filter to
  542. memory using the "Save Convolution Filter As" window will result in an error
  543. message being displayed showing the name and size (and the filename of the file
  544. holding the file where applicable) of the duplicate. For this reason an error
  545. is also displayed if an attempt is made to add a duplicate filter to a filter
  546. file.
  547.  
  548. ********************************************************************************
  549.  
  550. Filter File Format:
  551. ~~~~~~~~~~~~~~~~~~~
  552.  
  553. Convolution filters are stored in text files so that they can be easily edited
  554. and created manually.
  555.  
  556. A filter definition in the file consists of a block of lines without any blank
  557. lines between the lines for a particular filter. Blank lines are allowed between
  558. different filters.
  559.  
  560. Numbers in a line are separated by commas (,).
  561.  
  562. Leading spaces, and spaces between the numbers and the separating commas are
  563. ignored.
  564.  
  565. The first line of the block contains the name of the filter.
  566.  
  567. The second line contains the size of the filter as "rows,columns".
  568.  
  569. The third line contains the anchor point coordinates in the form "row,column".
  570.  
  571. The subsequent lines contain the matrix values, one line for each row in the
  572. matrix.
  573.  
  574. eg.
  575.  
  576. Smooth
  577. 0,0
  578. 3,3
  579. 0,1,0
  580. 1,1,1
  581. 0,1,0
  582.  
  583. Defines a 3x3 matrix called "Smooth" with an anchor point of 0,0 and a matrix,
  584. [ 0  1  0 ]
  585. [ 1  1  1 ]
  586. [ 0  1  0 ] 
  587.  
  588. ********************************************************************************
  589.  
  590. Drawing Masks:
  591. ~~~~~~~~~~~~~~
  592.  
  593. When a mask has been added to an image bank, the mask tools window is displayed,
  594. giving access to tools that allow the shape and position of the mask to be
  595. defined and the points saved as a text file for later use.
  596.  
  597. Dragging a text file containing a list of points to the mask tools window, loads
  598. the points in as a new mask shape.
  599.  
  600. The mask outline is shown as a red line over the image. The points on this shape
  601. are marked by either green squares or yellow triangles to indicate selected
  602. points.
  603.  
  604. Add Point tool
  605. The first tool button on the left allows points to be added to the mask shape
  606. by clicking on the image with Select at the required position and is added on
  607. the shape between the two selected points. The currently selected points can
  608. be changed by clicking on the green squares.
  609.  
  610. Move Point tool
  611. The next button allows points to be moved. This can be done by either dragging
  612. a point with the mouse to the required position or by using the arrow buttons
  613. on the tool window to move the selected point one pixel at a time. The
  614. coordinates of the selected point are shown in the tool bar together with the
  615. greylevel of the pixel under the point. These values are updated as the point
  616. is dragged or moved using the arrows. If the SHIFT key is pressed at the same
  617. time as the arrow icons then the point moves faster.
  618.  
  619. Delete Point tool
  620. The next button allows points to be deleted from the mask shape by clicking on
  621. the relevant green squares to remove that point. Points can no be deleted
  622. when only two are left otherwise there is no shape!
  623.  
  624. Filled Shape tool
  625. The next button causes the area inside the mask shape to be filled in yellow.
  626. This allows the shape of the masked area to be seen clearly.
  627.  
  628. Memory Display
  629. Next along the line at the bottom is the amount of memory that the mask uses.
  630. This memory is freed when the mask is discarded.
  631.  
  632. Copy Mask
  633. To the right of the memory display is a pop-up menu button that allows the
  634. shapes of masks present on other image banks to be copied over. If no other
  635. images have masks then the menu says "No masks".
  636.  
  637. Save Mask
  638. The next button displays a save box allowing the mask points to be saved as a
  639. text file. This allows masks to be stored and used later by dragging them from
  640. the Filer window to the mask tools window.
  641.  
  642. Discard Mask
  643. The last button removes the mask from the image bank and frees the memory that
  644. it takes. Don't use this if you still want to use the shape as once it is gone,
  645. it cannot be retrieved unless it was saved as a text file.
  646.  
  647. ********************************************************************************
  648.  
  649. Toolbar:
  650. ~~~~~~~~
  651. Most of these icons are self explanatory (or at least I hope so :-)
  652. A point worth noting, however is that the histogram button performs two
  653. actions, the a Select mouse click displays the Greylevel Histogram and an Adjust
  654. click the Cumulative Histogram.
  655.  
  656. ********************************************************************************
  657.  
  658. Configuration Window:
  659. ~~~~~~~~~~~~~~~~~~~~~~
  660.  
  661. The configuration window can be opened by selecting the "Configure..." entry
  662. from the iconbar menu. The window allows program-wide options to be setup
  663. and the configuration saved so that it is used when the program is next loaded.
  664.  
  665. "Process Destination"
  666. =====================
  667.  
  668. This affect the way the destination banks are picked for the processes.
  669.  
  670. "Only use free banks" only allows you to pick banks that are unused for the
  671. destination image.
  672.  
  673. "Use free or same size banks" allows you to pick banks that are either free
  674. or contain an image that is the same size as the source.
  675.  
  676. "Graph Size"
  677. ============
  678.  
  679. This determines the size of the graphs that are drawn. The large size is ideal
  680. for 17" monitors.
  681.  
  682. "Draw action"
  683. =============
  684.  
  685. These determine the default selection of the draw action options in the
  686. greylevel edit process window when it is displayed.
  687.  
  688. "Update"
  689. ========
  690.  
  691. This determines the default selection of the "Real-time" option when the
  692. process windows that use it are displayed.
  693.  
  694. "Image Memory"
  695. ==============
  696.  
  697. This determines whether the images will be stored in a dynamic area or in the
  698. application's normal wimpslot. The location can only be changed when no images
  699. are present in memory and dynamic areas can only be selected on machines that
  700. support it.
  701.  
  702. "Image Titles"
  703. ==============
  704.  
  705. Turning "Show process name" on will place the name of the process and source
  706. image bank(s) onto the title of an image window created by a process.
  707.  
  708. "Squash Sprites"
  709. ================
  710.  
  711. Turning "Save squashed" on selects the option of saving the sprite files as
  712. squashed files by default when the save dialogue is displayed.
  713.  
  714. "IO buffer size" is the amount of memory claimed when loading or saving a
  715. squashed file to be used to buffer the reads and writes to and from the disc.
  716. A value of 0 is not allowed in this field.
  717. A small value slows down compression/decompression.
  718.  
  719. "Double Click Loads"
  720. ====================
  721.  
  722. These options select which files Widget 5 will load when their icon is double
  723. clicked upon in the filer window.
  724.  
  725. When selected that particular file will be loaded on double click unless another
  726. program that loads it has been loaded previous to Widget 5 (like !Paint for
  727. sprites) and is shown to the right of Widget 5's icon on the icon bar.
  728.  
  729.  
  730. Clicking on "Change" applies the changes made and closes the window.
  731.  
  732. Clicking on "Cancel" forgets the changes made and closes the window.
  733.  
  734. Clicking on "Save" applies the changes made and saves the new configuration so
  735. that it is used the next time the program is loaded.
  736.  
  737. "Toolbar"
  738. =========
  739.  
  740. The "Show" options selects whether the toolbar is present on the side of the
  741. image bank windows. If you don't like toolbars then you can turn it off.
  742.  
  743. ********************************************************************************
  744.  
  745. Security:
  746. ~~~~~~~~~
  747.  
  748. If anything should go wrong with Widget5 and the program has to exit due to an
  749. unrecoverable internal error, the option is provided of saving any loaded images
  750. before the program quits.
  751. Clicking on 'OK' when the error message is displayed saves the images by the
  752. image bank number in a directory 'Widget5' in the Scrap Directory (in the
  753. !Scrap application).
  754.  
  755. ********************************************************************************
  756.  
  757. Setting the 3D bit:
  758. ~~~~~~~~~~~~~~~~~~~
  759.  
  760. If you want to use the 3D windows in this program (and the handful of others
  761. that support it) then you need to set the 3D bit in the CMOS RAM.
  762.  
  763. !Configure in RISC OS 3.5 allows you to change this, it is the called "2D window
  764. tools" in the "Window manager" window and should be off to have 3D windows
  765. (which is where it normally is).
  766.  
  767. In RISC OS 3.1 the only way to do this is to:
  768.  
  769.    Cut out the following BASIC program and run it.
  770.    Note: this program toggles the bit, so if its off and you run it twice then
  771.          it is still off!
  772.  
  773.     10REM Toggle state of '3D look' bit in CMOS
  774.     20REM Read byte
  775.     30SYS "OS_Byte",161,140 TO ,,byte%
  776.     40REM EOR byte with mask for bit 0
  777.     50byte% = byte% EOR 1
  778.     60REM Write byte back again
  779.     70SYS "OS_Byte",162,140,byte%
  780.     80END
  781.  
  782. ********************************************************************************
  783.  
  784. Credits:
  785. ~~~~~~~~
  786.  
  787. Many thanks must go to Jeremy Cook whose suggestions, encouragement and toolbar
  788. sprites have made Widget 5 what it is today.
  789.  
  790. ********************************************************************************
  791.  
  792. The Future:
  793. ~~~~~~~~~~~
  794.  
  795. Widget 5 is not finished! Many improvements are planned although they won't be
  796. implemented for a while which is why this release has been made.
  797.  
  798. To wet your appetites, here is a selection from my "To Do" list:
  799.  
  800. Configurable toolbar.
  801. Proper Dynamic Area memory management.
  802. Better mask control. (process inside or outside mask shape)
  803. L.A.C.E. on Focal Analysis process.
  804. Algebra process with +-/etc.
  805. Transformation process with rotation, mirroring, transformation etc.
  806. Statistics info window with s.d, mean, mode, etc.
  807. Optimised ARM coded processing routines (at the moment they are just ordinary C)
  808.  
  809. Any suggestions will be gladly accepted, as without suggestions it cannot get
  810. better.
  811.  
  812. ********************************************************************************
  813.  
  814. Contacting the author:
  815. ~~~~~~~~~~~~~~~~~~~~~~
  816.  
  817. I, Andrew Sellors, can be contacted either at
  818.    57 Boundaries Road
  819.    Feltham
  820.    Middlesex
  821.    TW13 5DR
  822.    England
  823.  
  824. Or via Internet email at
  825.    asellors@orac2.demon.co.uk
  826.  
  827. Any feedback from users (bugs reports, requests for new features, praise,
  828. money etc.) is gladly received.
  829.