Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!sun-barr!newstop!sun!grip.cis.upenn.edu From: bradley@grip.cis.upenn.edu (John Bradley) Newsgroups: comp.sources.x Subject: REPOST: v09i082: XV -- successor to XGIF, Part07/08 Message-ID: <143597@sun.Eng.Sun.COM> Date: 10 Oct 90 21:15:49 GMT Sender: news@sun.Eng.Sun.COM Lines: 1238 Approved: argv@sun.com Submitted-by: bradley@grip.cis.upenn.edu (John Bradley) Posting-number: Volume 9, Issue 82 Archive-name: xv/part07 -----------------------(cut here)------------------ #!/bin/sh # to extract, remove the header and type "sh filename" if `test ! -d ./docs` then mkdir ./docs echo "mkdir ./docs" fi if `test ! -s ./docs/gif.aspect` then echo "writting ./docs/gif.aspect" cat > ./docs/gif.aspect << '\BARFOO\' XV also supports the GIF 'aspect ratio' extension that was discussed on comp.graphics. Here's the description: ---------------------------------------------------------------------------- There was quite a discussion in comp.graphics a few weeks ago, with a lot of people complaining about GIF images coming with many different aspect ratios, but no indication what the initial aspect ratio was. Several suggestions were made, the best of which was Chris Schoeneman (i think) suggesting the following extension block be added to specify the aspect ratio: # 7 6 5 4 3 2 1 0 Byte # # +---------------+ # |0 0 1 0 0 0 0 1| 1 '!' - GIF extension block introducer # +---------------+ # |0 1 0 1 0 0 1 0| 2 'R' - For 'aspect Ratio' # +---------------+ # |0 0 0 0 0 0 1 0| 3 2 - Two bytes in block # +---------------+ # | pixel width | 4 - First part of ratio (numerator) # +---------------+ # | pixel height | 5 - Second part of ratio (denominator) # +---------------+ # |0 0 0 0 0 0 0 0| 6 0 - extension block end code # +---------------+ # #Let byte four equal 'x' and byte five equal 'y' Then x:y is the _pixel_ #aspect ratio. 'x' and 'y' should be relatively prime (ie they should #have no common divisor except one), but they don't have to be. Jef Paskanzer [of PBMPLUS fame] modified his gif decoder to recognize this. I also modified my own, not that I count :-) Jef and I cross-checked ours and these diffs are compatible with both. This code, by the way, isn't terrible robust, and will only skip extensions found BEFORE the image separator, but it is a lot better than nothing. Since then, there has been a seemingly official announcement about a GIF89a standard from CompuServe, and the possibility of both GIF's becoming outlawed because of the Unisys LZW patent, etc. etc. etc. oh, well... life goes on. anyway... I hope this is of some help. you are welcome to post these patches to wherever is appropriate (i didnt do a patch on patchlevel.h, b.t.w.), or incorporate them into your new program, or whatever. I relinquish all claims, etc. etc. -steve -------------------------------------------------------+"Come, Watson, come!" Steve Swales (716) 275-0265,-3857,-5101| he cried. "The game is steve@bat.lle.rochester.edu (128.151.32.111)| afoot. Not a word! {decvax,harvard,ames,rutgers}!rochester!ur-laser!steve| Into your clothes and University of Rochester 250 East River Road| come!" S.H. Laboratory for Laser Energetics Rochester, NY 14623| 'The Abbey Grange' \BARFOO\ else echo "will not over write ./docs/gif.aspect" fi if `test ! -s ./docs/README` then echo "writting ./docs/README" cat > ./docs/README << '\BARFOO\' Documentation on the various file formats read/written by XV, and some other miscellaneous stuff. \BARFOO\ else echo "will not over write ./docs/README" fi if `test ! -s ./docs/credits` then echo "writting ./docs/credits" cat > ./docs/credits << '\BARFOO\' Thanks go out to many people: * To Patrick J. Naughton (naughton@wind.sun.com) for writing 'gif2ras.c', a program that converts GIF files to Sun Rasterfiles. This program was the basis of the original xgif, and as such, could be said to have 'started it all' This same code remains mostly unchanged in 'xvgif.c'. * To Michael Maudlin (mlm@cs.cmu.edu) for writing a short, READABLE version of the 'gif writing' code, which I've modified to a small degree. This code became 'xvgifwr.c'. * To Jef Poskanzer (jef@well.sf.ca.us) for coming up with cool-whizo 'general' formats (pbm, pgm, ppm) and for having a large collection of X11 bitmap files (providing the impetus for reading/writing THAT format). * To Steve Swales (steve@bat.lle.rochester.edu) for telling me about the GIF aspect ratio extension. And, most importantly, to John Dotts Hagan (hagan@dccs.upenn.edu) whose continued harrassment has proved invaluable. Suffice it to say that XV probably wouldn't have been written were it not for all the abuse he gave me about the shortcomings of 'xgif'. --jhb 8/30/90 \BARFOO\ else echo "will not over write ./docs/credits" fi if `test ! -s ./docs/info` then echo "writting ./docs/info" cat > ./docs/info << '\BARFOO\' Note: This is somewhat obsolete, but may be of interest to any one who feels like hacking 'xv' --jhb, 8/31/90 ------------------------------------------------------------------------------ general concepts: 1. main program should do command line parsing, call a LOAD routine of some sort, and display the result. It will sit in a loop parsing keyboard commands until a file-changing command is given. Keyboard Commands: Q: quit CR,SP: next file BS,DEL: previous file ,: shrink picture 10% .: grow picture 10% <: shrink picture by factor of 2 >: grow picture by factor of 2 N: home. (Show picture at normal size) M: max. (grow picture to size of screen) C: crop picture U: uncrop picture I: info box 4: 4x3-ify the picture Mouse Commands: Button1: lets you draw a cropping rectangle Button2: Button3: 2. LOAD routines: given a file name. They'll do optional suffix-tacking-on if they wish to. They will do whatever needs to be done to the picture to get it into an 8-plane image with a colormap. The load routines will return several things (in global variables): pWIDE, pHIGH, a pWIDE*pHIGH array of pixels (pic) (one byte per), 0,0 is the top-left corner of the image, a colormap (three 256-element arrays of bytes, for r,g and b (called 'r', 'g', and 'b', oddly enough) load routines will return '0' if successful, a slew of non-zero things if not 3. A common routine for colormap sort/compression (SortColormap()). the colormap will be compressed. That is, if only 37 colors in the 256-element colormap are used, they will be the first 37 entries in the colormap. This way, the display portion of the code won't waste resources allocating unused colors. This routine will also modify the PIC array accordingly. This routine calculates 'numcols'. Thought: have the colormap compression algorithm sort the colormap so that the most-used color is first, and the other colors are in order of decreasing distance from the first color. (That is, the second color will be the 'most unlike' the first color, the third color will be the 'second most unlike' the first color, and so on.) Justification: Since we allocate colors in the order they're stored in the colormap, it'd probably be better to get all the major colors first, and then pick up the subtle shade differences if there's any colors left. Improved sort algorithm. Slower, but possibly more desirable. (besides, the speed of this routine is not likely to be a problem) Problem with previous algorithm: a picture with a blue sky, a green ground, and a dark blue car. The previous algorithm will allocate the sky blue (most used), and then try to allocate ALL THE SHADES OF GREEN before trying for the dark blue. Suboptimal. Solution, find the most used color, put it first in the cmap. find the color the greatest distance from that, put it second in the cmap NOW, find the color that is farthest away from BOTH of those colors (that is, for each color left in the cmap, compute the min of it's distances from the ones that have been allocated already. Then, take the one that's got the largest min distance and allocate it. continue) Still more modification to sort algorithm: The modified algorithm described above is a good thing, but runs on the order O(3). Practical upshot is that doing it for all 256 colors in a picture takes far too long. New idea: run that algorithm for the first 32 colors (an arbitrary smallish number, and plenty fast), then sort the remaining colors in order of decreasing use. 4. A common routine for 24-bit RGB -> 8 bit colormap conversion. Since several different data formats might want to do this, this routine will exist for their calling pleasure. Input will be a wide*high * 3 byte array of pixels, 3 bytes per (in order R, G, and B). The procedure will do the 'thing' and store results in all the global variables that the load routines are supposed to return. A load routine should be able to just call this routine (once it's built the 24-bit image) and return. Input will also be number of colors to use. That is, while it will still produce a 8-bit PIC array, you might want it to only use 16 colors, rather than 256. (Say, if you're on a 4 bit display). The reason you'd want it to do this is that it'll probably do a better job of creating a 16-color picture than the DISPLAY routine would (if it was handed a 256 color picture and asked to display it on a 16-color display). The 24to8 routine (Conv24to8) will be clever, and if it knows you're displaying on a monochrome screen (or -mono is set) or that you're displaying on a 1-bit display (or -nc 0), it will just return an 8-bit greyscale version of the picture. This is because running the full 24-bit RGB to 8-bit pseudocolor conversion takes a long time, and shouldn't be done if not necessary. 5. Display routines. Do whatever is necessary to show PIC on display. This includes things like building an Ximage in the correct depth, expanding/compressing size of image There will be a AllocColors() routine that will take the desired colormap and see what it can do, based on the type of display you're using. This routine will be called once per picture, before doing Resize() (As Resize() calls CreateXImage()...) if (based on 'theVisual', or '-mono') we appear to be running on a GrayScale or StaticGray display, this algorithm will FIRST run through the desired colormap (the 'epic' colormap) and replace the r,g,b values for each entry with the corresponding intensity value (I=(.3r+.5g+.2b)/3) This way, pictures will be correctly displayed on mono screens. Algorithm: for >1 bit displays (ie, greyscale/color), alloc colors in the X colormap in the order that the SortColormap routine returned. Colors that couldn't be allocated are matched to the closest colors in the global X colormap, or the just the colors allocated (based on the value of 'noglob') the 'cols[]' array will hold the mapping between 'epic' colors and X colors. (ie, color #37 in epic and the epic colormap will correspond to color # cols[37] in the X image and the X colormap) the 'freecols[]' array (and nfcols, the length of it) will hold the X pixel values of the colors that were allocated, so that they may be later un-allocated. Also, it will NOT have duplicate entries in it. (ie, if allocating (15,15,15) and (16,16,16) both return pixel #2, pixel #2 will be in freecols ONCE.) More algorithm: for 1 bit displays there's only going to be two colors, 'black' and 'white'. (What the two colors actually look like on the screen (ie, maybe it's blue and white, or black and green), is not important. So what we do here is, rather than try to allocate any colors (it'd probably fail anyhow), run the Floyd Steinberg dithering algorithm over the picture, and just use 'black' and 'white' 6. There's several variables that seem to do the same thing. They don't. Here's what they do: pic, pWIDE, pHIGH: This is the 8-bit image ret. by the load routine cpic, cWIDE, cHIGH, cXOFF, cYOFF: This is the cropped version of pic. If there is no cropping going on, it will point to pic. cXOFF and cYOFF specify the offset from 0,0 of the original pic. (ie, pixel cXOFF,cYOFF in the original picture will be at 0,0 in the cpic image epic, eWIDE, eHIGH: This is another 8-bit image. This is an expanded/ compressed version of cpic. Generated in the Resize() function. When there is no expansion (ie, eWIDE=pWIDE, eHIGH=pHIGH) epic *will* point to 'cpic'. This way the X conversion routines can simply use epic, eWIDE, and eHIGH. theImage: This is an Ximage version of epic. It'll be in whatever depth/format is deemed appropriate for the X display. It is generated from epic after epic has been Resize()'d It's generated in the function CreateXImage() What happens to a picture from loading to display: picture is loaded in some native format (local to LOAD routine) picture is converted to 8-bit colortable routine (pic) (in LOAD routine. native format data is thrown away) LOOP 'pic' is cropped, if desired. cpic points to picture data 'cpic' is expanded, if desired. epic points to data 'epic' is converted to theImage (an X Format in the depth of the screen) REPEAT 7. It should be noted that the several functions break on machines where 'int' is <32 bits. These machines are wrong. 8. added a 'perfect' mode, where it installs it's own colormap 9. further thoughts... add an ability to display multiple iconified-files at once (has to be done in 'mono' mode... (contact sheets, Hagan calls them) 10. color usage. six colors can be specified via command-line/resource database. They are white,black, foreground,background, and info.foreground,info.background. white and black are only used in the 1-bit dithering routines (FloydDitherize8 and FloydDitherize1) foreground,background specify the colors of the window/frame info.{fore,back}ground specifies the colors of the info box \BARFOO\ else echo "will not over write ./docs/info" fi if `test ! -s ./docs/bggen.man` then echo "writting ./docs/bggen.man" cat > ./docs/bggen.man << '\BARFOO\' .TH bggen l .SH NAME bggen \- generates colored backgrounds on X11 displays .SH SYNTAX \fBbggen\fP [-s size] [-b bits] r1 g1 b1 [r2 g2 b2 ... rn gn bn] .SH DESCRIPTION \fBbggen\fP is a program that generates a 1-pixel wide by size-pixels high vertical stripe. The top of the stripe is in color (r1,g1,b1), and the bottom of the stripe is in color (rn,gn,bn). Intermediate colors are interpolated between these colors. If you specify more than 2 colors, the stripe passes through all the specified colors, in the order specified. .PP The '-b' option specifies the number of significant bits in the (output) color specifications. It must range between 1 and 8, inclusive. Use values less than 8 (the default) to limit color use by increasing the color granularity. .PP Values for 'r', 'g', and 'b' should range between 0 and 255, inclusive. 0 means 'off', and 255 means 'fully on'. .PP \fBbggen\fP doesn't actually affect your background directly. \fBbggen\fP merely generates a small PPM (Portable Pixmap Format) datafile that XV can read and display. .PP To use \fBbggen\fP, you should pipe its output into an XV command, such as: "xv -root -quit -slow24" .PP The default 'size' is 1024 pixels, which should be as tall as your display. If your display is taller than that, you should specify its actual height, otherwise you will get a bizarre repeating effect, that you probably didn't want. Note: If you specify small values of '-s', you can get some neat effects. .SH TRY THESE .nf Light Blue to Dark Blue bggen 100 100 255 50 50 150 | xv -ro -q -s RGB Rainbow bggen 0 0 255 0 255 0 255 0 0 | xv -ro -q -s Green Cylinders bggen 0 0 0 0 255 0 0 0 0 -s 128 | xv -ro -q -s Blue to Magenta bggen 0 0 255 200 0 100 | xv -ro -q -s Full Rainbow bggen 0 0 255 0 255 255 0 255 0 255 255 0 255 0 0 | xv -ro -q -s Repeating Rainbow bggen 0 0 255 0 255 255 0 255 0 255 255 0 255 0 0 255 0 255 0 0 255 -s 256 | xv -ro -q -s .fi .PP BUGS It'd probably be nice if the program used some X calls to determine screen size. It'd also probably be nice if the program could take colors by 'name', and also by hexadecimal value. .SH AUTHOR John Bradley - bradley@cis.upenn.edu \BARFOO\ else echo "will not over write ./docs/bggen.man" fi if `test ! -s ./docs/xv.man` then echo "writting ./docs/xv.man" cat > ./docs/xv.man << '\BARFOO\' .TH xv l .SH NAME \fIxv\fP \- displays and manipulates images on X11 displays .SH SYNTAX \fIxv\fP [options] [filename [filename...]] .SH DESCRIPTION \fIxv\fP is an X11 program that displays images in the GIF, PBM, PGM, PPM, X11 bitmap, and PM formats on 1-, 4-, 6-, 8-, and 24-bit X displays. .SH OVERVIEW \fIxv\fP displays one image at a time in an output window. You can arbitrarily stretch or compress the window, and the picture will be rescaled to fit. You can rotate the picture in 90-degree steps. You can repeatedly 'crop' a picture (define a rectangular 'region-of-interest' and 'throw away' the rest). You can magnify any portion of the picture by any amount, up to the maximum size of your screen. .PP \fIxv\fP allows you click on the picture to determine pixel RGB values and x,y coordinates. You can perform arbitrary 'gamma correction' on the picture both in RGB space and HSV space. You can specify the maximum number of colors that \fIxv\fP should use, for some interesting visual effects. You can have the program produce a stippled version of the picture using black and white, or any other pair of colors. .PP \fIxv\fP can write images in a variety of formats, with many of the modifications you may have made to the picture saved as well. You can use \fIxv\fP to do format conversion. \fIxv\fP will also automatically uncompress \fIcompress\fP-ed files, as well as read files from stdin. .PP It slices, it dices, and it'll balance your checkbook if you aren't careful. .SH USING THE PROGRAM Start the program up by typing 'xv ' After a short delay, a window will appear with the desired image displayed in it. If you change the size of the window, (however your particular window manager lets you do this), the picture will rescale to fit the window. .PP Clicking (and dragging) the Left mouse button inside the image window will display pixel information. The first two numbers are the x and y offset, in pixels, from the top-left corner of the image. The first group of three numbers are the red, green, and blue values of that pixel from the original data (after any 24-bit to 8-bit conversions...). The second group of three numbers are the red, green, and blue values of that pixel AFTER any gamma correction (and the '\fB\-rv\fP' option). If you actually want to measure some pixels, it will probably help to crop to a small region, and expand that region quite a bit, to the point where you can see individual pixels. .PP If you type 'h', '?' or click the Right mouse button inside this window, the CONTROL BOX window will appear. This box will contain a list of file names (just one in this example) and many buttons. .PP Note: unless specified otherwise, 'click' means 'click with the Left mouse button'. .SH THE CONTROL BOX Most of the buttons in the control box let you adjust the size of the currently shown picture. You can either click the button, or type a keyboard equivalent inside ANY \fIxv\fP window (except the SAVE BOX (see below)). It should be noted that the 'resizing' controls do not MODIFY the picture in any way. They simply change the way the picture is displayed, by duplicating or dropping pixels from the original picture to produce an image of the desired size. As you expand images, they will get 'chunkier'. .PP The 'Max Size' button (or 'm' key) causes the picture to be redrawn so that it completely fills the screen. Be warned that this might take a while, depending on the speed of your machine. It also may cover all the other windows on the screen, including the control window. If this happens, you can bring the control window back to the top by clicking the Right mouse button in the picture window one or two times. .PP The 'Normal' button (or 'n' key) returns the picture to it's normal size. Normal size is defined as a 1 to 1 mapping between pixels in the image and pixels on the screen. (i.e., if you have a 320x200 image, the 'Normal' command will set the 'on-screen' size to 320x200). .PP The only exception to this behavior is when the image is larger than your screen. In this case, the picture is 'halved' until it fits. (For example, if you were trying to display a 1000x600 image on an 800x600 screen, the 'Normal' command would set the 'on-screen' size to 500x300.) .PP The 'Dbl Size' button (or '>' key) doubles the width and height of the picture, under the constrant that the picture may not be larger than the screen. (ie, if you have a 900x100 image, and a 1000x800 screen, doubling would result in a picture size of 1000x200 (the doubling of the '900' was clipped)) .PP The 'Half Size' button (or '<' key) halves the width and height of the picture. .PP The '+10%' button (or '.' key) adds 10% to the width and height of the picture. (Under the same constrant as 'Dbl Size'.) .PP The '-10%' button (or ',' key) subtracts 10% from the width and height of the picture. .PP NOTE: The '+10%' and '-10%' buttons are NOT complementary. If, for example, you have a 100x100 picture, '+10%' will make it into a 110x110 picture. If you then do '-10%', you will have a 99x99 picture. (10% of 110 = 11 ; 110 - 11 = 99) The '+10%' and '-10%' buttons have no concept of an 'original size' to use as an increment/decrement basis. They only expand or shrink the current picture by 10% of its current size. .PP The '4x3' button (or '4' key) attempts to resize the picture so that the ratio of width to height is equal to 4 to 3. (eg, 320x240, 400x300, etc.) This is quite useful because most images were meant to fill the screen of whatever they were generated on, and nearly all video screens have an aspect ratio of 4:3. By issuing this command, the picture will be stretched so the proportions of things will (possibly) look right on your X display. (Most of which, thank god, have square pixels.) This is particularly obvious on pictures that have really bizarre sizes (such as the 600x200 pictures presumably meant for CGA). .PP The 'Aspect' button (or 'a' key) applies the 'default aspect ratio' to the picture. (This is done automatically when the image is first loaded.) Normally, the default aspect ratio is '1:1', but certain GIF files may have an aspect ratio encoded in them. You can also set the default aspect ratio via a command-line argument or an X Resource. The idea here is that you'd stretch the picture manually (via your window manager) to roughly the size you'd like, then you'd click on 'Aspect' to fix-up the proportions. .PP The 'Rotate' button (or 'r' key) rotates the picture 90 degrees clockwise. It should be noted that when you rotate the picture, you are rotating the ENTIRE image, even if you're only viewing a small section of it (via cropping). .PP The 'Gamma' button (or 'g' key) opens up the GAMMA BOX. (See 'GAMMA BOX', below.) .PP The 'Info' button (or 'i' key) opens up the INFO BOX. (See 'INFO BOX', below.) .PP The 'Save' button (or 's' key) opens up the SAVE BOX. (See 'SAVE BOX', below.) .SH CROPPING In addition to being able to resize/rotate the image, you can do the same to any rectangular region of the image. By pressing the Middle mouse button in the picture window, and dragging it, you'll be able to draw a rectangle. When this rectangle is visible, the 'Crop' button in the CONTROL BOX lights up, enabling the 'Crop' command. .PP You can 'fine-tune' the cropping rectangle by using the arrow keys on your workstation. The arrow keys (unmodified) will move the cropping rectangle in the requested direction, preserving its current size. You can change the size of the cropping rectangle by holding the 'Shift' key down and using the arrow keys. 'Shift-Left' makes the rectangle narrower, 'Shift-Up' makes it shorter, 'Shift-Right' makes it wider, and 'Shift-Down' makes it taller. For precise cropping, you'll probably want the INFO BOX visible, which will tell you the position and size of the cropping rectangle, in image coordinates. .PP If you press the 'Crop' button (or the 'c' key), the parts of the picture outside the rectangle will disappear, and the window will shrink to the size of the rectangle. Also, the 'Crop' button will 'dim', and the 'UnCrop' button will light up. .PP You can manipulate this portion of the image exactly as if it were the entire image. You can even draw another 'cropping rectangle' on it and do the 'Crop' command again. .PP Pressing the 'UnCrop' button (or the 'u' key) (when lit) will return to manipulating the entire image. It will try to keep the current 'expansion', but if that would result in a picture larger than the screen, it will use the 'normal' size (defined in the description of the 'Normal' button). .SH MULTIPLE FILES If, when you started \fIxv\fP, you specified more than one file name, you'll be able to use the file-selection controls in the CONTROL BOX. .PP The CONTROL BOX will have a list of the filenames that you specified on the command line. The names will be shown without any common prefixes. For example, if you started \fIxv\fP with the command 'xv /pic/gif/*', the filenames will be shown without the leading '/pic/gif/'. The current filename will be shown in reverse video. .PP If there's more than a screenful of file names the scrollbar will be enabled. .PP You can scroll through the list a line at a time by using the up and down arrow buttons in the scroll bar. If you hold the button down, it will auto-repeat. If you click inside the gray region of the scrollbar, but not on the slider, the list will be scrolled up or down (depending on whether you clicked above or below the slider) a page at a time. If you click on the slider, you can drag it to another position and let go of it. .PP You can also scroll through the list by clicking on the list itself, (which will move the reverse video 'bar') and dragging up or down. .PP In short, it behaves like a Macintosh. .PP You can display any picture file by double-clicking on its filename. The current picture will go away, and the new picture will be displayed, if possible. If \fIxv\fP was unable to load the selected picture, the previous picture will be re-displayed. .PP If there are multiple files, and you aren't at the end of the list, the 'Next' button will be enabled. Clicking 'Next' (or pressing the RETURN or SPACEBAR keys) will close the current picture and bring up the next one. This is the normal way to view multiple images. .PP If there are multiple files, and you aren't at the beginning of the list, the 'Previous' button will be enabled. Clicking 'Prev' (or pressing the BACKSPACE or DELETE keys) will close the current picture and bring up the previous one. .PP It should be pointed out that all of these commands work whether or not the CONTROL BOX is visible (though if it's not visible, you'll obviously have to use the keyboard equivalents.) .SH QUITTING THE PROGRAM Pressing the 'Quit' button (or the 'q' key) will exit the program. .PP .SH THE INFO BOX The INFO BOX displays several bits of information. In addition to credits and a revision date, the INFO BOX displays information about the currently displayed picture. It shows the current file name, the format of the current file, its size, and its resolution. This information is available early in the loading process, and is displayed as soon is it is known. The rest of the lines are filled in after the picture has been loaded. .PP The 'Cropping' line displays the coordinates of the current cropping rectangle. Normally, this line says 'none', but if you draw a cropping rectangle on the picture (see CROPPING, above) it will display the size and position of the rectangle in Image Coordinates. The first two numbers are the width and height of the rectangle, respectively. The second pair of numbers specifies where the upper-left corner of the rectangle is, as an offset from the upper-left corner of the entire image. .PP The 'Expansion' line shows the effects of any stretching that you may have done to the picture. The first pair of numbers represent the stretching as a ratio of two scaling factors. Normally, they will be '1x1', which indicates that one data pixel maps to one screen pixel, in both x and y axes. For example, the values '2x3' would indicate that the image or sub-image has been made twice as wide as normal, and three times as high as normal. The second pair of numbers, (the ones in parenthesis) simply display the current screen size of the image. .PP The 'Colors' lines displays how successful the color allocation schemes have been. Normally, \fIxv\fP uses a three-pass color allocation algorithm. In the first pass, the program requests every color that the picture requires to be displayed properly. The results of this attempt are printed on the first 'Colors' line. If everything worked out perfectly, this line will say "Got all \fIx\fP desired colors.", and may append "(\fIy\fP unique)". In this string, \fIx\fP is the number of colors that the picture required. If the 'unique' string is appended, that means that some of the colors were duplicates of one another, and the picture only REALLY needed (and was only allocated) \fIy\fP colors. .PP If \fIxv\fP wasn't able to get all the colors it wanted, it will run the second-pass color allocation code. In this pass, the program will ask the display what colors it has available in its colormap, dtermine which of those colors are 'close' to the desired colors, and try to allocate those colors. The program will print "Got \fIx\fP 'close' colors." if it performed the second pass allocation. This is so that the user will know that image displayed is not as well as it could possibly be. .PP Finally, if even that didn't work, \fIxv\fP will normally attempt to 'borrow' colors from the colormap without actually allocating them. These colors are not owned by the program, and they can change without \fIxv\fP's knowledge. If this third pass is executed, the program will print "'Borrowed' \fIx\fP colors." .PP It should be noted that the '\fB\-noglob\fP', '\fB\-perfect\fP', and '\fB\-rw\fP' options modify the way color allocation is handled in \fIxv\fP, and will therefore modify what will be displayed in the INFO BOX. For example, if you specify '\fB\-noglob\fP', \fIxv\fP will never 'borrow' colors, so you'll never see a third-pass line. .PP Finally, the INFO BOX will display warning messages that occur while loading the image. In particular the message 'File appears truncated, winging it' comes to mind, from the GIF image loading code. .PP .SH THE GAMMA BOX The GAMMA BOX is used to control image brightness, contrast, and to get some fairly bizarre effects. The majority of this box is taken up by a window that displays the current gamma correction curve. This curve defines a mapping between the input values (0-255) along the \fIx\fP axis, and the output values (0-255) along the \fIy\fP axis. How these values are interpreted depends on the setting of the 'HSV/RGB Mode' button. (see below) .PP The gamma curve is defined by four 'control points', two of which are locked at the left and right edges of the window. These two points may only move up and down. The other two points may be moved freely around the window, subject only to the constraint that they cannot be moved past one another on the \fIx\fP axis. The 'left' point must stay to the left of the 'right' point. .PP The gamma curve can be adjusted in a variety of ways. You can change the curve directly by clicking on one of the control points and dragging it. Also, you can indirectly adjust the curve by using the 'Brighter', 'Dimmer', 'Sharper', and 'Duller' buttons. .PP The 'Apply' button takes the current gamma curve, and applies it to the ORIGINAL picture data, according to the setting of the 'HSV/RGB Mode' button, and displays the results. It's important to note that the gamma curve is always applied to the original data. It is not applied to the currently-displayed data. Thus, if you draw a gamma curve that makes pictures darker, and click 'Apply' several times, it will only (noticably) do anything the first time. It will NOT keep making the picture darker. Also, it should be noted that the apply button is very often unnecessary. If you are running on a 1-bit b/w display, or you specified '\fB\-ncols\fP 0' on the command line, the gamma curve will be automatically applied every time you DIRECTLY modify the curve (by dragging a control point). If you specified the '\fB\-rw\fP' option on the command line, the gamma curve will be automatically applied every time it is changed (by any means). (Keyboard equivalent: 'p') .PP The 'No Gamma' button shows the original picture with no gamma correction, but does not affect the current gamma curve. It just ignores it. You can use this command to do A/B comparisions between the original picture and your 'improved' version. .PP The 'Linear' button sets the gamma curve to a straight line from 0,0 to 255,255. This has the effect of displaying the picture without any apparent gamma correction, much like the 'No Gamma' command, however, this command also resets the curve. This command serves as an "Aaah! I've screwed it up horribly!" fix. .PP The 'Default' button sets the gamma curve to its default setting. Normally, this is a straight line, exactly the same as the 'Linear' command. However, by specifying the '\fB\-GAMMA\fP' option on the command line, or by defining the 'xv.gamma' resource, it is possible to the the default gamma correction to something else entirely. .PP The 'Spline' button is actually a two-state switch that displays its current setting. It controls how the four control points are connected. By default, they are connected by a spline curve. Unfortunately, some gamma curves are hard to get (or impossible) in this mode. Clicking the 'Spline' button will toggle it to 'Lines'. The control points will now be connected by straight lines. Clicking the button again will set it back to 'Spline'. .PP The 'Close' button hides the GAMMA BOX. Use the 'Gamma' command (see CONTROL BOX, above) to make it visible again. .PP The 'Brighter' button makes the picture brighter. Unless you're running in '\fB\-rw\fP' mode, you'll have to press 'Apply' to see the effect. .PP The 'Dimmer' button makes the picture dimmer. .PP The 'Sharper' button increases the contrast of the picture. .PP The 'Duller' button decreases the contrast of the picture. .PP The 'HSV/RGB Mode' button is a two-state switch that displays its current setting. It affects HOW the gamma curve is used. By default, it is in 'HSV Mode'. In this mode, the colors of the picture are converted from the RGB model (red, green, and blue) into the HSV model (hue, saturation, and value). The gamma curve is applied to the 'value' (brightness) of the HSV colors. The (modified) HSV colors are converted back to RGB colors so that they may be displayed. In this mode, colors are made brighter or dimmer, according to the curve, but their Hue and Saturation is not changed. This is generally the more desirable way to apply gamma correction to color pictures. .PP When the 'HSV/RGB Mode' button is in 'RGB Mode', the gamma curve is applied to each of the RGB components (red, green, and blue) separately. This can have some interesting effects, particularly when you use a drastic gamma correction curve. For example, assume a gamma curve that is a straight line from 0,255 to 255,0 (top-left to bottom-right, instead of the 'normal' bottom-left to top-right). In HSV Mode, this curve will merely take 'dark' colors and make them 'light', and vice-versa. (i.e., dark blue <-> light blue). The RGB Mode, on the other hand will COMPLEMENT the colors. (blue <-> yellow, red <-> cyan, and green <-> violet). Both modes will do (black <-> white), however. The RGB Mode is mainly for amusement value. .PP It should be noted that when viewing greyscale pictures, it makes no difference whether you are in HSV or RGB mode. Both modes will behave exactly the same. Also, note that when the '\fB\-rw\fP' option is specified, gamma correction is performed AFTER the reversal. .PP \fIxv\fP allows you to have four gamma 'presets'. By default, they have four vaguely useful curves. You can 'load' them by clicking on the '1', '2', '3', or '4' buttons, respectively. You can 'write' them by clicking 'Set', and clicking one of the numbered buttons. The current gamma correction curve will be 'stored' in the preset number you clicked, and will remain there until overwritten, or until you exit the program. .PP Notes: The Spline/Lines and HSV/RGB settings are NOT stored in the presets. A weakness, admittedly. You can specify your own 'default settings' for the presets by setting the X resources 'xv.gamma1', 'xv.gamma2', etc. .PP The 'Undo' button undoes the last change to the gamma curve. Currently, the undo buffer is eight slots long, so you can undo up to the last eight changes. There is no way to 'undo an undo', however. As with presets, the Spline/Lines and HSV/RGB settings are not saved, nor are they considered 'changes'. .PP At the top of the GAMMA BOX are six numbers that define the current gamma correction curve. The numbers are, in order, the y-coordinate of the first control point, the x- and y-coordinates of the second and third control points, and the y-coordinate of the fourth control point. These numbers appear in the same order that they would be specifed to the '\fB\-GAMMA\fP' command line option, or the 'xv.gamma', 'xv.gamma[1-4]' X resources. .PP .SH THE SAVE BOX When you issue the 'Save' command (by clicking the 'Save' button in the CONTROL BOX (above), or typing 's' in any of the \fIxv\fP windows, the SAVE BOX will appear, giving you an opportunity to write the current file to disk. The file will consist of the currently-visible portion of the picture. Normally, this would be the entire picture, but if you 'crop' first, and then save, it will only save the cropped-to region. If the picture has been rotated, the rotation will also be saved in the file. If a gamma correction curve has been applied to a picture, the picture will be saved with the gamma correction. .PP Major Bummer: As noted elsewhere, \fIxv\fP stores images internally as 8-bit colormapped images. If you load a 24-bit color image, it is converted to an 8-bit image IMMEDIATELY, and the 24-bit version is thrown away. As such, you do not REALLY want to use \fIxv\fP to modify (crop, rotate, etc.) 24-bit images, as much of the information will be lost in the translation. .PP Saved images are not affected by the display that they were saved on. For example, if you displayed a full-color image on a 1-bit b/w display, it would be dithered in black and white. If you save the image, by default, it will be saved as a full-color image. All the data will still be there. .PP When you open up the SAVE BOX, it will display the contents of the current directory in a scrollable list. Next to each file name will be an icon representing its file type. Subdirectories will be shown as 'file folders', for instance. You can go 'down' the directory tree by 'Open'-ing a subdirectory, either by clicking on its name and clicking the 'Open' button, or by double clicking on the name. (Note: You can only 'Open' directories and symbolic links. Other files are displayed merely as a navigational aid.) .PP You can go 'up' the directory tree by clicking on the button at the very top of the SAVE BOX. A pop-up menu will appear, with the current directory name at the top, and its parent directories listed below it. Drag the mouse to any directory in this list and let go. You will switch to that directory. .PP Once you are in the correct directory, you can save the file by typing a simple file name (no /'s) and clicking 'Save' or pressing return. Ctrl-U or Ctrl-K will clear the line. By default, the file will be saved as a full-color GIF file, in 'Normal Size'. You can choose the format by clicking on the buttons at the bottom of the window. Note that some combinations are not possible (for example, X11 Bitmaps can only be saved as 'B/W Dithered'). Also, the 'PBM (raw)' and 'PBM (ascii)' formats actually cover all PBM/PGM/PPM formats. The particular format is chosen according to the setting of the 'Colors' control. .PP The 'Cancel' button gets rid of the SAVE BOX. You'll have to issue the 'Save' command to make it visible again. .PP The 'Quit' button exits \fIxv\fP. It is provided as a convenience, as you'll often want to quit immediately after saving a file. .PP Note: Since the SAVE BOX is expecting you to type a file name, you cannot execute keyboard commands (see 'Shortcuts', below) while the keyboard focus is in this window (generally, whenever the mouse is in this window). .PP .SH COMMAND LINE OPTIONS There are a Vast Multitude of options. Note: only the first few unique characters of an option name are required. For example, '\fB\-d\fP' is a legal abbreviation for '\fB\-display\fP', but you'd have to give '\fB\-nc\fP' as an abbreviation for '\fB\-ncols\fP', because there's another option that starts with the letter 'n'. .PP That said... .SH GENERAL OPTIONS .IP \fB\-help\fP 12 Print usage instructions, listing the current available command-line options. Any unrecognized option will do this as well. .IP \fB\-display\fP 12 Specifies the display that \fIxv\fP should attempt to connect to. If you don't specify a display, \fIxv\fP will use the environment variable $DISPLAY. .IP \fB\-fg\fP 12 Sets the foreground color used by the windows. (Resource name: foreground. Type: string) .IP \fB\-bg\fP 12 Sets the background color used by the windows. (Resource name: background. Type: string) .IP \fB\-bw\fP 12 Sets the width of the border on the windows. Your window manager may choose to ignore this, however. (Resource name: borderWidth. Type: integer) .PP .SH WINDOW SIZING OPTIONS .IP \fB\-geometry\fP 12 Lets you specify the size and placement of the 'image' window. It's most useful when you only specify a position, and let \fIxv\fP choose the size. If you specify a size as well, \fIxv\fP will create a window of that size, unless '\fB\-fixed\fP' is specified. (Resource name: geometry. Type: string) .IP \fB\-fixed\fP 12 Only used in conjunction with the '\fB\-geometry\fP' option. If you specify a window size with the '\fB\-geometry\fP' option, \fIxv\fP will normally stretch the picture to exactly that size. This is not always desirable, as it may seriously distort the aspect ratio of the picture. Specifying the '\fB\-fixed\fP' option corrects this behavior. When you do this, \fIxv\fP will now use the geometry size as a MAXIMUM window size. It will, however, preserve the original aspect ratio of the picture. For example, if you give a rectangular geometry of '320x240', and you try to display a square picture of '256x256', the window opened will actually be '240x240', which is the largest square that still fits in the '320x240' rectangle that was specified. (resource name: fixed) .IP \fB\-expand\fP 12 Lets you specify an initial expansion or compression factor for the picture. It expects an integer value. Values larger than 1 multiply the picture's dimensions by the given factor. (ie, an expand factor of '3' will make a 320x200 image display as 960x600). Factors less than zero are treated as reciprocals. (ie, an expand factor of '-4' makes the picture 1/4th its normal size.) '0' is not a valid expansion factor. (resource name: expand) .IP \fB\-aspect\fP 12 Lets you set an initial aspect ratio, and also sets the value used by the 'Aspect' control. The aspect ratio of nearly every X display (and, in fact, any civilized graphics display) is 1:1. What this means is that pixels appear to be 'square'. A 100 pixel wide by 100 pixel high box will appear on the screen as a square. Unfortunately, this is not the case with some screens, and many digitizers. The '\fB\-aspect\fP' option lets you stretch the picture so that the picture appears correctly on your display. Unlike the other size-related options, this one doesn't care what the size of the overall picture is. It operates on a pixel-by-pixel basis, stretching each image pixel slightly, in either width or height, depending on the ratio. Aspect ratios greater than '1' make the picture wider than normal. Aspect ratios less than 1 make the picture taller than normal. (Useful aspect ratio: A 512x480 image that was supposed to fill a standard 4x3 video screen should be displayed with an aspect ratio of 5:4) (Resource name: aspect. Type: string) .PP .SH COLOR ALLOCATION OPTIONS .IP \fB\-ncols\fP 12 Sets the maximum number of colors that \fIxv\fP will use. Normally, this is set to 'as many as it can get'. (ie, 2^(depth of screen)) However, you can set this to smaller values for interesting effect. Most notably, if you set it to '0', it will display the picture by dithering with 'black' and 'white'. (The actual colors used can be set by the '\fB\-black\fP' and '\fB\-white\fP' options, below.) (Resource name: ncols. Type: integer) .IP \fB\-nglobal\fP 12 Adjusts the way the program behaves when it is unable to get all the colors it requested. Normally, it will search the display's default colormap, and 'borrow' any colors it deems appropriate. These borrowed colors are, however, NOT owned by \fIxv\fP, and as such, can changed without \fIxv\fP's permission, or knowledge. If this happens, the displayed picture will change, in a less-than-desirable direction. If you specify the '\fB\-nglobal\fP' option, \fIxv\fP will not use 'global' colors. It will only use colors that it successfully allocated, which makes it immune to any color changes. (Resource name: nglobal. Type boolean) .IP It should be noted that 'use global colors' is the default because color changes aren't generally a problem if you are only using \fIxv\fP to display a picture for a short time. Color changes only really become a problem if you use \fIxv\fP to display a picture that you will be keeping around for a while, while you go and do some other work (such as using \fIxv\fP to display a background). In such cases you will want to specify '\fB\-nglobal\fP'. Note: using the '\fB\-ncols\fP' or '\fB\-root\fP' options automatically turn on '\fB\-nglobal\fP'. .IP \fB\-rw\fP 12 Tells \fIxv\fP to use read/write color cells. Normally, \fIxv\fP allocates colors read-only, which allows it to share colors with other programs. If you use read/write color cells, no other program can use the colors that \fIxv\fP is using, and vice-versa. The only reason you'd do such a thing is that using read/write color cells allows the 'Apply' function in the Gamma window to operate many times faster. (Resource name: rwColor. Type: boolean) .IP \fB\-perfect\fP 12 Makes \fIxv\fP try 'extra hard' to get all the colors it wants. In particular, when '\fB\-perfect\fP' is specified, \fIxv\fP will allocate and install its own colormap if (and only if) it was unable to allocate all the desired colors. This option is not allowed in conjunction with the '\fB\-root\fP' option. (Resource name: perfect. Type boolean) .IP \fB\-ninst\fP 12 Prevents \fIxv\fP from 'installing' its own colormap, when the '\fB\-perfect\fP' option is in effect. Instead of installing the colormap, it will merely 'ask the window manager, nicely' to take care of it. This is the correct way to install a colormap (ie, ask the WM to do it), unfortunately, it doesn't actually seem to work in many window managers, so the default behavior is for \fIxv\fP to handle installation itself. However, this has been seen to annoy one window manager (dxwm), so this option is provided if your WM doesn't like programs installing their own colormaps. Note that this is ONLY relevant if A) '\fB\-perfect\fP' has been specified and B) \fIxv\fP ran out of colors and generated its own colormap. (Resource name: ninstall. Type: boolean) .PP .SH 24 BIT CONVERSION OPTIONS The following options only come into play if you are using \fIxv\fP to display 24-bit RGB data (PPM files, color PM files, and the output of \fIbggen\fP). They have no effect whatsoever on how GIF pictures or 8-bit greyscale images are displayed. .IP \fB\-slow24\fP 12 Specifies that the 'alternate' 24-bit to 8-bit conversion algorithm is to be used by the program. The default algorithm dithers the picture using a fixed set of colors that roughly approximate all displayable colors. The '\fB\-slow24\fP' algorithm picks the 'best' colors on a per-image basis, and dithers with those. Advantages: The '\fB\-slow24\fP' algorithm often produces better looking pictures. Disadvantages: The '\fB\-slow24\fP' algorithm is about half the speed of the default algorithm. Since the colors are chosen on a per-image basis, it can't be used to display multiple images, as each image will almost certainly want a different set of 256 colors. The default algorithm, however, uses the same exact colors for all images, so it can display many images simultaneously, without running out of colors. Also, the '\fB\-slow24\fP' algorithm occasionally produces worse-looking pictures than the default algorithm, particularly on displays with very few colors. The default algorithm produces nice, dependably 'okay' pictures. (Resource name: slow24. Type: boolean) .IP \fB\-noqcheck\fP 12 Turns off a 'quick check' that is normally made. Normally, before running either of the 24-bit to 8-bit conversion algorithms, \fIxv\fP determines whether the picture to be displayed has more than 256 unique colors in it. If the picture doesn't, it will treat the picture as an 8-bit colormapped image (ie, GIF), and won't run either of the conversion algorithms. Advantages: The pictures will be displayed 'perfectly', whereas if they went through either of the conversion algorithms, they'd be dithered. Disadvantages: Often uses a lot of colors, which limits the ability to view multiple images at once. (See the '\fB\-slow24\fP' option above for further info about color sharing.) (Resource name: noqcheck. Type: boolean) .PP .SH ROOT WINDOW OPTIONS \fIxv\fP has the ability to display images on the root window of an X display, rather than opening its own window (the default behavior). When using the root window, the program is somewhat limited, because the program cannot receive input events (key press and mouse clicks) from the root window. As a result, you cannot track pixel values, or crop, nor can you use keyboard commands while the mouse is in the root window. .IP \fB\-root\fP 12 Directs \fIxv\fP to display images in the root window, instead of opening its own window. Images will be displayed in the upper left corner of the screen, and will be repeated as many times as necessary to fill the entire screen. (Resource name: ) .IP \fB\-tile\fP 12 Makes \fIxv\fP shrink images so that they fit on the screen an integer number of times (in both directions). The default behavior will generally chop off the bottom and right sides of the images along the bottom and right sides of the screen. Disadvantage: will slightly change the aspect ratios of the images. (Resource name: tile. Type: boolean) .IP \fB\-max\fP 12 Makes \fIxv\fP automatically stretch the image to the full size of the screen. This is mostly useful when you want \fIxv\fP to display a background. While you could just as well specify the dimensions of your display (ie, '\fB\-geom\fP 1152x900' for example), the \fB\-max\fP option is display-independent. If you suddenly decide to start working on a 1280x1024 display (ferinstance) the same command will still work. Note: If you specify '\fB\-max\fP' when you AREN'T using '\fB\-root\fP', the behavior is slightly different. The image will be made as large as possible while still preserving the normal aspect ratio. (Resource name: ) .IP \fB\-quit\fP 12 Makes \fIxv\fP display the (first) specified file and exit, without any user intervention. Since images displayed on the root window remain there until explicitly cleared, this is very useful for having \fIxv\fP display background images on the root window in some sort of start-up script. Needless to say, this is only useful if you are using '\fB\-root\fP'. (Resource name: ) .IP \fB\-clear\fP 12 Clears the root window of any extraneous \fIxv\fP images. While there are other ways of clearing the root window of an X display, such as 'xsetroot', you must use the '\fB\-clear\fP' option to free up the other resources allocated by \fIxv\fP, in particular, the colormap entries. Note: it is not necessary to do an 'xv -clear' before displaying another picture in the root window. \fIxv\fP will detect that there's an old \fIxv\fP image in the root window and automatically clear it out (and free the associated colors). (Resource name: ) .PP .SH WINDOW OPTIONS \fIxv\fP currently consists of four main windows, plus one window for the actual image. Of those four, three of them (the CONTROL BOX, the INFO BOX, and the GAMMA BOX) may be automatically mapped and positioned when the program starts. .IP \fB\-cmap\fP 12 Maps the CONTROL BOX. (Resource name: ctrlMap. Type: boolean) .IP \fB\-cgeom\fP 12 Sets the initial geometry of the CONTROL BOX. Note: only the position information is used. The CONTROL BOX is of fixed size. (Resource name: ctrlGeometry. Type: string) .IP \fB\-imap\fP 12 Maps the INFO BOX. (Resource name: infoMap. Type: boolean) .IP \fB\-igeom\fP 12 Sets the initial geometry of the INFO BOX. Note: only the position information is used. The INFO BOX is of fixed size. (Resource name: infoGeometry. Type: string) .IP \fB\-gmap\fP 12 Maps the GAMMA BOX. (Resource name: gammaMap. Type: boolean) .IP \fB\-ggeom\fP 12 Sets the initial geometry of the GAMMA BOX. Note: only the position information is used. The GAMMA BOX is of fixed size. (Resource name: gammaGeometry. Type: string) .PP .SH MISCELLANEOUS OPTIONS .IP \fB\-rv\fP 12 Reverses the colors of the image, so that white becomes black and black becomes white. This has 'interesting' effects on color images, however. (For instance, red (255,0,0) becomes cyan (0,255,255)) (Resource name: reverseVideo. Type: boolean) .IP \fB\-mono\fP 12 Forces the image to be displayed as a grayscale. This is most useful when you are using certain grayscale X displays. While \fIxv\fP attempts to determine if it's running on a grayscale display, many X displays \fIlie\fP, and claim to be able to do color. (This is often because they have color graphics boards hooked up to b/w monitors. The computer, of course, has no way of knowing what type of monitor is attached.) On these displays, if you don't specify '\fB\-mono\fP', what you will see is a grayscale representation of one of the RGB outputs of the system. (For example, you'll see the 'red' output on our grayscale Sun 3/60s.) The '\fB\-mono\fP' option corrects this behavior. (Resource name: mono. Type: boolean) .IP \fB\-white\fP 12 Specifies the 'white' color used when the picture is b/w stippled. (When '\fB\-ncols\fP 0' has been specified.) (Resource name: white. Type: string) .IP \fB\-black\fP 12 Specifies the 'black' color used when the picture is b/w stippled. (When '\fB\-ncols\fP 0' has been specified.) Try something like 'xv -ncols 0 -bl red -wh yellow ' for some interesting, late-'60s-style psychodelia effects. (Resource name: black. Type: string) .IP \fB\-GAMMA\fP 12 Sets up the default gamma-correction curve. It can be used for contrast and/or brighness control. The curve defines a transformation between input pixel intensity values (from the picture) and output pixel intensity values (which get displayed). The curve is specified by four points in the range 0,0 <-> 255,255. The points must be in strict left-to-right order. The first point is fixed at x=0. The last point is fixed at x=255. The parameters to the '\fB\-GAMMA\fP' option are, in order, the y-value of the first point, the x and y values of the second point, the x and y values of the third point, and the y value of the last point. (These are the same numbers that appear above the gamma correction curve in the GAMMA BOX (see below)). (Resource name: gamma. Type: six integers) .IP You can also specify default values for the 4 gamma 'presets' in the GAMMA BOX. The format is the same as above, and the resource names are 'gamma1', 'gamma2', 'gamma3', and 'gamma4'. .IP \fB\-autogamma\fP 12 Tells \fIxv\fP to apply the 'default' gamma correction (set by the '\fB\-GAMMA\fP' option or the 'gamma' resource) to the image automatically, before the image is ever displayed. (Resource name: autoGamma) .IP \fB\-fish\fP 12 Turns on some animated fish that are displayed whenever \fIxv\fP is loading or resizing an image. Note: This option may cause 'X Protocal Errors' on slower X displays. Use at your own risk. (Resource name: fish. Type: boolean) .IP \fB\-wait\fP 12 Turns on a 'slide-show' feature. Normally, if you specify multiple input files, \fIxv\fP will display the first one, and wait for you to give the 'Next' command (or whatever). The '\fB\-wait\fP' option makes \fIxv\fP wait the specified number of seconds, and then go on to the next picture, without any user intervention. The program still accepts commands, so it's possible to 'abort' the current picture without waiting the full specified time by using the 'Next' command. (Resource name: ) .PP .SH SHORTCUTS Commands and their keyboard equivalents: .in +0.5i .ta 3in .nf Next Picture: , .br Previous Picture: , .br Quit XV: 'q' .br Open/Close Control Box: 'h', '?', Right Mouse Button .br Open/Close Info Box: 'i' .br Open/Close Gamma Box: 'g' .br Open Save Box: 's' .br Aspect: 'a' .br Rotate: 'r' .br 4x3: '4' .br Crop: 'c' .br Uncrop: 'u' .br Normal: 'n' .br Max Size: 'm' .br Shrink 10%: ',' .br Grow 10%: '.' .br Half Size: '<' .br Double Size: '>' .br Apply Gamma: 'p' .ta .in -0.5i .fi .PP .SH LIMITATIONS \fIxv\fP will NOT work on displays that aren't 1-, 4-, 6-, 8-, or 24-bits deep. Luckily, that should still cover nearly every display out there. It may not work on certain 6- or 24-bit displays. .PP It also only displays the first image in GIF files that have multiple images in them. .PP As for PM pictures, this program only displays 1-plane PM_I pictures, or 1-, 3-, or 4-plane PM_C pictures. .PP .SH PM FORMAT The PM format is a file format that we use at the GRASP Lab for our image- processing work. If you aren't at Penn, you are unlikely to ever run into a PM-format file, so don't worry about it. Please ignore all references to PM. .PP BUGS The 4-, 6-, and 24-bit code has not been extensively tested. (A 4-bit MicroVax GPX system, a 6-bit HP 9000/320, and a 24-bit HP 9000/350, respectively.) You won't be able to do '\fB\-ncols\fP 0' on a 6- or 24-bit display. .SH AUTHOR John Bradley - bradley@cis.upenn.edu .PP GIF reading code based on gif2ras.c, by Patrick J. Naughton (naughton@wind.sun.com) .PP GIF writing code essentially unchanged from code written by Michael Maudlin (mlm@cs.cmu.edu). \BARFOO\ else echo "will not over write ./docs/xv.man" fi echo "Finished archive 7 of 8" exit dan ---------------------------------------------------- O'Reilly && Associates argv@sun.com / argv@ora.com Opinions expressed reflect those of the author only.