═══ 1. General Help ═══ JoeView is an attempt at an image viewer for a variety of image formats. Help is available at almost any time. I have implemented some unusual ways of viewing images. It is probably worth your while to look through the section on Viewing Strategies at this time. ═══ 2. Main Menu ═══ The main menu system is accessed by double clicking the left mouse button or by using the system menu. You probably figured this out by now. ═══ 2.1. Misc. ═══ This menu command leads to three possible submenus. Quit command will close JoeView, if you couldn't figure that out, try typing "del \*.*" sometime. Toggle Title Bar will turn on and off the main title bar. Note that you can NOT MINIMIZE JoeView when the Title Bar is off. Save Window Positions will store the current window locations of JoeView. This includes the File Open Dialog and the Information Dialog. ═══ 2.2. Files ═══ This menu command does nothing by itself except bring up a second pull down menu which has commands generally relating to file stuff. Slide Show. Open a file. Save a file, etc. The actual commands are: o Open o Save o SlideShow o Print ═══ 2.2.1. Open File Dialog ═══ This dialog is one of the better features of JoeView and I am especially proud of it. The dialog runs independently of the main window. You can select a new file at any time unless JoeView prevents it, and generally you will only be prevented from opening a file if JoeView is already trying to open a file or you are running SlideShow. Note: The JPEG libraries use global variables that can interfere with each other if trying to read and write JPEG style files at the same time. If you begin saving a file in the JPEG format and immediately try and read a JPEG format file, JoeView will hold the read operation (and promote the priority of the write operation) until the write is finished. This should be fairly transparent to you. File Mask Typically you would just enter "*.*" or "*.bmp" here. You can also use "*.bmp;*.gif" to select multiple file extensions. If you want you could also type in the name of a file or the full name ala "c:\file\my.bmp". Further, you can change to a new directory fairly quickly by using "c:\files\go_here\*.*" - This would change to the approprate drive and directory and also set the File Mask to "*.*". A file can be selected by typing in the file name in the File Mask entry field or by double clicking on the files list box. Directories are changed by double clicking in the directory listbox. Drives are changed using the pull down listbox. The file mask entry field is where, in addition to simply typing a file name, you may enter wild cards, like *.gif or multiple wild cards separated by a ";" or "," for example "*.gif;*.bmp;*.tga" (no spaces)! A list of only those files that match the mask will be shown in the files list box. Files can be shown in either alphabetical or dated format by selecting the appropriate button. Confirm on delete does what it says. If you try and delete a file , it will prompt you first. Turn it off and delete will just kill the file when you hit the Delete button. BEWARE!!! The file deleted is the file shown in the current file area (at the upper left side of the dialog) not necessarily the file currently being viewed. If you only single click on a file in the files list box it will be selected as the current file even though you are not looking at it yet. Why does this feature exist? Often a series of images are less than desirable to me, so the ability to cream'em all at once is useful. Just leave the Confirm on Delete attribute on if your not sure, you will always be prompted. Browse Mode keeps the dialog open when not in use. This is useful if you are going to look at a variety of files and don't want to keep opening the dialog each time. There is a memory penalty for doing so which is proportional to the size of the directory being viewed. When Browse Mode is active hitting Cancel will do no more than bring the image window forward, you must turn off Browse Mode to get rid of the File Open Dialog or you can simply use the minimize button to get it out of the way. Low Priority Open will cause the selected file to be read in at low priority, giving other processes more the CPU. There are two buttons on the lower left side of the dialog box labeled N and P. These buttons will cause the file either next or previous relative to the currently highlighted file to be opened. Both will cycle to either the beginning or end of the list when going off the end. They have accelerator keys associated with them. One last item is the Quick Dir listbox. Go back on click on Quick Dir for the description. ═══ 2.2.2. Saving an Image ═══ The File Save dialog is pretty simple but deserves some explanation. The Quick Dir listbox needs some detailed explanation that can be accessed by clicking on Quick Dir. Drive, directory, and files are listings or displays of what is currently available. You can enter any valid directory/path combo in the Save as: entry box. The file listing is for information purposes mostly, but if you do click on the file it will become the entry in the Save as: box. If you double click on a file listbox entry, that will an indication that you want to save the current image into that file. CAUTION: Be sure to indicate a file type before you double click on a file. When you select a file type, that appropriate extension is added to or changed for the text in the Save as: entry field. File types available are: o GIF o JPEG o OS2 BMP o Windoze BMP o PBM (raw and ASCII) o X11 BMP o Sun Raster o TARGA All are pretty self explanatory, but it should be noted that for Windows and OS2 bitmaps only non RLE formats are written. RLE formats can be read however. There are two options located at the bottom of the dialog. Save at displayed size will write the image at whatever resolution the image is currently being displayed with. This is contrasted with the resolution that the image is stored in memory as. See Viewing Strategies for details. The second option is to save at low priority. Since JoeView is multithreaded you can save a file and while it is being written to disk go ahead and start loading a different image. Low priority will write the current file a little slower (in theory anyway) so that you (or other processes) can use the CPU to do more important things, like loading/looking at another image. Only one image can be saved at a time. The menu command to save an image will be inaccessible until JoeView has finished saving the current file. ═══ 2.2.3. Slide Show ═══ Slide Show is used to display a series of images, either a new image is displayed after a certain amount of time or after a certain signal is given ( manual mode). The Drive listbox changes the current drive. Quick Dir is explained elsewhere. Directory is a listbox of the current directory. Selecting an item in this listbox will cause a change to that directory. Note: Selecting the current directory will deselect all the files highlighted in the Files listbox. The basic idea is to select a file that you want included in the display. You can select a specific file by clicking on it in the File list box. You may select multiple files at one time. A file is selected when it is highlighted. Note: If you double click on a file, it is immediately selected into the Selected Files listbox. If you have mistakenly highlighted a file, clicking on it again will de- highlight it. In addition to going after individual files in the Files listbox, you may use any or all of the four buttons located above it. *.gif will highlight all files that have the .gif extension. Similar for *.jpg while *.* selects everything. The Mask-> button will take whatever you have entered in the listbox to its right and use it for finding files. You DO NOT use wild card symbols here (*, ?). Example: Using .gif as the mask would highlight all files that have .gif in them. This would include JoeView.gif myfile.old.gif 1.gif.jpg Using t as the mask would select any file with a t in it. Once you have highlighted a file, hitting the Add-> button will select it into the Selected Files listbox. The files listed there are the ones that will be used in the actual slide show. If you have decided that you don't want to include a file that is listed in the Selected Files listbox, highlight it and use the <-Remove button to eliminate it. Note: You can select multiple copies of the same file into the Selected Files listbox. The Start button will begin the slide show. There are two additional buttons, Save and Load. These are for storing and retrieving a SlideShow file selection. All that is saved is the file name, no other options are stored. The default extension for the file created is ".sls" but any file name can be used. When loading a file, all entries are placed into the selected listbox, including any that are already there. You can also start a Slide Show by selecting a Slide Show file from the File Open Dialog or by dragging and dropping such a file onto the JoeView icon. There are three options that can be selected without using the Options button. They are: Timed vs Manual, and Loop. All three can be modified from the dialog brought up by using the Options button. The Options button brings up a more complete set of options than those displayed here. See SlideShow Options. Be aware that you can modify your selected options even when SlideShow is running by selecting Options off the Main Menu. Once SlideShow begins, two additional options will appear on the Main Menu that exist only when you are running SlideShow. One is Pause SlideShow and the other is Stop SlideShow. Pause will temporarily halt the slide show, thus freeing the CPU for other things. Once selected, this command will change to Restart SlideShow. Note: When JoeView is minimized the SlideShow will pause after the next image has been read in. Stop SlideShow will stop the slide show. The slide show will not stop in the middle of reading a file, so if a file is currently being loaded, JoeView will complete the load before ending the slide show. Manual Mode: The next image is displayed when you double click with the right mouse button on the current image or hit the N key. Note: You can skip ahead to the next image in Timed mode by double clicking with the right mouse button or hitting the N key. ═══ 2.2.3.1. SlideShow Options ═══ You can specify the time interval between images being displayed. This field is ignored if you select manual mode. The actual time interval is calculated from the time the most recent image is displayed until the next image will start to be read. Because of time it take to read an image, the actual interval between image displays may be quite different than that requested. There are four different ways of having the image displayed. The first two are grouped with the ability to force them not to change their window size. The fixed window size option does not affect the other two options. Both Keep True Aspect Ratio and Aspect Ratio can Distort will resize up to the size of the screen with each new file load unless Fixed Window Size is specified. Keep True Aspect Ratio will always display the image in its correct height vs width ratio. If Fixed Window Size is selected, the image may be padded with black space on the sides or top and bottom as needed. Aspect Ratio can Distort will resize the window to the correct size if Fixed Window Size if NOT selected. Any subsequent resizes of the current image will force the image to fit inside the window. If Fixed Window Size is selected, the image will always fit exactly into the window. The alternative two display options are size limited. Auto Resize with Constant Width will always keep the image at the current width of the window, small images will expand appropriately while large ones will shrink. The upper left corner of the window is considered fixed, while the base is allowed to float. In this way the window will resize (as far down as the bottom of the screen) to keep the Aspect Ratio correct. If the correct aspect ratio cannot be achieved because the image would be too large, the image width will be padded. Auto Resize with Constant Height is similar except the height of the window will not change. Again, the upper left corner is considered fixed and will not be moved by JoeView. The window will expand to the far right side of the screen if needed. The Loop option will cause the slide show to begin over again once all the images have been cycled through. Randomize files will cause the slide show images to appear in a random order, otherwise they appear in the order listed in the Selected Files listbox shown in the SlideShow dialog. Note: The file list is randomized but no effort is made to make sure all files are shown when the list is gone through, nor is the same file prevented from being shown multiple times. The only guarantee is that the correct number of files will be shown during each cycle. (cycle = 1 if Loop is not selected). You can also specify whether you want the Slide Show to run at low priority. This way your other applications will not be as affected during a file read. Any of these options can be changed while the SlideShow is running. Use the Options command on the Main Menu once the slide show is started. ═══ 2.2.4. Printing ═══ So far printing has shown to be a hit and miss operation. Some images come out OK, while others distort the colors. You may find that images will printout better if you map the colors into the system colors first. On black and white printers doing a black and white dither may yield better results and similarly, you may want to convert your image to grayscale before printing. Printing is not multi-threaded (so I'm lazy) so give it some time to complete. The hard part about printing it to do so without distorting your image inadvertently. This is where the Fixed radio buttons come in. Basically, you choose what part of the picture will remain constant. Usually you will want to make the image size constant, but thats up to you. The Distortion of apect ratio tells you how much your image is being squished because of the margins you have called for. Basically, 0 means that your image will print true, while positive values indicate the sides are squished in, while a negative value means the top is squished down. You select a printer by clicking on the appropriate printer name show in the Printers listbox. Double clicking on the printer will allow you to edit its defaults. In addition, you can check the EPS (Encapsulated Postscript) checkbox. This will modify the Printing dialog box, allowing you to enter a filename and also choose whether to use RLE encoding (compress) on the file and or a preview section for the file created. The code to create an EPS file is based on work by John Bradley of The University of Pennsylvania. ═══ 2.3. Edit ═══ The commands listed under this heading will typically permanently change your image, with the exception of Copying to the Clipboard (Copy...). ═══ 2.3.1. Copy and Paste ═══ The pathway to the copy and paste command. ═══ 2.3.1.1. Copy... ═══ Copy to the clipboard. The image will be copied to the system's clipboard. It appears that when an image is copied to the clipboard, the system will convert the colors into the "system" color palette which you can pretty much guarantee will not match the colors of your image. If you want the copied image to be really good, convert it to the system's palette first by using FS Dither first. JoeView will automatically convert the image using the Distance Method. ═══ 2.3.1.2. Paste ═══ Paste from the clipboard. Whatever image JoeView is currently displaying will be lost. ═══ 2.3.1.3. Paste Into From Clipboard (or File) ═══ This feature allows you to paste whatever is currently in clipboard into whatever image currently is being displayed by JoeView. A locating rectangle is used to allow you to position the clipboard image to the spot that you want it. The clipboard image must be smaller dimensionally than the image currently being viewed in JoeView. You can resize the clipboard image to be whatever size you want, but you cannot change the aspect ratio. The alternate form of this command is to paste directly from another file. This has the advantage of not being limited by the clipboard's color palette. Both of these command operate the same, with the exception that Pasting from a file first requires you to specify a file. ═══ 2.3.2. Colors ═══ Color crunching stuff. ═══ 2.3.2.1. Control Center ═══ This is where the action takes place for color manipulations. Many of the manipulations that can be executed here can also be launched from the menu system or via hot-keys, but everything accessed via this dialog can be undone. Basically you have two ways of manipulating the image's colors in the broadest sense, by changing the Red Green and Blue (RGB) components of the image's colors and by changing the Hue Saturation and Value (intensity) or HSV of the image. The method of manipulation is chosen by the radio button HSV or RGB. The values of RGB and HSV are stored separately so the values in one set of spin buttons will not correspond to the other set. The Dynamic check box will cause the changes you are making to the various sliders to be applied as you make the changes. If you do not have the dynamic box checked, you will need to hit the Test button to see the effects of your changes. The Forget It is equivalent to cancel and will restore the image to its original state before closing the dialog. Make it So applies the changes permanently to the image. Other manipulations can be run from here by selecting the appropriate button. They are o Grayscale o Reduce Colors o BW Dither o FS Dither o Distance Method ═══ 2.3.2.2. Brighten ═══ Colors are all shifted up to brighter colors. Will eventually turn entire image white. If you shift colors repeatedly (all white in the extreme) you will not be able to undo using the Darken feature. This is accessed via the hot-key "B". ═══ 2.3.2.3. Darken ═══ Colors are all shifted down to darker colors. Will eventually turn entire image black. Can be undone with Brighten if not taken too far. This is accessed via the hot-key "D". ═══ 2.3.2.4. BW Dither ═══ Turns current image into a black and white image. ═══ 2.3.2.5. Reduce Colors ═══ You specify the number of colors you want the image to have. Numbers greater than the current number of colors the image uses will do nothing and values less than 2 are not allowed. This function is usually fast but can be a little time consuming with large pictures. ═══ 2.3.2.6. Go Grayhound ═══ Converts the colors used in the image to grayscale. ═══ 2.3.2.7. System Colors ═══ There are two different ways of converting from the image's current color scheme to that used by your OS2 system. They are Floyd Steinberg Dithering ( FS Dither ) and and the Distance Method. ═══ 2.3.2.7.1. FS Dither ═══ Floyd Steinberg Dithering of your image into the system's palette. The dithering method is based on ppmquant.c by Jef Poskanzer. This produces incredible results, sometimes it is hard to distinguish your original image from the dithered. Of course the penalty is that it is EXTREMELY CPU intensive. A VGA size image takes several minutes on my 33Mhz 486, your mileage may vary. The results are much better than using the Distance Method. This option is useful when copying to the clipboard or creating wallpaper or lockup screen images. ═══ 2.3.2.7.2. Distance Method ═══ Converts your image's palette into the system's default palette. Much faster than FS Dither but noticeably lower quality. This option is useful when copying to the clipboard or creating wallpaper or lockup screen images. ═══ 2.3.3. Resize ═══ Resizing changes the resolution of the image. This will effect that actual image, not just the displayed image. See Viewing Strategies for more information. Remember that how you have specified that the image be displayed may make it appear that this operation has done nothing when it actually has. For example, you may have the window size fixed. You can do +-10% increments or size the image to fit a particular screen size, such as 640 x 480, 800 x 600, and 1024 x 768 or the resolution that the image is currently being displayed at. In addition to can specify the actual dimensions to use by using the custom command. ═══ 2.3.4. Cropping ═══ Using the right mouse button, select an area of the image which you wish to retain. Using crop will eliminate all area's outside the indicated rectangle. The change affects the image, unlike Zoom. You must be aware that the image may be being displayed with padded sides. The padded sides exist for display only and so cannot be cropped away. This could happen if you manually resized the window after JoeView originally displayed it. ═══ 2.3.5. Auto Cropping ═══ Auto cropping attempts to use a little bit of color comparisons to estimate which parts of the picture need to be croppped. Regular: This method looks at the color of the pixel in the lower left corner of the image. It then compares all other colors on each side of the image to this color. If one side's color all match this "magic" color, that side is deleted. This method progresses until a new color is encountered. Strict, Average, Loose, and Custom: All of these methods work on the same underlying principle. A group of colors are identified and used to compare a side of the image to. The group of "magic" colors will be taken from the lower left side of the image unless a cropping rectangle has been selected, in which case the " magic" colors are taken from there. A maximum of 10 colors will be determined, only one will be used if a solid color area is input. A percentage hit test is used to determine if a side of the image should be deleted. For instance, if you have 3 "magic" colors and if half the pixels of the side being examined have these colors a hit of 50% would be recorded. This hit percentage is compared to the allowed value to determine whether or not to delete the side. The Strict, Average, and Loose options correlate to a 95%, 85%, and 75% hit rates. You can enter your own percentage using the custom command. Note: If nothing seems to be happening, you might be using too tight a percentage, but you also might be too loose. If the percentage is way too loose too much of the picture gets cropped and JoeView assumes that this isn't what is desired and so does no cropping. ═══ 2.4. Manipulations ═══ This menu command does nothing but bring down another pull down menu. The commands on that menu are used for changing or manipulating the current image. Many have keyboard equivalents. All these commands can be undone by using another command or the same command twice, i.e. using mirror twice. ═══ 2.4.1. Flip ═══ Depending on the option selected, the current image is flipped (mirrored) either vertically or horizontally. ═══ 2.4.2. Rotate ═══ Rotation is either clockwise or counterclockwise. Rotation takes place in 90 degree increments. ═══ 2.4.3. Invert Colors ═══ The current image colors are inverted. For example, black becomes white, etc. ═══ 2.4.4. Zooming ═══ Zooming allows the user to zoom in on a particular area of the image. That area if first selected by using the right mouse button. After a zoom has been performed, the menu option will change to Zoom Out. The original image is unaffected by zooming, as opposed to Cropping . ═══ 2.5. Options ═══ This will bring up one of two possible menus depending on whether or not you are currently running SlideShow The slideshow options can be looked at in the Slide Show Options section. The more regular options are o General - Show Load Progress - Overide System Colors - Aggresive on palette - Show Image Info o Image Windowing Options - Scale, keep aspect ratio true - Scale, aspect ratio can change - Fixed Window Size o JPEG Stuff o Custom Cropping Value o Startup Drive and Directory o Saves - Full Color - Grayscale - BW Dithered - Save at displayed size o Confirm on delete o Browse Mode o Low Priority Read o Sort by date o Sort by name o Command Buttons - Apply (Options become active, but are not saved) - Save (Options saved but not applied) - Cancel (duh!) - Help ═══ 2.5.1. Load Progress ═══ Shows the current status of file loading, basically a percentage of image loaded. Shown in the window title bar. Some File formats may not show this. ═══ 2.5.2. Overide System Colors ═══ Allows application to cream the system colors. These are the colors used for dialogs, menu text, etc. There are not that many of them, you can figure out how many unique ones you have by looking at the Image Information Dialog colors field. You will often see "got 245 out of 256". Subtract the first number from 256 to get the number of system colors. The colors that the application can't place are mapped into the closest ones the system will display. Usually the increase in image quality is insignificant, but you might use this option if you are not gonna look at other applications while JoeView is running. ═══ 2.5.3. Aggresive on Palette ═══ The application will fight for colors it is using. If another application starts changing the palette this option will cause JoeView to try and change the colors back every now and then. If you are working with another applications it can get annoying having the colors flash and the system will slow down somewhat. You can use a hot key (Alt A) to cycle this on or off. Even while Aggresive on Palette is off whenever you make JoeView the active application the palette will become reset to the correct colors. ═══ 2.5.4. Quick but eh ═══ The fastest reading of a JPEG file, colors may be off. ═══ 2.5.5. Not bad ═══ This tries to implement Heckbert's Median Cut algorithm. The code is hacked from XV by John Bradley of The University of Pennsylvania which is in turn based/hacked on code by Jef Poskanzer (ppmquant.c - quantize colors). It gets the job done, but sometimes not as fast as Best option. Quality in line with Best. I am not sure, but I get the feeling that when viewing true 24 bit images (meaning way over 256 colors), this will give you the best conversion down to 8 bit. ═══ 2.5.6. Best ═══ Best image display. Floyd-Steinberg dithering is used. ═══ 2.5.7. Startup directory ═══ Where would you like to start looking for images? Leave blank to start in current directory. ═══ 2.5.8. Full Color ═══ Save file using all the colors it currently has. ═══ 2.5.9. Grayscale ═══ Save image but first convert to grayscale colors. ═══ 2.5.10. BW Dithered ═══ Save image but convert to Black and White first. ═══ 2.5.11. Save at Displayed Size ═══ Remember that the size of the displayed image may not be the size of the actual image. Select this if you want the image to be stored at the same dimensions it is being displayed at. See Viewing Strategies for more info. ═══ 2.5.12. Sort by Date ═══ Files are listed in chonological order. ═══ 2.5.13. Sort by Name ═══ Files are listed in alphabetical order. ═══ 2.6. Image Information ═══ This command brings up a window that shows information about the currently displayed image. The information consists of: o The Filename o Format of the image file and filesize o Resolution of the image in memory o Resolution of the image as display o Distortion and scale of the image (Dist. and Scale) o Color information o An unseen line that occasionally will show warning messages o A history list box of manipulations that have been performed on the current image. The Information Box will remain around as long as JoeView is alive or until the Hide button is pressed. The information categories are pretty self explanatory, but for clarity Resolution refers to the resolution of the image as it is currently stored in memory, while Display Res. is the resolution that the image is currently being displayed at. The Dist. and Scale category may not be obvious. The distortion is the ratio of the aspect ratio of the image as it is displayed divided by the aspect ratio of the image in memory. Take that number and subtract one from it if it is greater than one or if it is less than one invert it and make it negative and then add one. We will call the aspect ratio the width of the image divided by its height. So a distortion of 0 means the image is not being distorted, a positive value means your are crushing the top down and a negative value means you are squishing the sides in. Scale is the scale factor of memory versus display. 2 means the display image is twice as large as the memory image. When you are distorting the image, the largest scale (width or height) is displayed. ═══ 3. Some Hints ═══ No the hints aren't here, go in one more level. ═══ 3.1. Viewing Strategies ═══ Images are displayed in several ways. Two ways that are always available are 1) just a simple, correctly scaled image and 2) an image that starts out scaled, but if you resize the window the aspect ratio will change so that the picture always fills up the window. These two types of display can be modified somewhat by selecting the fixed window size attribute. This option will force JoeView to not resize the viewing window each time a new file is loaded (whether by SlideShow or by File -> Open). The user can resize the window at any time. The SlideShow offers two addition ways of displaying images. See SlideShow for more information. In no case however, are sliders ever used. The most important thing to remember when using JoeView is that the actual resolution of the image (the width x height) is not always the same as that which it is displayed with. For example, let's say you are working on a system that is limited to a display of 640 by 480 and you try and load an image that is 2000 by 2000. JoeView will resize the image to fit the screen when it displays the image to you, but the data representing the image will stay at 2000 by 2000. Any operations (manipulations) that you perform on the image will by done on the original image, the 2000 by 2000 one. Now, let's say you use the ReSize command to reduce the image to 640 by 480. From as far as you can tell, nothing will have changed. This is because the image size is still as big as the display can handle. In reality you have changed the image size and if you save the image it will be different than the one you originally loaded. The Image Information option on the main menu will keep you apprised of the actual vs displayed resolution of the current image. When you save a file there is the option to save at the currently displayed size, the above discussion is why that option exists. ═══ 3.2. Quick Dir ═══ An especially useful feature, the Quick Dir listbox is present in several different dialogs: o File Open o Slide Show o File Save o Options It is only in the Options dialog the Quick Dir listbox can be modified. Aside from modifying the Quick Dir listbox, the Options dialog is not affected by it. The format for an entry is to have a drive letter and full path For Example c:\images\gif there should not be any trailing slashes. There is a limit of 10 entries that will be remembered. Others will be ignored. Unused entries should consist of blanks. The basic use of the Quick Dir is to allow the user to quickly access frequently used directories. The actual use of the Quick Dir listbox varies somewhat depending on the dialog. In the File Open and Slide Show dialogs Quick Dir is accessed by using the pull down on the listbox. Doing so will cause the current directory and drive to change to that selected in Quick Dir. With the File Save dialog, invoking Quick Dir is the same, but instead of actually changing the drive and directory, just the entry in the name of the file to be saved will be updated. If you want to change directories in the File Save dialog you will have to use the drive and directory listboxes. ═══ 4. File Formats ═══ A variety of file formats are supported. See each individual one for more info. You should be aware of some limitations when doing conversions between different file formats or if you are constantly rewriting reading and saving the same image over and over again (See JPEG). When JoeView reads a file, no matter what the original format, it is stored as an 8 bit image (256 colors max). This means that if you read in a JPEG, TARGA, Sun Raster, or PPM image there exists the possibility that the original file is made up of more than 256 colors and so JoeView will reduce the colors down to 256. So, if your goal is to convert a 24 bit image stored in TARGA format to PPM there is a very good chance that your image will suffer a loss in quality. There are utilities available to do true 24 bit conversions, if you are really concerned. Most likely the losses will be quite small. Eight bit formats will not suffer any degradation. ═══ 4.1. JPEG ═══ The JPEG reading and writing code is based on the following people's work: The Independent JPEG Group's JPEG software ========================================== This software is the work of Tom Lane, Philip Gladstone, Luis Ortiz, Lee Crocker, Ge' Weijers, and other members of the Independent JPEG Group. LEGAL ISSUES ============ The authors make NO WARRANTY or representation, either express or implied, with respect to this software, its quality, accuracy, merchantability, or fitness for a particular purpose. This software is provided "AS IS", and you, its user, assume the entire risk as to its quality and accuracy. This software is copyright (C) 1991, 1992, Thomas G. Lane. All Rights Reserved except as specified below. Permission is hereby granted to use, copy, modify, and distribute this software (or portions thereof) for any purpose, without fee, subject to these conditions: (1) If any part of the source code for this software is distributed, then this README file must be included, with this copyright and no-warranty notice unaltered; and any additions, deletions, or changes to the original files must be clearly indicated in accompanying documentation. (2) If only executable code is distributed, then the accompanying documentation must state that "this software is based in part on the work of the Independent JPEG Group". (3) Permission for use of this software is granted only if the user accepts full responsibility for any undesirable consequences; the authors accept NO LIABILITY for damages of any kind. Permission is NOT granted for the use of any IJG author's name or company name in advertising or publicity relating to this software or products derived from it. This software may be referred to only as "the Independent JPEG Group's software". We specifically permit and encourage the use of this software as the basis of commercial products, provided that all warranty or liability claims are assumed by the product vendor. ================== The following is pretty much stolen verbatim for the JPEG information that is supplied with the JPEG libraries. The Quality spin button lets you trade off compressed file size against the quality of the saved image: the higher the quality setting, the larger the JPEG file, and the closer the output image will be to the original input. Normally you want to use the lowest quality setting (smallest file) that decompresses into something visually indistinguishable from the original image. For this purpose the quality setting should be between 50 and 95; the default of 75 is often about right. If you see defects at -quality 75, then go up 5 or 10 counts at a time until you are happy with the output image. (The optimal setting will vary from one image to another.) Quality 100 will generate a quantization table of all 1's, eliminating loss in the quantization step (but there is still information loss in subsampling, as well as roundoff error). This setting is mainly of interest for experimental purposes. Quality values above about 95 are NOT recommended for normal use; the compressed file size goes up dramatically for hardly any gain in output image quality. In the other direction, quality values below 50 will produce very small files of low image quality. Settings around 5 to 10 might be useful in preparing an index of a large image library, for example. Try -quality 2 (or so) for some amusing Cubist effects. (Note: quality values below about 25 generate 2-byte quantization tables, which are considered optional in the JPEG standard. Note: some commercial JPEG programs may be unable to decode the resulting file. Smooth Factor: Smooth the input image to eliminate dithering noise. The value selected, ranging from 1 to 100, indicates the strength of smoothing. 0 will mean to not use smoothing and can be used instead of the check button. The Smooth option filters the currently displayed image to eliminate fine-scale noise. This is often useful when saving files as JPEG: a moderate smoothing factor of 10 to 50 gets rid of dithering patterns in the input file, resulting in a smaller JPEG file and a better-looking image. Too large a smoothing factor will visibly blur the image, however. Optimization of entropy encoding parameters. Without this, default encoding parameters are used. Optimize usually makes the JPEG file a little smaller, but JoeView runs somewhat slower and needs much more memory. Image quality and speed of decompression are unaffected by optimize. It's also a win when you are using low quality settings to make very small JPEG files; the percentage improvement is often a lot more than it is on larger files When reading a JPEG, there are three mutually exclusive option that deals with quantization of the colors (converting from a 24 to 8 bit image). Your options are: o Quickest but eh. The one pass color quantization. The fastest of the three , but probably will result in a noticeably inferior image. Good for a quick look. o Not Bad. This tries to implement Heckbert's Median Cut algorithm. The code is hacked from XV by John Bradley of The University of Pennsylvania which is in turn based/hacked on code by Jef Poskanzer (ppmquant.c - quantize colors). It gets the job done, but sometimes not as fast as Best. Quality in line with Best. I am not sure, but I get the feeling that when viewing true 24 bit images, this will give you the best conversion down to 8 bit. This should be a step below the best method in terms of quality but faster. Make your own judgment. It is not part of the regular JPEG libraries. o Best. Floyd-Steinberg dithering is used. ═══ 4.2. Bitmaps ═══ The two important types of bitmaps supported are Windows and OS2 style bitmaps. JoeView should read any of these type of bitmaps (RLE and non-RLE) with the following caveats: o Black and White images that are stored by using modified Huffman encoding can not be read. o With certain small bitmaps that are used as icons, you currently get an unrecognized file type error. o OS2 allows the use of halftones and such. JoeView does not read these but I have never even seen one. Saving bitmaps, on the other hand, is limited to non-RLE style. Basically the bitmaps will take up more space than RLE style. ═══ 4.3. GIF ═══ Does em'. The code for reading and writing GIFs is based on code from XV, see the PBM section for the appropriate copyright notice. The code XV has for reading GIFs is based on gif2ras.c, Copyright (C) 1988, 1989 by Patrick J. Naughton, naughton@sind.sun.com. The code XV has writing GIFs is based on flgife.c and flgifc.c from the FBM Library, by Michael Maudlin. JoeView will read both GIF87a and GIF89a formats but will write only GIF87a format. "The Graphics Interchange Format(c) is the Copyright property of CompuServe Incorporated. GIF(sm) is a Service Mark property of CompuServe Incorporated." ═══ 4.4. TARGA ═══ The code to read Targa images is based on tgatoppm.c by Jef Poskanzer. This is the copyright stuff from that file. /* tgatoppm.c - read a TrueVision Targa file and write a portable pixmap ** ** Partially based on tga2rast, version 1.0, by Ian MacPhedran. ** ** Copyright (C) 1989 by Jef Poskanzer. ** ** Permission to use, copy, modify, and distribute this software and its ** documentation for any purpose and without fee is hereby granted, provided ** that the above copyright notice appear in all copies and that both that ** copyright notice and this permission notice appear in supporting ** documentation. This software is provided "as is" without express or ** implied warranty. JoeView does both RLE and non-RLE style files. ═══ 4.5. PBM ═══ The code for reading and writing PBM files is based on code from XV, the following is copyright information from XV. * Copyright 1989, 1990, 1991, 1992 by John Bradley and * The University of Pennsylvania * * Permission to use, copy, and distribute for non-commercial purposes, * is hereby granted without fee, providing that the above copyright * notice appear in all copies and that both the copyright notice and this * permission notice appear in supporting documentation. * * The software may be modified for your own purposes, but modified versions * may not be distributed. * * This software is provided "as is" without any expressed or implied warranty. * * The author may be contacted via: * US Mail: John Bradley * GRASP Lab, Room 301C * 3401 Walnut St. * Philadelphia, PA 19104 * * Phone: (215) 898-8813 * EMail: bradley@cis.upenn.edu * JoeView uses the term PBM loosely, there are really three (or six) different types of formats here. They are: PGM - portable graymap file format The portable graymap format is a lowest common denominator grayscale file format. The definition is as follows: - A "magic number" for identifying the file type. A pgm file's magic number is the two characters "P2". - Whitespace (blanks, TABs, CRs, LFs). - A width, formatted as ASCII characters in decimal. - Whitespace. - A height, again in ASCII decimal. - Whitespace. - The maximum gray value, again in ASCII decimal. - Whitespace. - Width * height gray values, each in ASCII decimal, between 0 and the specified maximum value, separated by whitespace, starting at the top- left corner of the graymap, proceding in normal English reading order. A value of 0 means black, and the maximum value means white. - Characters from a "#" to the next end-of-line are ignored (comments). - No line should be longer than 70 characters. Here is an example of a small graymap in this format: P2 # feep.pgm 24 7 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 0 0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 0 0 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 0 0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 0 0 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 There is also a variant on the format, the RAW style. This variant is different in the following ways: - The "magic number" is "P5" instead of "P2". - The gray values are stored as plain bytes, instead of ASCII decimal. - No whitespace is allowed in the grays section, and only a single character of whitespace (typically a newline) is allowed after the maxval. - The files are smaller and many times faster to read and write. Note that this raw format can only be used for maxvals less than or equal to 255. PBM - portable bitmap file format The portable bitmap format is a lowest common denominator monochrome file format. It was originally designed to make it reasonable to mail bitmaps between different types of machines using the typical stupid network mailers we have today. Now it serves as the common language of a large family of bitmap conversion filters. The definition is as follows: - A "magic number" for identifying the file type. A pbm file's magic number is the two characters "P1". - Whitespace (blanks, TABs, CRs, LFs). - A width, formatted as ASCII characters in decimal. - Whitespace. - A height, again in ASCII decimal. - Whitespace. - Width * height bits, each either '1' or '0', starting at the top-left corner of the bitmap, proceding in normal English reading order. - The character '1' means black, '0' means white. - Whitespace in the bits section is ignored. - Characters from a "#" to the next end-of-line are ignored (comments). - No line should be longer than 70 characters. Here is an example of a small bitmap in this format: P1 # feep.pbm 24 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 There is also a variant on the format, the RAW style. This variant is different in the following ways: - The "magic number" is "P4" instead of "P1". - The bits are stored eight per byte, high bit first low bit last. - No whitespace is allowed in the bits section, and only a single character of whitespace (typically a newline) is allowed after the height. - The files are eight times smaller and many times faster to read and write. PPM - portable pixmap file format The portable pixmap format is a lowest common denominator color image file format. The definition is as follows: - A "magic number" for identifying the file type. A ppm file's magic number is the two characters "P3". - Whitespace (blanks, TABs, CRs, LFs). - A width, formatted as ASCII characters in decimal. - Whitespace. - A height, again in ASCII decimal. - Whitespace. - The maximum color-component value, again in ASCII decimal. - Whitespace. - Width * height pixels, each three ASCII decimal values between 0 and the specified maximum value, starting at the top-left corner of the pixmap, proceding in normal English reading order. The three values for each pixel represent red, green, and blue, respectively; a value of 0 means that color is off, and the maximum value means that color is maxxed out. - Characters from a "#" to the next end-of-line are ignored (comments). - No line should be longer than 70 characters. Here is an example of a small pixmap in this format: P3 # feep.ppm 4 4 15 0 0 0 0 0 0 0 0 0 15 0 15 0 0 0 0 15 7 0 0 0 0 0 0 0 0 0 0 0 0 0 15 7 0 0 0 15 0 15 0 0 0 0 0 0 0 0 0 There is also a variant on the format, the RAW style. This variant is different in the following ways: - The "magic number" is "P6" instead of "P3". - The pixel values are stored as plain bytes, instead of ASCII decimal. - Whitespace is not allowed in the pixels area, and only a single character of whitespace (typically a newline) is allowed after the maxval. - The files are smaller and many times faster to read and write. Note that this raw format can only be used for maxvals less than or equal to 255. The above three descriptions are very slightly altered versions of descriptions originally written and Copyrighted (C) 1989, 1991 by Jef Poskanzer. So, if you need to input a file format that JoeView does not support, here is your chance if you know the format of the data you already have. Convert the data into the appropriate ASCII format style above. It is probably simplest just to use the ppm format and let JoeView convert it down into the appropriate number of colors. ═══ 4.6. X11 Bitmap ═══ The code for reading and writing X11 bitmaps was hacked from XV, see the PBM section for copyright info. ═══ 4.7. Sun Raster ═══ The code for reading and writing Sun Raster files was stolen from XV, see the PBM section for copyright info. This particular code from XV was written by Dave Heath (heath@cs.jhu.edu) with additions by Ken Rossman (ken@shibuya.cc.columbia.edu). ═══ 4.8. Utah RLE ═══ JoeView only reads Utah RLE files, it will not write them. The code for reading Utah RLE files is based on code from XV, see the PBM section for copyright info. ═══ 4.9. Slide Show Files ═══ JoeView can store a selection of files for use in a Slide Show. These typically are given and extension of "sls". You can load these files using the Slide Show Dialog or the regular File Open Dialog. In addition, you can drag and drop such a file onto JoeView. ═══ 5. Key Help ═══ There are keyboard equivalents to many of the pull down menu commands. Most are single character commands and will be shown on the menu underlined. They are only valid when the main window is active. They are: O Open a file S Save a file Z Zoom in or out B Brighten Image D Darken Image G Grayscale image C Crop the image A Auto crop the image using Average parameter I Image information window H Help table of contents K This window N Next image when in slide show mode Cntrl+N Open File dialog next image Cntrl+P Open File dialog previous image Alt+P Print Image + Increase image size by 10% - Decrease image size by 10% R Refresh image T Toggle Title Bar on and off Cntrl+R Rotate image Clockwise Alt+R Rotate image CounterClockwise Cntrl+F Flip image Vertically Alt+F Flip image Horizontally Cntrl+O Options Dialog Cntrl+S Slide Show Dialog Space Bar Minimize JoeView (someone's coming) Alt+C Main Colors manipulations dialog Aggessive Palette can be toggled using Alt A Alt F4 Quit The Open File dialog has the following keyboard equivalents, they are active only when the Open File dialog is active. They are: Cntrl+N Show next image Cntrl+P Show previous image Space Bar Minimize JoeView ═══ 6. A Few Thanks ═══ The following people were kind enough to answer questions I posted to the net. The few minutes they took to respond to my questions saved me untold days of fruitless searching through .inf files. I hope these words make a contribution towards their 15 minutes of fame. o Keith Murray o Jeroen Hoppenbrouwers o Gene Mangum o Roman Fischer o Anders Bjurman This is of course in addition to the people who have made their source code available for use by others. This would be the JPEG, PBM, and XV authors who are listed in the respective file formats sections. The following people have made significant suggestions for improvement of JoeView and/or pointed out bugs. o Dan, Dick, Tom, Chance Glazing Donuts instead of working. o Steve M. Lacy Creation of FS Dithered bitmaps for wallpaper use. o Scott Hiles Create Slide Show files, Toggle Title Bar, Drag Drop Slide Show Files o Rob Eitzen Can't access A/B drives, bug fix o Scott Harper Found lots of little bugs, good style criticisms, bitmap file problems, ghost cropping rectangle (fix) o Reinhard Meyer Found truly obscure bugs, other suggestions ═══ 7. Mo' Money, Employment ═══ This program is not exactly shareware but it did require a great deal of time and effort to write. If you feel an overpowering urge to toss a few bucks my way I won't be offended, honest. Cash is best, send it to: Joe Burkley 6312 Rancho Mission Rd., #307 San Diego, CA 92108 Have a need for some programming? Consider this little application just a sample of what I can do. Contact me at the above address and we can negotiate. ═══ 8. Drag and Drop ═══ JoeView supports the dragging and dropping of an image file or slideshow file onto either the JoeView Icon or onto a running version of JoeView. JoeView will not accept drag and drop operations while a Slide Show is running or while a file is currently being read. ═══ 9. Command Line ═══ There are two possible command line options. You can specify a file name for JoeView to load upon startup. For example: joeview c:\gifs\hooters.gif The other command line option is to create a Floyd Steinberg Dithered bitmap. The main purpose of this option is so that you can create background images for your desktop or lockup screens. When you received this copy of JoeView, one of the files included should have been a REXX script to randomly generate background images using this command line option. The format of the command is joeview -b input_file output_file or joeview -bs input_file output_file. You should specify drives and paths for the input and output files. The input file can be in any file format the JoeView normally reads. The output file will always be an OS2 2.0 format bitmap. The "-b" option causes JoeView to perform the dithering at full CPU utilization. As the process is very CPU intensive, the "-bs" option is included. This option is meant to mean -b slow. Basically it puts JoeView in a low priority mode that causes the operation to take considerably longer than if you use "-b" but you'll find that your machine is much more usefull while the process is running. JoeView will not be visible when this option is invoked. The idea of using FS Dithering to create background bitmaps was originally proposed by Steve M. Lacy. ═══ 10. Blue Screen ═══ If'n your startup image in JoeView is a blue screen, your JoeView.ini file has been corrupted. Delete it and JoeView will create another.