From: Robert L K. <rl...@al...> - 2000-02-13 15:00:35
|
From: sh...@al... Date: Sun, 13 Feb 2000 22:28:11 +0900 Ok, I admit it, I really don't understand softweave. I get the general principle, but the details clearly elude me. 00000782 1b i 12 01 01 af 00 30 00 (175, 48, 1) *0d 000008fb 1b ( v 04 00 31 00 00 00 The 750 has 48 nozzles, so, we send 48 lines of data at once, one for each nozzle. And then we move down 49 rows? 49? Why 49? Doesn't that skip a row? OK. This stuff is fairly complicated. I'll explain very quickly, and then point you to print-escp2.c which has it all explained in a long block comment. The first part is correct -- we send 48 lines of data at once, one for each nozzle. However, there are a couple of other things going on here. The most important is that the nozzles in the print head are actually separated by more than one row spacing (1/720"). On the Photo EX there are 32 nozzles spaced 8 rows apart. On the 750 there are 48 nozzles, there are 48 nozzles. I assumed they were spaced 8 rows apart, but the stuff yesterday with the 740 convinced me that they're 6 rows apart. So there need to be 6 passes printed to fill in the gaps between printed rows. The obvious way to do that would be to advance by 1 row for each of the 6 passes, then advance by (48 * 6 - 5) rows to start a new series. The problem with that is that it creates a lot of banding (that's explained in detail in the comment). So the name of the game is to ensure that each adjacent row is printed by DIFFERENT nozzles (some nozzles are slightly bigger or smaller, or the spacing may not be perfect, or something). Even doing that carefully (the 720 Softweave mode) results in some banding. So what we do is use multiple passes to print each line, by splitting up the dots and printing only a subset of them (1/2 in high quality, 1/4 in highest quality) on each pass. That way two or four different nozzles are used to print each row, which further reduces banding. The 1440 modes are similar; 1440x720 uses two passes, 1440x720 highest quality uses four passes. It's pretty hairy stuff. Read the comment very carefully. The function weave_parameters_by_row does all the cool stuff, but it's almost impossible to understand (even for me, and I wrote the silly thing). It isn't perfect; there are some combinations that don't work, although everything that I know of that's really important to us (except maybe for the 440) works. There's a program called weavetest.c that's actually a unit test for it. This program is absolutely essential to have any hope of maintaining this stuff. -- Robert Krawitz <rl...@al...> http://www.tiac.net/users/rlk/ Tall Clubs International -- http://www.tall.org/ or 1-888-IM-TALL-2 Member of the League for Programming Freedom -- mail lp...@uu... Project lead for The Gimp Print -- http://gimp-print.sourceforge.net "Linux doesn't dictate how I work, I dictate how Linux works." --Eric Crampton |