summaryrefslogtreecommitdiff
path: root/doc/developer/reference-html/c1717.html
blob: 0d98cde83bb5cf07af6ee8016ee121f4408cf814 (plain)
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">
<HTML
><HEAD
><TITLE
>Weaving for inkjet printers</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><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=UTF-8"></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
>&#13;      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
>&#13;      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
>&#13;      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
>&#13;      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
>&#13;      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
>&#13;      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
>&#13;      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
>&#13;      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
>&#13;       So we have to do something to break up this patterning.
    </P
><P
>&#13;      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
>&#13;      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
>&#13;      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"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Weaving algorithms</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>