/usr/share/doc/libgutenprint-doc/developer/html/c1717.html is in libgutenprint-doc 5.2.8~pre1-0ubuntu2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>Weaving for inkjet printers</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="The Developer's Guide to Gutenprint"
HREF="book1.html"><LINK
REL="PREVIOUS"
TITLE="Appropriate Remote Commands"
HREF="x1669.html"><LINK
REL="NEXT"
TITLE="Weaving algorithms"
HREF="x1734.html"><META
http-equiv="Content-Type"
content="text/html; charset=@encoding@"></HEAD
><BODY
CLASS="chapter"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>The Developer's Guide to Gutenprint</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="x1669.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="x1734.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="chapter"
><H1
><A
NAME="AEN1717"
></A
>Chapter 6. Weaving for inkjet printers</H1
><DIV
CLASS="TOC"
><DL
><DT
><B
>Table of Contents</B
></DT
><DT
><A
HREF="c1717.html#AEN1719"
>Introduction</A
></DT
><DT
><A
HREF="x1734.html"
>Weaving algorithms</A
></DT
></DL
></DIV
><DIV
CLASS="sect1"
><H1
CLASS="sect1"
><A
NAME="AEN1719"
>Introduction</A
></H1
><P
> The Epson Stylus Color/Photo printers don't have memory to print
using all of the nozzles in the print head. For example, the
Stylus Photo 700/EX has 32 nozzles. At 720 dpi, with an 8" wide
image, a single line requires ((8 × 720 × 6) / 8)
bytes, or 4320 bytes (because the Stylus Photo printers have 6
ink colors). To use 32 nozzles per color would require 138240
bytes. It's actually worse than that, though, because the
nozzles are spaced 8 rows apart. Therefore, in order to store
enough data to permit sending the page as a simple raster, the
printer would require enough memory to store 256 rows, or
1105920 bytes. Considering that the Photo EX can print 11"
wide, we're looking at more like 1.5 MB. In fact, these
printers are capable of 1440 dpi horizontal resolution. This
would require 3 MB. The printers actually have 64K-256K.
</P
><P
> With the newer (740/750 and later) printers it's even worse,
since these printers support multiple dot sizes; of course, the
even newer 2880×720 printers don't help either.
</P
><P
> Older Epson printers had a mode called
MicroWeave<SUP
>™</SUP
>. In this mode, the
host fed the printer individual rows of dots, and the printer
bundled them up and sent them to the print head in the correct
order to achieve high quality. This MicroWeave mode still works
in new printers, but in some cases the implementation is very
minimal: the printer uses exactly one nozzle of each color (the
first one). This makes printing extremely slow (more than 30
minutes for one 8.5×11" page), although the quality is
extremely high with no visible banding whatsoever. It's not
good for the print head, though, since no ink is flowing through
the other nozzles. This leads to drying of ink and possible
permanent damage to the print head.
</P
><P
> By the way, although the Epson manual says that microweave mode
should be used at 720 dpi, 360 dpi continues to work in much the
same way. At 360 dpi, data is fed to the printer one row at a
time on all Epson printers. The pattern that the printer uses
to print is very prone to banding. However, 360 dpi is
inherently a low quality mode; if you're using it, presumably
you don't much care about quality. It is possible to do
microweave at 360 DPI, with significantly improved quality.
</P
><P
> Except for the Stylus Pro printers (5000, 5500, 7000, 7500,
9000, 9500, and when it's released the 10000), which can do
microweave at any resolution, printers from roughly the Stylus
Color 600 and later do not have the capability to do MicroWeave
correctly in many cases (some printers can do MicroWeave
correctly at 720 DPI). Instead, the host must arrange the
output in the order that it will be sent to the print head.
This is a very complex process; the jets in the print head are
spaced more than one row (1/720") apart, so we can't simply send
consecutive rows of dots to the printer. Instead, we have to
pass e. g. the first, ninth, 17th, 25th... rows in order for
them to print in the correct position on the paper. This
interleaving process is called "soft" weaving.
</P
><P
> This decision was probably made to save money on memory in the
printer. It certainly makes the driver code far more
complicated than it would be if the printer could arrange the
output. Is that a bad thing? Usually this takes far less CPU
time than the dithering process, and it does allow us more
control over the printing process, e.g. to reduce banding.
Conceivably, we could even use this ability to map out bad jets.
</P
><P
> Interestingly, apparently the Windows (and presumably Macintosh)
drivers for most or all Epson printers still list a
“microweave” mode. Experiments have demonstrated
that this does not in fact use the “microweave” mode
of the printer. Possibly it does nothing, or it uses a
different weave pattern from what the
“non-microweave” mode does. This is unnecessarily
confusing, at least for people who write drivers who try to
explain them to people who don't.
</P
><P
> What makes this interesting is that there are many different
ways of of accomplishing this goal. The naive way would be to
divide the image up into groups of 256 rows (for a printer with
32 jets and a separation of 8 rows), and print all the mod8=0
rows in the first pass, mod8=1 rows in the second, and so forth.
The problem with this approach is that the individual ink jets
are not perfectly uniform; some emit slightly bigger or smaller
drops than others. Since each group of 8 adjacent rows is
printed with the same nozzle, that means that there will be
distinct streaks of lighter and darker bands within the image (8
rows is 1/90", which is visible; 1/720" is not). Possibly worse
is that these patterns will repeat every 256 rows. This creates
banding patterns that are about 1/3" wide.
</P
><P
> So we have to do something to break up this patterning.
</P
><P
> Epson do not publish the weaving algorithms that they use in
their bundled drivers. Indeed, their developer web site
(http://www.ercipd.com/isv/edr_docs.htm) does not even describe
how to do this weaving at all; it says that the only way to
achieve 720 dpi is to use MicroWeave. It does note (correctly)
that 1440 dpi horizontal can only be achieved by the driver
(i. e. in software). The manual actually makes it fairly clear
how to do this (it requires two passes with horizontal head
movement between passes), and it is presumably possible to do
this with MicroWeave.
</P
><P
> The information about how to do this is apparently available
under non-disclosure agreement (NDA). It's actually easy enough
to reverse engineer what's inside a print file with a simple
Perl script, which is supplied with the Gutenprint distribution
as tests/parse-escp2. In any event, we weren't particularly
interested in the weaving patterns Epson used. There are many
factors that go into choosing a good weaving pattern; we're
learning them as we go along. Issues such as drying time
(giving the ink a few seconds more or less to dry can have
highly visible effects) affect the quality of the output.
</P
><P
> The Uniprint GhostScript driver has been able to do weaving for
a long time. It uses patterns that must be specified for each
choice of resolution and printer. We preferred an algorithmic
approach that computes a weave pattern for any given choice of
inputs. This obviously requires extensive testing; we developed
a test suite specifically for this purpose.
</P
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="x1669.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="book1.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="x1734.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Appropriate Remote Commands</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
> </TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Weaving algorithms</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>
|