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
> 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
>
|