summaryrefslogtreecommitdiff
path: root/doc/gimpprint.info-5
diff options
context:
space:
mode:
Diffstat (limited to 'doc/gimpprint.info-5')
-rw-r--r--doc/gimpprint.info-5872
1 files changed, 872 insertions, 0 deletions
diff --git a/doc/gimpprint.info-5 b/doc/gimpprint.info-5
new file mode 100644
index 0000000..672a377
--- /dev/null
+++ b/doc/gimpprint.info-5
@@ -0,0 +1,872 @@
+This is gimpprint.info, produced by makeinfo version 4.0 from
+gimpprint.texi.
+
+INFO-DIR-SECTION Libraries
+START-INFO-DIR-ENTRY
+* GIMP-Print: (gimpprint). print plugin for the GIMP, and printing library
+END-INFO-DIR-ENTRY
+
+ This file documents the gimpprint library and associated programs
+used for high quality printing.
+
+ Copyright (C) 2001 Michael Sweet (<mike@easysw.com>) and Robert
+Krawitz (<rlk@alum.mit.edu>)
+
+ Permission is granted to make and distribute verbatim copies of this
+manual provided the copyright notice and this permission notice are
+preserved on all copies.
+
+ Permission is granted to copy and distribute modified versions of
+this manual under the conditions for verbatim copying, provided that
+the entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+ Permission is granted to copy and distribute translations of this
+manual into another language, under the above conditions for modified
+versions, except that this permission notice may be stated in a
+translation approved by the Foundation.
+
+
+File: gimpprint.info, Node: Epson inkjet printers, Next: Tuning Epson printers, Prev: Driver file, Up: New Printer
+
+Epson inkjet printers
+=====================
+
+ The `model_capabilities' vector in `print-escp2.c' contains one
+entry for each defined printer model. The `model' parameter in
+`printers.xml' is an index into this table.
+
+ In general, the new printers have fewer eccentricities than the older
+printers. That doesn't mean they're simpler, just that they're more
+consistent.
+
+ An `escp2_printer_t' is a C struct defined as follows:
+
+ - Data type: escp2_printer_t
+ typedef struct escp2_printer
+ {
+ model_cap_t flags; /* Bitmask of flags, see below */
+ /*****************************************************************************/
+ int nozzles; /* Number of nozzles per color */
+ int min_nozzles; /* Minimum number of nozzles per color */
+ int nozzle_separation; /* Separation between rows, in 1/360" */
+ int black_nozzles; /* Number of black nozzles (may be extra) */
+ int min_black_nozzles; /* # of black nozzles (may be extra) */
+ int black_nozzle_separation; /* Separation between rows */
+ int fast_nozzles; /* Number of fast nozzles */
+ int min_fast_nozzles; /* # of fast nozzles (may be extra) */
+ int fast_nozzle_separation; /* Separation between rows */
+ /*****************************************************************************/
+ int xres; /* Normal distance between dots in */
+ /* softweave mode (inverse inches) */
+ int enhanced_xres; /* Distance between dots in highest */
+ /* quality modes */
+ int base_separation; /* Basic unit of row separation */
+ int base_resolution; /* Base hardware spacing (above this */
+ /* always requires multiple passes) */
+ int enhanced_resolution;/* Above this we use the */
+ /* enhanced_xres rather than xres */
+ int resolution_scale; /* Scaling factor for ESC(D command */
+ int max_black_resolution; /* Above this resolution, we */
+ /* must use color parameters */
+ /* rather than (faster) black */
+ /* only parameters*/
+ int max_hres;
+ int max_vres;
+ int min_hres;
+ int min_vres;
+ /*****************************************************************************/
+ int max_paper_width; /* Maximum paper width, in points */
+ int max_paper_height; /* Maximum paper height, in points */
+ int min_paper_width; /* Maximum paper width, in points */
+ int min_paper_height; /* Maximum paper height, in points */
+ /* Printer interleave: */
+ int m_left_margin; /* Left margin, points */
+ int m_right_margin; /* Right margin, points */
+ int m_top_margin; /* Absolute top margin, points */
+ int m_bottom_margin; /* Absolute bottom margin, points */
+ /* ROLL FEED: */
+ /* Softweave: */
+ int roll_left_margin; /* Left margin, points */
+ int roll_right_margin; /* Right margin, points */
+ int roll_top_margin; /* Absolute top margin, points */
+ int roll_bottom_margin; /* Absolute bottom margin, points */
+ /* Printer interleave: */
+ int m_roll_left_margin; /* Left margin, points */
+ int m_roll_right_margin; /* Right margin, points */
+ int m_roll_top_margin; /* Absolute top margin, points */
+ int m_roll_bottom_margin; /* Absolute bottom margin, points */
+ /*****************************************************************************/
+ int extra_feed; /* Extra distance the paper can be spaced */
+ /* beyond the bottom margin, in 1/360". */
+ /* (maximum useful value is */
+ /* nozzles * nozzle_separation) */
+ int separation_rows; /* Some printers require funky spacing */
+ /* arguments in interleave mode. */
+ int pseudo_separation_rows;/* Some printers require funky */
+ /* spacing arguments in softweave mode */
+
+ int zero_margin_offset; /* Offset to use to achieve */
+ /* zero-margin printing */
+ int initial_vertical_offset;
+ int black_initial_vertical_offset;
+ int extra_720dpi_separation;
+
+ /*****************************************************************************/
+ const int *dot_sizes; /* Vector of dot sizes for resolutions */
+ const double *densities; /* List of densities for each printer */
+ const escp2_variable_inklist_t *inks; /* Choices of inks for this printer */
+ /*****************************************************************************/
+ const paperlist_t *paperlist;
+ const res_t *reslist;
+ const inklist_t *inklist;
+ /*****************************************************************************/
+ const int *bits;
+ const int *base_resolutions;
+ const input_slot_list_t *input_slots;
+ /*****************************************************************************/
+ const init_sequence_t *preinit_sequence;
+ const init_sequence_t *postinit_remote_sequence;
+ } escp2_printer_t;
+
+ The printer definition block is divided into 8 sections. The first
+section is a set of miscellaneous printer options. These are described
+in the code, and will not be discussed further here.
+
+ The second section describes the number of nozzles and the separation
+between nozzles in base units. The base unit is 1/360" for all
+currently supported printers, but future printers may support a smaller
+base unit.
+
+ Many printers have more black nozzles than nozzles of other colors,
+and when used in black and white mode, it's possible to use these extra
+nozzles, which speeds up printing. As an example, a printer that is
+specified to have 48 cyan, magenta, and yellow nozzles, and 144 black
+nozzles, can use all 144 black nozzles when printing black ink only.
+When printing in color, only 48 nozzles of each color (including black)
+can be used.
+
+ Most printers can print using either the number of nozzles available
+or any smaller number. Some printers require that all of the nozzles
+be used. Those printers will set `min_nozzles' and/or
+`min_black_nozzles' to the same value as `nozzles' and/or
+`black_nozzles'.
+
+ The third section defines basic units of measure for the printer,
+including the standard separation between dots, the base nozzle
+separation, and the minimum and maximum printing resolutions the
+printer supports. Most of these are fairly self-explanatory, but some
+are not obvious.
+
+ Most Epson printers, other than the high-end Stylus Pro models,
+cannot print dots spaced more closely than 1/360" or 1/720" apart (this
+is the setting for `xres'. This is true even for printers that support
+resolutions of 1440 or 2880 DPI. In these cases, the data must be
+printed in 2, 4, or 8 passes. While the printer can position the head
+to a resolution of 1/1440" or 1/2880", the head cannot deposit ink that
+frequently.
+
+ Some printers can only print in their very best quality (using the
+smallest dots available) printing at a lower resolution. For example,
+the Stylus Photo EX can normally print with a dot spacing of 1/720".
+The smallest dot size cannot be printed with a dot spacing of less than
+1/360", however. In this case, we use `enhanced_xres' to specify the
+resolution to be used in this enhanced mode, and `enhanced_resolution'
+to specify the printing resolution above which we use the
+`enhanced_xres'.
+
+ The `resolution_scale' command is used to specify scaling factors
+for the dot separation on newer printers. It should always be 14400
+with current printers.
+
+ The fourth section specifies the minimum and maximum paper sizes, and
+the margins. Some printers allow use of narrower margins when
+softweave is used; both sets of margins are specified.
+
+ There is a convenient `INCH' macro defined to make specification of
+the `max_paper_width' and `max_paper_height' more legible. It
+multiplies 72 by the provided expression to get the appropriate number
+of points. For example, to specify 8.5", `INCH(17/2)' expands to `(72
+* 17/2)', which is evaluated left to right, and hence generates the
+correct value.
+
+ The fifth section specifies some miscellaneous values that are
+required for certain printers. For most printers, the correct values
+are 1 for `separation_rows' and 0 for the others. Very, very few
+printers require (or allow) `separation_rows' to be anything but 1 and
+`pseudo_separation_rows' other than zero. The Stylus Color 1520,
+Stylus Color 800, Stylus Color 850, and (strangely enough to my mind,
+since it's a new printer) Stylus Color 660 seem to be the only
+exceptions.
+
+ The `zero_margin_offset' is used to specify an additional negative
+horizontal offset required to print to the edges of the paper on newer
+Stylus Photo printers. These must be determined empirically; good
+starting values are 100 for 1440 DPI and 50 for 2880 DPI printers. The
+goal is to print to the edge of the page, but not over it.
+
+ The sixth section specifies head offsets for printers that do not
+have the color jets aligned. Certain printers, such as the Stylus Color
+480, have an unusual head arrangement whereby instead of all of the
+colors being aligned vertically, the nozzles are configured in groups.
+These printers are easy to determine; if the normal head offset of zero
+for each color is used, the printing will be vertically out of
+alignment. Most of these printers require specification of a negative
+offset for printing to the top edge of the paper; typically these
+printers do not require such an offset when printing black only.
+
+ The seventh section specifies the most difficult values to tune, the
+dot sizes, printing densities, and ink values (for variable dot size
+enabled printers). These will be described in detail below.
+
+ The last section specifies luminosity, hue, and saturation adjustment
+vectors for the printer, and the paper definitions. These are used to
+adjust the color in Photograph and Solid Colors output modes. These are
+each vectors of 48 (actually 49, as the first value must be duplicated)
+doubles that remap the luminosity, hue, and saturation respectively.
+The hue is calculated, and the value used to interpolate between the two
+closest points in each vector.
+
+ The paper definitions is a set of paper definitions. The paper
+definition contains the name of the paper type, special settings that
+are required for printers to process the paper correctly, and a set of
+adjustment values. These are not currently discussed here.
+
+ The lists of dot sizes and densities contain values for 13 printing
+modes: 120/180 DPI using printer weaving (single row; referred to as
+"interleave") and "soft" weaving (the driver determines the exact
+pattern of dot layout), 360 DPI interleave and softweave, 720x360 DPI
+interleave and softweave, 720 DPI interleave and softweave, 1440x720
+interleave and softweave, 2880x720 interleave and softweave, and
+2880x1440 softweave only.
+
+ For the dot sizes, the value for each element in the vector selects
+the dot size to be used when printing at this (or similar) resolution.
+The dot sizes are determined by consulting the programming manual for
+the printer and experimenting as described below. Current Epson
+printers always use dot sizes less than `16', or `0x10', to indicate
+single dot size (each dot is represented by 1 bit, and it's either
+printed or not), and dot sizes of `16' or greater to indicate variable
+dot size (each dot is represented by 2 bits, and it can either be not
+printed or take on 2 or 3 values, representing the relative size of the
+printed dot). Variable dot sizes permit the use of very small dots
+(which would be too small to fill the page and produce solid black) in
+light areas, while allowing the page to be filled with larger dots in
+darker areas.
+
+ Even single dot size printers can usually produce dots of different
+sizes; it's just illegal to actually try to switch dot size during a
+page. These dots are also much bigger than those used in true variable
+dot size printing.
+
+ A dot size of `-1' indicates that this resolution is illegal for the
+printer in question. Any resolutions that would use this dot size will
+not be presented to the user. A dot size of `-2' indicates that this
+resolution is legal, but that the driver is not to attempt to set any
+dot size. Some very old printers do not support the command to set the
+dot size.
+
+ Most printers support a dot size of `0' as a mode-specific default,
+but it's often a bigger dot than necessary. Printers usually also
+support some dot sizes between `1' and `3'. Usually `1' is the right
+dot size for 720 and 1440 dpi printing, and `3' works best at 360 dpi.
+
+ Variable dot size printers usually support 2 or 3 sets of variable
+dot sizes. Older printers based on a 6 picolitre drop (the 480, 720,
+740, 750, 900, and 1200) support two: mode 16 (0x10 in hexadecimal) for
+normal variable dots at 1440 or 720 dpi, and mode 17 (0x10) for special
+larger dots at 360 dpi. Newer printers based on 4 picolitre drops
+normally support three sizes: `0x10' for 4 pl base drops, `0x11' for 6
+pl base drops, and `0x12' for special large drops. On these printers,
+`0x10' usually works best at 1440x720 and `0x11' works best at 720x720.
+Unfortunately, `0x10' doesn't seem to generate quite enough density at
+720x720, because if it did the output would be very smooth. Perhaps
+it's possible to tweak things....
+
+ The list of densities is a list of base density values for all of the
+above listed modes. "Density" refers to the amount of ink deposited
+when a solid color (or solid black) is printed. So if the density is
+`.5', solid black actually prints only half the possible dots. "Base
+density" refers to the fact that the density value can be scaled in the
+GUI or on the Ghostscript command line. The density value specified
+(which is not made visible to the user) is multiplied by the base
+density to obtain the effective density value. All other things (such
+as ink drop size) remaining the same, doubling the resolution requires
+halving the base density. The base density in the density vector may
+exceed `1', as many paper types require lower density than the base
+driver. The driver ensures that the actual density never exceeds 1.
+
+ Tuning the density should be done on high quality paper (usually
+glossy photo paper). The goal is to find the lowest density value that
+results in solid black (no visible gaps under a fairly high power
+magnifying glass or loupe). If an appropriate density value is found
+for 720 DPI, it could be divided by 2 for 1440x720, by 4 for 2880x720,
+and by 8 for 2880x1440.
+
+ However, for printers that offer a choice of dot size, this may not
+be the best strategy. The best choice for dot size is the smallest dot
+size that allows choosing a density value not greater than 1 that gives
+full coverage. This dot size may be different for different
+resolutions. Tuning variable dot size printers is more complicated;
+the process is described below.
+
+ The last member is a pointer to a structure containing a list of ink
+values for variable dot size (or 6 color) inks. We model variable dot
+size inks as producing a certain "value" of ink for each available dot
+size, where the largest dot size has a value of 1. 6-color inks are
+handled similarly; the light cyan and light magenta inks are treated as
+a fractional ink value. The combination of variable dot size and 6
+color inks, of course, just creates that many more different ink
+choices.
+
+ This structure is actually rather complicated; it contains entries
+for each combination of physical printer resolution (180, 360, 720, and
+1440 dpi), ink colors (4, 6, and 7), and single and variable dot sizes
+(since some printer modes can't handle variable dot size inks). Since
+there's so much data, it's actually a somewhat deeply nested structure:
+
+ An `escp2_printer_t' contains a pointer (essentially, a reference
+rather than a copy) to an `escp2_variable_inklist_t'.
+
+ An `escp2_variable_inklist_t' contains pointers to
+`escp2_variable_inkset_t' structures. There is one such pointer for
+each combination of resolution, dot type, and ink colors as described
+above. Yes, this is rather inflexible.
+
+ An `escp2_variable_inkset_t' contains pointers to
+`escp2_variable_ink_t' structures. There is one such pointer for each
+of the four colors (C, M, Y, and K).
+
+ An `escp2_variable_ink_t' contains a pointer to the actual list of
+ink values (`simple_dither_range_t'), the number of ink values, and a
+density value to be used for computing the transitions. This density
+value is actually a scaling value; it is multiplied by the effective
+density to compute the density to be used for computing the transitions.
+Normally, this value is `1', but in some cases it may be possible to
+get smoother results with a different value (in particular, the single
+dot size 6-color inks work best with the effective density scaled to
+`.75' for this purpose). A lower density lowers the transition points,
+which results in more ink being deposited.
+
+ A `simple_dither_range_t' is a structure containing four values:
+
+ 1. The value of the particular ink
+
+ 2. The bit pattern used to represent the ink
+
+ 3. Whether the ink is light (0) or dark (1), for inks with light and
+ dark variants
+
+ 4. The relative amount of ink actually deposited by this dot (not
+ currently used for much; it can be used for ink reduction
+ purposes, to reduce the amount of ink deposited on the paper).
+
+ These things are interesting as arrays. From an array of
+`simple_dither_range_t''s, the dither code computes transition values
+that it looks up at run time to decide what ink to print, as well as
+whether to print at all.
+
+ *Really* confused now? Yup. You'll probably find it easier to
+simply read the code.
+
+
+File: gimpprint.info, Node: Tuning Epson printers, Next: Canon inkjet printers, Prev: Epson inkjet printers, Up: New Printer
+
+Tuning the printer
+==================
+
+ Now, how do you use all this to tune a printer? There are a number
+of ways to do it; this one is my personal favorite.
+
+ There's a file named `cyan-sweep.tif'. This consists of a thin bar
+of cyan sweeping from white to almost pure cyan, and from pure cyan to
+black. The first thing to do is to pick the appropriate
+`simple_dither_range_t' (or create a whole new
+`escp2_variable_inklist_t') and comment out all but the darkest ink
+(this means you'll be using the largest dots of dark ink). At 8.5"
+width (the width of a letter-size piece of paper), the bar will be 1/8"
+high. Printing it on wider or narrower paper will change the height
+accordingly. Print it width-wise across a piece of photo quality paper
+in line art mode using ordered or adaptive hybrid dither. Do not use
+photographic mode; the colors in photographic mode vary non-linearly
+depending upon the presence of the three color components, while in line
+art mode the colors are much purer. Make sure that all the color
+adjustments are set to defaults (1.0). Use the highest quality version
+of the print mode you're testing to reduce banding and other artifacts.
+This is much easier to do with the Gimp than with Ghostscript.
+
+ At this stage, you want to look for four things:
+
+ 1. The black near the center of the line is solid, but not more so
+ than that.
+
+ 2. The cyan immediately to the left of the black is _almost_ solid.
+
+ 3. The dark cyan at the far right of the page is solid, but not more
+ so. You can try tuning the density so that it isn't quite solid,
+ then nudging up the density until it is.
+
+ 4. Both sweeps sweep smoothly from light to dark. In particular, the
+ dark half of the bar shouldn't visibly change color; it should go
+ smoothly from cyan to black.
+
+ Repeat this stage until you have everything just right. Use the
+positioning entry boxes in the dialog to position each bar exactly 1/8"
+further down the page. Adjacent bars will be touching.
+
+ The next step is to uncomment out the second darkest dot size. If
+you're using variable dots, use the second largest dot size of the dark
+ink rather than the largest dot size of the light ink. This will give
+you two inks.
+
+ When you recompile the plugin, you simply need to copy the new
+executable into the correct place. You do not need to exit and restart
+the Gimp.
+
+ Print another bar adjacent to the first one. Your goal is to match
+the bar using a single dot size as closely as possible. You'll find
+that the dark region of the bar shouldn't change to any great degree,
+but the light half probably will. If the lighter part of the light
+half is too dark, you need to increase the value of the smaller dot; if
+it's too light, you need to decrease the value. The reasoning is that
+if the value is too low, the ink isn't being given enough credit for
+its contribution to the darkness of the ink, and vice versa. Repeat
+until you have a good match. Make sure you let the ink dry fully,
+which will take a few minutes. Wet ink will look too dark. Don't look
+at the paper too closely; hold it at a distance. The extra graininess
+of the largest dot size will probably make it look lighter than it
+should; if you hold it far enough away so that you can't see the dots,
+you'll get a more accurate picture of what's going on.
+
+ After you have what looks like a good match, print another bar using
+only the largest dot size (or dark ink, for single dot size 6-color
+printers). You want to ensure that the bars touching each other look
+identical, or as close as possible to it; your eye won't give you a
+good reading if the bars are separated from each other. You'll
+probably have to repeat the procedure.
+
+ The next step is to comment out all but the largest and third-largest
+dot size, and repeat the procedure. When they match, use all three dot
+sizes of dark ink. Again, the goal is to match the single dot size.
+
+ You'll probably find the match is imperfect. Now you have to figure
+out what region isn't right, which takes some experimentation. Even
+small adjustments can make a noticeable difference in what you see. At
+this stage, it's very important to hold the page far enough from your
+eye; when you use all three dot sizes, the texture will be much more
+even, which sometimes makes it look darker and sometimes lighter.
+
+ After this is calibrated, it's time to calibrate the light ink
+against the dark ink. To do this, comment out all but the large dot
+version of the two inks, and repeat the procedure. This is trickier,
+because the hues of the inks might not be quite identical. Look at the
+dark half of the bar as well as the light half to see that the hue
+really doesn't change as you sweep from cyan to black. Sometimes it's
+easier to judge that way. You may find that it looks blotchy, in which
+case you should switch from ordered dither to adaptive hybrid.
+
+ After you have the light and dark inks calibrated against each other,
+it's time to add everything back in. Usually you don't want to use the
+largest dot size of light ink. These dots will be much larger than the
+small dots of dark ink, but they'll still be lighter. This will cause
+problems when printing mixed colors, since you'll be depositing more
+ink on lighter regions of the page, and you'll probably get strange
+color casts that you can't get rid of in neutral tones. I normally use
+only the smallest one or two dot sizes of light ink.
+
+ After you've tweaked everything, print the color bar with saturation
+set to zero. This will print neutral tones using color inks. Your
+goal here is to look for neutral tonality. If you're using a 6-color
+printer and get a yellow cast, it means that the values for your light
+inks are too high (remember, that means they're getting too much
+credit, so you're not depositing enough cyan and magenta ink, and the
+yellow dominates). If you get a bluish or bluish-purple cast, your
+light inks are too low (you're not giving them enough credit, so too
+much cyan and magenta is deposited, which overwhelms the yellow). Make
+sure you do this on very white, very high grade inkjet paper that's
+designed for 1440x720 dpi or higher; otherwise the ink will spread on
+contact and you'll get values that aren't really true for high grade
+paper. You can, of course, calibrate for low grade paper if that's
+what you're going to use, but that shouldn't be put into the
+distribution.
+
+ You can also fully desaturate this bar inside the Gimp and print it
+as monochrome (don't print the cyan as monochrome; the driver does funny
+things with luminance), for comparison. You'll find it very hard to
+get rid of all color casts.
+
+ There are other ways of tuning printers, but this one works pretty
+well for me.
+
+
+File: gimpprint.info, Node: Canon inkjet printers, Prev: Tuning Epson printers, Up: New Printer
+
+Canon inkjet printers
+=====================
+
+ Basically, a new Canon printer can be added to `print-canon.c' in a
+similar way as described above for the epson inkjet printers. The main
+differences are noted here:
+
+ In general, Canon printers have more "built-in intelligence" than
+Epson printers which results in the fact that the driver only has to
+tell the printing conditions like resolutions, dot sizes, etc. to the
+printer and afterwards transfer the raster data line by line for each
+color used.
+
+ `canon_cap_t' is a C struct defined as follows:
+
+ - Data type: canon_cap_t
+ typedef struct canon_caps {
+ int model; /* model number as used in printers.xml */
+ int max_width; /* maximum printable paper size */
+ int max_height;
+ int base_res; /* base resolution - shall be 150 or 180 */
+ int max_xdpi; /* maximum horizontal resolution */
+ int max_ydpi; /* maximum vertical resolution */
+ int max_quality;
+ int border_left; /* left margin, points */
+ int border_right; /* right margin, points */
+ int border_top; /* absolute top margin, points */
+ int border_bottom; /* absolute bottom margin, points */
+ int inks; /* installable cartridges (CANON_INK_*) */
+ int slots; /* available paperslots */
+ int features; /* special bjl settings */
+ canon_dot_size_t dot_sizes; /* Vector of dot sizes for resolutions */
+ canon_densities_t densities; /* List of densities for each printer */
+ canon_variable_inklist_t *inxs; /* Choices of inks for this printer */
+ } canon_cap_t;
+
+ Since there are Canon printers which print in resolutions of 2^n*150
+dpi (e.g. 300, 600, 1200) and others which support resolutions of
+2^n*180 dpi (e.g. 360, 720, 1440), there's a base resolution (150 or
+180, respectively) given in the `canon_cap_t'. The structs
+`canon_dot_size_t', `canon_densities_t' and `canon_variable_inklist_t'
+refer to resolutions being multiples of the base resolution.
+
+ For the Canon driver, the struct `canon_dot_size_t' holds values for
+a model's capabilities at a given resolution: `-1' if the resolution is
+not supported. `0' if it can be used and `1' if the resolution can be
+used for variable dot size printing.
+
+ In `canon_densities_t' the base densities for each resolution can be
+specified like for an epson printer, the same holds true for
+`canon_variable_inklist_t'. See the descriptions above to learn about
+how to adjust your model's output to yield nice results.
+
+ There's a slight difference though in the way the Canon driver and
+the escp2 driver define their variable inklists: In the Canon driver,
+you need to define an inklist like this:
+
+ static const canon_variable_inklist_t canon_ink_myinks[] =
+ {
+ {
+ 1,4, /* 1bit/pixel, 4 colors */
+ &ci_CMYK_1, &ci_CMYK_1, &ci_CMYK_1,
+ &ci_CMYK_1, &ci_CMYK_1, &ci_CMYK_1,
+ },
+ {
+ 3,4, /* 3bit/pixel, 4 colors */
+ &ci_CMYK_3, &ci_CMYK_3, &ci_CMYK_3,
+ &ci_CMYK_3, &ci_CMYK_3, &ci_CMYK_3,
+ },
+ };
+
+where the `&ci_CMYK_1' and `&ci_CMYK_3' entries are references to a
+previously defined const of type `canon_variable_inkset_t'.
+
+
+File: gimpprint.info, Node: Data Type and Variable Index, Next: Function and Macro Index, Prev: Appendices, Up: Top
+
+Data Type and Variable Index
+****************************
+
+* Menu:
+
+* canon_cap_t: Canon inkjet printers.
+* escp2_printer_t: Epson inkjet printers.
+* gimpprint_binary_age: Version functions.
+* gimpprint_current_interface: Version functions.
+* gimpprint_interface_age: Version functions.
+* gimpprint_major_version: Version functions.
+* gimpprint_micro_version: Version functions.
+* gimpprint_minor_version: Version functions.
+* stp_image_t: Printer functions.
+* stp_option_t: Options functions.
+* stp_outfunc_t: stp_vars_t functions.
+* stp_papersize_t: Paper functions.
+* stp_papersize_unit_t: Paper functions.
+* stp_printer_t: Printer functions.
+* stp_printfuncs_t: Printer functions.
+* stp_vars_t: stp_vars_t functions.
+
+
+File: gimpprint.info, Node: Function and Macro Index, Next: Concept Index, Prev: Data Type and Variable Index, Up: Top
+
+Function and Macro Index
+************************
+
+* Menu:
+
+* * ?? BC=XX Y[1] ... Y[xx]: ESC/P2 Remote Mode Commands.
+* * AC BC=2 00 XX: ESC/P2 Remote Mode Commands.
+* * AI BC=3 00 00 00: ESC/P2 Remote Mode Commands.
+* * CH BC=2 00 XX: ESC/P2 Remote Mode Commands.
+* * DA BC=4 00 XX 00 YY: ESC/P2 Remote Mode Commands.
+* * DA BC=6 00 XX 00 YY 09 00: ESC/P2 Remote Mode Commands.
+* * DR BC=4 00 xx DT2: ESC/P2 Remote Mode Commands.
+* * DT BC=3 00 XX 00: ESC/P2 Remote Mode Commands.
+* * DU BC=6 00 XX 00 09 00 YY: ESC/P2 Remote Mode Commands.
+* * EX BC=3 00 XX YY: ESC/P2 Remote Mode Commands.
+* * EX BC=6 00 00 00 00 0x05 XX: ESC/P2 Remote Mode Commands.
+* * EX BC=6 00 00 00 00 0x14 XX: ESC/P2 Remote Mode Commands.
+* * FP BC=3 00 XX YY: ESC/P2 Remote Mode Commands.
+* * IK BC=2 00 XX: ESC/P2 Remote Mode Commands.
+* * IQ BC=1 01: ESC/P2 Remote Mode Commands.
+* * IR BC=2 00 XX: ESC/P2 Remote Mode Commands.
+* * LD BC=0: ESC/P2 Remote Mode Commands.
+* * PH BC=2 00 XX: ESC/P2 Remote Mode Commands.
+* * PM BC=2 00 00: ESC/P2 Remote Mode Commands.
+* * PP BC=3 00 XX YY: ESC/P2 Remote Mode Commands.
+* * PZ BC=2 00 xx: ESC/P2 Remote Mode Commands.
+* * RS BC=1 01: ESC/P2 Remote Mode Commands.
+* * SM BC=1 01: ESC/P2 Remote Mode Commands.
+* * SM BC=2 00 02: ESC/P2 Remote Mode Commands.
+* * SM BC=2 00 XX: ESC/P2 Remote Mode Commands.
+* * SN BC=3 00 XX YY: ESC/P2 Remote Mode Commands.
+* * ST BC=1 01: ESC/P2 Remote Mode Commands.
+* * ST BC=2 00 XX: ESC/P2 Remote Mode Commands.
+* * SV BC=0: ESC/P2 Remote Mode Commands.
+* </printer>: printers.xml.
+* <color>: printers.xml.
+* <language value=TYPE>: printers.xml.
+* <model value=INT>: printers.xml.
+* <nocolor>: printers.xml.
+* <printer name="LONGNAME" driver="DRIVERNAME">: printers.xml.
+* AM_PATH_GIMPPRINT: autoconf.
+* ESC $ OFFSET2: ESC/P2 Standard Commands.
+* ESC ($ BC=4 OFFSET4: ESC/P2 Standard Commands.
+* ESC (/ BC=4 OFFSET4: ESC/P2 Standard Commands.
+* ESC (\ BC=4 UNITS2 OFFSET2: ESC/P2 Standard Commands.
+* ESC (C BC=2 PAGELENGTH2: ESC/P2 Standard Commands.
+* ESC (C BC=4 PAGELENGTH4: ESC/P2 Standard Commands.
+* ESC (c BC=4 TOP2 LENGTH2: ESC/P2 Standard Commands.
+* ESC (c BC=8 TOP4 LENGTH4: ESC/P2 Standard Commands.
+* ESC (D BC=4 BASE2 VERTICAL1 HORIZONTAL1: ESC/P2 Standard Commands.
+* ESC (e BC=2 ZERO1 DOTSIZE1: ESC/P2 Standard Commands.
+* ESC (G BC=1 ON1: ESC/P2 Standard Commands.
+* ESC (i BC=1 MICROWEAVE1: ESC/P2 Standard Commands.
+* ESC (K BC=2 ZERO1 GRAYMODE1: ESC/P2 Standard Commands.
+* ESC (r BC=2 DENSITY1 COLOR1: ESC/P2 Standard Commands.
+* ESC (R BC=8 00 R E M O T E 1: ESC/P2 Standard Commands.
+* ESC (s BC=1 SPEED1: ESC/P2 Standard Commands.
+* ESC (S BC=8 WIDTH4 LENGTH4: ESC/P2 Standard Commands.
+* ESC (U BC=1 UNIT1: ESC/P2 Standard Commands.
+* ESC (U BC=5 PAGEUNITS1 VUNIT1 HUNIT1 BASEUNIT2: ESC/P2 Standard Commands.
+* ESC (V BC=2 ADVANCE2: ESC/P2 Standard Commands.
+* ESC (v BC=2 ADVANCE2: ESC/P2 Standard Commands.
+* ESC (V BC=4 ADVANCE4: ESC/P2 Standard Commands.
+* ESC (v BC=4 ADVANCE4: ESC/P2 Standard Commands.
+* ESC . COMPRESS1 VSEP1 HSEP1 LINES1 WIDTH2 DATA...: ESC/P2 Standard Commands.
+* ESC 01 @EJL [sp] ID\r\n: ESC/P2 Standard Commands.
+* ESC @: ESC/P2 Standard Commands.
+* ESC \ OFFSET2: ESC/P2 Standard Commands.
+* ESC i COLOR1 COMPRESS1 BITS1 BYTES2 LINES2 DATA...: ESC/P2 Standard Commands.
+* ESC r COLOR1: ESC/P2 Standard Commands.
+* ESC U DIRECTION1: ESC/P2 Standard Commands.
+* GIMPPRINT_BINARY_AGE: Version functions.
+* GIMPPRINT_CHECK_VERSION: Version functions.
+* GIMPPRINT_CURRENT_INTERFACE: Version functions.
+* GIMPPRINT_INTERFACE_AGE: Version functions.
+* GIMPPRINT_MAJOR_VERSION: Version functions.
+* GIMPPRINT_MICRO_VERSION: Version functions.
+* GIMPPRINT_MINOR_VERSION: Version functions.
+* NC BC=2 00 00: ESC/P2 Remote Mode Commands.
+* stp_allocate_copy: stp_vars_t functions.
+* stp_allocate_lut: stp_vars_t functions.
+* stp_allocate_vars: stp_vars_t functions.
+* stp_check_version: Version functions.
+* stp_choose_colorfunc: Settings functions.
+* stp_clear_all_options: Options functions.
+* stp_clear_option: Options functions.
+* stp_compute_lut: stp_vars_t functions.
+* stp_compute_page_parameters: Settings functions.
+* stp_copy_vars: stp_vars_t functions.
+* stp_default_dither_algorithm: Dither functions.
+* stp_default_settings: Settings functions.
+* stp_dither_algorithm_count: Dither functions.
+* stp_dither_algorithm_name: Dither functions.
+* stp_free_lut: stp_vars_t functions.
+* stp_free_vars: stp_vars_t functions.
+* stp_get_app_gamma: stp_vars_t functions.
+* stp_get_brightness: stp_vars_t functions.
+* stp_get_cmap: stp_vars_t functions.
+* stp_get_contrast: stp_vars_t functions.
+* stp_get_cyan: stp_vars_t functions.
+* stp_get_density: stp_vars_t functions.
+* stp_get_dither_algorithm: stp_vars_t functions.
+* stp_get_driver: stp_vars_t functions.
+* stp_get_errdata: stp_vars_t functions.
+* stp_get_errfunc: stp_vars_t functions.
+* stp_get_gamma: stp_vars_t functions.
+* stp_get_image_type: stp_vars_t functions.
+* stp_get_ink_type: stp_vars_t functions.
+* stp_get_input_color_model: stp_vars_t functions.
+* stp_get_left: stp_vars_t functions.
+* stp_get_lut: stp_vars_t functions.
+* stp_get_magenta: stp_vars_t functions.
+* stp_get_media_size: stp_vars_t functions.
+* stp_get_media_source: stp_vars_t functions.
+* stp_get_media_type: stp_vars_t functions.
+* stp_get_option_by_index: Options functions.
+* stp_get_option_by_name: Options functions.
+* stp_get_orientation: stp_vars_t functions.
+* stp_get_outdata: stp_vars_t functions.
+* stp_get_outfunc: stp_vars_t functions.
+* stp_get_output_color_model: stp_vars_t functions.
+* stp_get_output_to: stp_vars_t functions.
+* stp_get_output_type: stp_vars_t functions.
+* stp_get_page_height: stp_vars_t functions.
+* stp_get_page_width: stp_vars_t functions.
+* stp_get_papersize_by_index: Paper functions.
+* stp_get_papersize_by_name: Paper functions.
+* stp_get_papersize_by_size: Paper functions.
+* stp_get_ppd_file: stp_vars_t functions.
+* stp_get_printer_by_driver: Printer functions.
+* stp_get_printer_by_index: Printer functions.
+* stp_get_printer_by_long_name: Printer functions.
+* stp_get_printer_index_by_driver: Printer functions.
+* stp_get_resolution: stp_vars_t functions.
+* stp_get_saturation: stp_vars_t functions.
+* stp_get_scaling: stp_vars_t functions.
+* stp_get_top: stp_vars_t functions.
+* stp_get_unit: stp_vars_t functions.
+* stp_get_yellow: stp_vars_t functions.
+* stp_init: Main functions.
+* stp_known_papersizes: Paper functions.
+* stp_known_printers: Printer functions.
+* stp_malloc: Main functions.
+* stp_maximum_settings: Settings functions.
+* stp_merge_printvars: stp_vars_t functions.
+* stp_minimum_settings: Settings functions.
+* stp_option_count: Options functions.
+* stp_option_data: Options functions.
+* stp_option_length: Options functions.
+* stp_option_name: Options functions.
+* stp_papersize_get_bottom: Paper functions.
+* stp_papersize_get_height: Paper functions.
+* stp_papersize_get_left: Paper functions.
+* stp_papersize_get_name: Paper functions.
+* stp_papersize_get_right: Paper functions.
+* stp_papersize_get_top: Paper functions.
+* stp_papersize_get_unit: Paper functions.
+* stp_papersize_get_width: Paper functions.
+* stp_printer_get_driver: Printer functions.
+* stp_printer_get_long_name: Printer functions.
+* stp_printer_get_model: Printer functions.
+* stp_printer_get_printfuncs: Printer functions.
+* stp_printer_get_printvars: Printer functions.
+* stp_set_app_gamma: stp_vars_t functions.
+* stp_set_brightness: stp_vars_t functions.
+* stp_set_cmap: stp_vars_t functions.
+* stp_set_contrast: stp_vars_t functions.
+* stp_set_cyan: stp_vars_t functions.
+* stp_set_density: stp_vars_t functions.
+* stp_set_dither_algorithm: stp_vars_t functions.
+* stp_set_dither_algorithm_n: stp_vars_t functions.
+* stp_set_driver: stp_vars_t functions.
+* stp_set_driver_n: stp_vars_t functions.
+* stp_set_errdata: stp_vars_t functions.
+* stp_set_errfunc: stp_vars_t functions.
+* stp_set_gamma: stp_vars_t functions.
+* stp_set_image_type: stp_vars_t functions.
+* stp_set_ink_type: stp_vars_t functions.
+* stp_set_ink_type_n: stp_vars_t functions.
+* stp_set_input_color_model: stp_vars_t functions.
+* stp_set_left: stp_vars_t functions.
+* stp_set_lut: stp_vars_t functions.
+* stp_set_magenta: stp_vars_t functions.
+* stp_set_media_size: stp_vars_t functions.
+* stp_set_media_size_n: stp_vars_t functions.
+* stp_set_media_source: stp_vars_t functions.
+* stp_set_media_source_n: stp_vars_t functions.
+* stp_set_media_type: stp_vars_t functions.
+* stp_set_media_type_n: stp_vars_t functions.
+* stp_set_option: Options functions.
+* stp_set_orientation: stp_vars_t functions.
+* stp_set_outdata: stp_vars_t functions.
+* stp_set_outfunc: stp_vars_t functions.
+* stp_set_output_color_model: stp_vars_t functions.
+* stp_set_output_to: stp_vars_t functions.
+* stp_set_output_to_n: stp_vars_t functions.
+* stp_set_output_type: stp_vars_t functions.
+* stp_set_page_height: stp_vars_t functions.
+* stp_set_page_width: stp_vars_t functions.
+* stp_set_ppd_file: stp_vars_t functions.
+* stp_set_ppd_file_n: stp_vars_t functions.
+* stp_set_resolution: stp_vars_t functions.
+* stp_set_resolution_n: stp_vars_t functions.
+* stp_set_saturation: stp_vars_t functions.
+* stp_set_scaling: stp_vars_t functions.
+* stp_set_top: stp_vars_t functions.
+* stp_set_unit: stp_vars_t functions.
+* stp_set_yellow: stp_vars_t functions.
+* VI BC=2 00 00: ESC/P2 Remote Mode Commands.
+
+
+File: gimpprint.info, Node: Concept Index, Prev: Function and Macro Index, Up: Top
+
+Concept Index
+*************
+
+* Menu:
+
+* adding a printer: New Printer.
+* Appendices: Appendices.
+* autoconf: autoconf.
+* automake: automake.
+* bugs: Problems.
+* collisions: Weaving collisions.
+* CUPS driver: CUPS.
+* dither functions: Dither functions.
+* dithering: Dithering.
+* driver file: Driver file.
+* Epson inkjet printers: Epson inkjet printers.
+* ESC/P2: ESC/P2.
+* ESC/P2 introduction: ESC/P2 Introduction.
+* functions: Functions.
+* ghostscript driver: Ghostscript.
+* GIMP Print plugin: The GIMP plugin.
+* gimpprint-config: gimpprint-config.
+* how to read: Instructions.
+* initialising libgimpprint: Main functions.
+* integrating: Integrating libgimpprint.
+* m4 macros: autoconf.
+* main functions: Main functions.
+* make: make.
+* manual, how to read: Instructions.
+* memory allocation: Main functions.
+* new printer: New Printer.
+* options functions: Options functions.
+* oversampling: Oversampling.
+* overview: Overview.
+* paper functions: Paper functions.
+* perfect weave <1>: What is perfect weaving?.
+* perfect weave: Perfect weaving.
+* Print plugin: The GIMP plugin.
+* printer functions: Printer functions.
+* printer, adding: New Printer.
+* printer, tuning: Tuning Epson printers.
+* problems: Problems.
+* programs: Programs.
+* reading: Instructions.
+* settings functions: Settings functions.
+* stp_vars_t functions: stp_vars_t functions.
+* tuning the printer: Tuning Epson printers.
+* using: Using libgimpprint.
+* version functions: Version functions.
+* weaving: Weaving.
+* weaving algorithms: Weaving algorithms.
+* weaving collisions: Weaving collisions.
+
+