From: Robert L K. <rl...@al...> - 2000-04-02 02:45:41
|
Date: Sat, 01 Apr 2000 16:21:32 -0800 From: David Rosky <d_...@nc...> http://www.nccn.net/~w_rosky/dsr/e1440newFO.prn.gz The new driver has an additional microweave mode called "Super" which is only available at 1440dpi on certain printers and generates something called "full overlap microweave". According to the help file, this mode helps reduce banding even more than standard microweave. Indeed, one of my blue nozzles is currently partially clogged and this mode did actually show less banding than the normal microweave mode; however, it showed ever-so-slightly more grain. I don't know why it would show more grain (unless it's due to your partially clogged nozzle), but it certainly should reduce banding. It uses a spacing of 15 rows consistently. It's basically equivalent to our "1440 dpi highest quality" mode. Let me know if there are any additional testing or print files that would be helpful. That should be enough to get me started. Could you try the following patch? It's possible that it won't compile; my sandbox is currently broken because of some code I'm working on; in that case, my apologies. If it works, could somebody check it in? Index: print-escp2.c =================================================================== RCS file: /cvsroot/gimp-print/print/print-escp2.c,v retrieving revision 1.119 diff -c -r1.119 print-escp2.c *** print-escp2.c 2000/03/27 13:51:09 1.119 --- print-escp2.c 2000/04/02 02:35:20 *************** *** 77,83 **** int, int); static void *initialize_weave(int jets, int separation, int oversample, int horizontal, int vertical, ! colormode_t colormode, int width, int linewidth); static void escp2_flush(void *, int model, int width, int hoffset, int ydpi, int xdpi, FILE *prn); static void --- 77,84 ---- int, int); static void *initialize_weave(int jets, int separation, int oversample, int horizontal, int vertical, ! colormode_t colormode, int width, int linewidth, ! int vertical_row_separation); static void escp2_flush(void *, int model, int width, int hoffset, int ydpi, int xdpi, FILE *prn); static void *************** *** 119,124 **** --- 120,126 ---- int right_margin; int top_margin; int bottom_margin; + int separation_rows; } escp2_printer_t; #define MODEL_INIT_MASK 0xf *************** *** 202,250 **** (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_GENERIC | MODEL_GRAYMODE_YES | MODEL_1440DPI_NO), ! 1, 1, 1, 720, -1, -1, INCH_8_5, INCH_14, 14, 14, 9, 49 }, /* 1: Stylus Color Pro/Pro XL/400/500 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_GENERIC | MODEL_GRAYMODE_NO | MODEL_1440DPI_NO), ! 48, 6, 48, 720, -1, 1, INCH_8_5, INCH_14, 14, 14, 9, 49 }, /* 2: Stylus Color 1500 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_NO | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_GENERIC | MODEL_GRAYMODE_NO | MODEL_1440DPI_NO), ! 1, 1, 1, 720, -1, 1, INCH_11, INCH_17, 14, 14, 9, 49 }, /* 3: Stylus Color 600 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_600 | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_GENERIC | MODEL_GRAYMODE_YES | MODEL_1440DPI_YES), ! 32, 8, 32, 720, 0, 2, INCH_8_5, INCH_14, 8, 9, 9, 49 }, /* 4: Stylus Color 800 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_GENERIC | MODEL_GRAYMODE_YES | MODEL_1440DPI_YES), ! 64, 4, 64, 720, 0, 2, INCH_8_5, INCH_14, 8, 9, 9, 49 }, /* 5: Stylus Color 850 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_GENERIC | MODEL_GRAYMODE_YES | MODEL_1440DPI_YES), ! 64, 4, 128, 720, 0, 2, INCH_8_5, INCH_14, 8, 9, 9, 49 }, /* 6: Stylus Color 1520/3000 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_GENERIC | MODEL_GRAYMODE_YES | MODEL_1440DPI_YES), ! 1, 1, 128, 720, -1, 2, INCH_16_5, INCH_24, 8, 9, 9, 49 }, /* SECOND GENERATION PRINTERS */ --- 204,252 ---- (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_GENERIC | MODEL_GRAYMODE_YES | MODEL_1440DPI_NO), ! 1, 1, 1, 720, -1, -1, INCH_8_5, INCH_14, 14, 14, 9, 49, 1 }, /* 1: Stylus Color Pro/Pro XL/400/500 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_GENERIC | MODEL_GRAYMODE_NO | MODEL_1440DPI_NO), ! 48, 6, 48, 720, -1, 1, INCH_8_5, INCH_14, 14, 14, 9, 49, 1 }, /* 2: Stylus Color 1500 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_NO | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_GENERIC | MODEL_GRAYMODE_NO | MODEL_1440DPI_NO), ! 1, 1, 1, 720, -1, 1, INCH_11, INCH_17, 14, 14, 9, 49, 1 }, /* 3: Stylus Color 600 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_600 | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_GENERIC | MODEL_GRAYMODE_YES | MODEL_1440DPI_YES), ! 32, 8, 32, 720, 0, 2, INCH_8_5, INCH_14, 8, 9, 9, 49, 1 }, /* 4: Stylus Color 800 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_GENERIC | MODEL_GRAYMODE_YES | MODEL_1440DPI_YES), ! 64, 4, 64, 720, 0, 2, INCH_8_5, INCH_14, 8, 9, 9, 49, 1 }, /* 5: Stylus Color 850 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_GENERIC | MODEL_GRAYMODE_YES | MODEL_1440DPI_YES), ! 64, 4, 128, 720, 0, 2, INCH_8_5, INCH_14, 8, 9, 9, 49, 1 }, /* 6: Stylus Color 1520/3000 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_GENERIC | MODEL_GRAYMODE_YES | MODEL_1440DPI_YES), ! 1, 1, 128, 720, -1, 2, INCH_16_5, INCH_24, 8, 9, 9, 49, 4 }, /* SECOND GENERATION PRINTERS */ *************** *** 253,273 **** (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_YES | MODEL_720DPI_PHOTO | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_GENERIC | MODEL_GRAYMODE_NO | MODEL_1440DPI_YES), ! 32, 8, 32, 720, 0, 3, INCH_8_5, INCH_14, 9, 9, 9, 49 }, /* 8: Stylus Photo EX */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_YES | MODEL_720DPI_PHOTO | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_GENERIC | MODEL_GRAYMODE_NO | MODEL_1440DPI_YES), ! 32, 8, 32, 720, 0, 3, INCH_11, INCH_17, 9, 9, 9, 49 }, /* 9: Stylus Photo */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_YES | MODEL_720DPI_PHOTO | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_GENERIC | MODEL_GRAYMODE_NO | MODEL_1440DPI_NO), ! 32, 8, 32, 720, 0, 3, INCH_8_5, INCH_14, 9, 9, 9, 49 }, /* THIRD GENERATION PRINTERS */ --- 255,275 ---- (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_YES | MODEL_720DPI_PHOTO | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_GENERIC | MODEL_GRAYMODE_NO | MODEL_1440DPI_YES), ! 32, 8, 32, 720, 0, 3, INCH_8_5, INCH_14, 9, 9, 9, 49, 1 }, /* 8: Stylus Photo EX */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_YES | MODEL_720DPI_PHOTO | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_GENERIC | MODEL_GRAYMODE_NO | MODEL_1440DPI_YES), ! 32, 8, 32, 720, 0, 3, INCH_11, INCH_17, 9, 9, 9, 49, 1 }, /* 9: Stylus Photo */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_YES | MODEL_720DPI_PHOTO | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_GENERIC | MODEL_GRAYMODE_NO | MODEL_1440DPI_NO), ! 32, 8, 32, 720, 0, 3, INCH_8_5, INCH_14, 9, 9, 9, 49, 1 }, /* THIRD GENERATION PRINTERS */ *************** *** 277,297 **** (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_600 | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_1999 | MODEL_GRAYMODE_YES | MODEL_1440DPI_NO), ! 21, 7, 64, 720, 2, 3, INCH_8_5, INCH_14, 9, 9, 9, 18 }, /* 11: Stylus Color 640 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_1999 | MODEL_GRAYMODE_YES | MODEL_1440DPI_NO), ! 32, 8, 64, 720, 0, 3, INCH_8_5, INCH_14, 9, 9, 9, 18 }, /* 12: Stylus Color 740 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_4 | MODEL_COMMAND_1999 | MODEL_GRAYMODE_YES | MODEL_1440DPI_YES), ! 48, 6, 144, 360, 0, 3, INCH_11, INCH_17, 9, 9, 9, 18 }, /* 13: Stylus Color 900 */ /* Dale Pontius thinks the spacing is 3 jets??? */ --- 279,299 ---- (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_600 | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_1999 | MODEL_GRAYMODE_YES | MODEL_1440DPI_NO), ! 21, 7, 64, 720, 2, 3, INCH_8_5, INCH_14, 9, 9, 9, 18, 1 }, /* 11: Stylus Color 640 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_1999 | MODEL_GRAYMODE_YES | MODEL_1440DPI_NO), ! 32, 8, 64, 720, 0, 3, INCH_8_5, INCH_14, 9, 9, 9, 18, 1 }, /* 12: Stylus Color 740 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_4 | MODEL_COMMAND_1999 | MODEL_GRAYMODE_YES | MODEL_1440DPI_YES), ! 48, 6, 144, 360, 0, 3, INCH_11, INCH_17, 9, 9, 9, 18, 1 }, /* 13: Stylus Color 900 */ /* Dale Pontius thinks the spacing is 3 jets??? */ *************** *** 300,334 **** (MODEL_INIT_900 | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_4 | MODEL_COMMAND_1999 | MODEL_GRAYMODE_YES | MODEL_1440DPI_YES), ! 96, 2, 192, 360, 0, 1, INCH_11, INCH_17, 9, 9, 9, 18 }, /* 14: Stylus Photo 750, 870 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_YES | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_4 | MODEL_COMMAND_1999 | MODEL_GRAYMODE_NO | MODEL_1440DPI_YES), ! 48, 6, 48, 360, 0, 4, INCH_8_5, INCH_14, 9, 9, 9, 18 }, /* 15: Stylus Photo 1200, 1270 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_YES | MODEL_720DPI_PHOTO | MODEL_VARIABLE_4 | MODEL_COMMAND_1999 | MODEL_GRAYMODE_NO | MODEL_1440DPI_YES), ! 48, 6, 48, 360, 0, 4, INCH_13, INCH_19, 9, 9, 9, 18 }, /* 16: Stylus Color 860 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_1999 | MODEL_GRAYMODE_YES | MODEL_1440DPI_YES), ! 48, 6, 144, 360, 0, 2, INCH_8_5, INCH_14, 9, 9, 9, 18 }, /* 17: Stylus Color 1160 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_1999 | MODEL_GRAYMODE_YES | MODEL_1440DPI_YES), ! 48, 6, 144, 360, 0, 2, INCH_13, INCH_19, 9, 9, 9, 18 } }; --- 302,336 ---- (MODEL_INIT_900 | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_4 | MODEL_COMMAND_1999 | MODEL_GRAYMODE_YES | MODEL_1440DPI_YES), ! 96, 2, 192, 360, 0, 1, INCH_11, INCH_17, 9, 9, 9, 18, 1 }, /* 14: Stylus Photo 750, 870 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_YES | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_4 | MODEL_COMMAND_1999 | MODEL_GRAYMODE_NO | MODEL_1440DPI_YES), ! 48, 6, 48, 360, 0, 4, INCH_8_5, INCH_14, 9, 9, 9, 18, 1 }, /* 15: Stylus Photo 1200, 1270 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_YES | MODEL_720DPI_PHOTO | MODEL_VARIABLE_4 | MODEL_COMMAND_1999 | MODEL_GRAYMODE_NO | MODEL_1440DPI_YES), ! 48, 6, 48, 360, 0, 4, INCH_13, INCH_19, 9, 9, 9, 18, 1 }, /* 16: Stylus Color 860 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_1999 | MODEL_GRAYMODE_YES | MODEL_1440DPI_YES), ! 48, 6, 144, 360, 0, 2, INCH_8_5, INCH_14, 9, 9, 9, 18, 1 }, /* 17: Stylus Color 1160 */ { (MODEL_INIT_STANDARD | MODEL_HASBLACK_YES | MODEL_6COLOR_NO | MODEL_720DPI_DEFAULT | MODEL_VARIABLE_NORMAL | MODEL_COMMAND_1999 | MODEL_GRAYMODE_YES | MODEL_1440DPI_YES), ! 48, 6, 144, 360, 0, 2, INCH_13, INCH_19, 9, 9, 9, 18, 1 } }; *************** *** 781,786 **** --- 783,790 ---- void * weave; void * dither; colormode_t colormode = COLOR_CCMMYK; + int separation_rows; + if (v->image_type == IMAGE_MONOCHROME) { colormode = COLOR_MONOCHROME; *************** *** 849,854 **** --- 853,859 ---- real_horizontal_passes = horizontal_passes; vertical_passes = res->vertical_passes; vertical_subsample = res->vertical_subsample; + separation_rows = res->separation_rows; if (use_softweave && escp2_xres(model) < 720) horizontal_passes *= 720 / escp2_xres(model); xdpi = res->hres; *************** *** 1072,1078 **** if (use_softweave) weave = initialize_weave(nozzles, nozzle_separation, horizontal_passes, vertical_passes, vertical_subsample, colormode, ! bits, out_width); else weave = NULL; --- 1077,1083 ---- if (use_softweave) weave = initialize_weave(nozzles, nozzle_separation, horizontal_passes, vertical_passes, vertical_subsample, colormode, ! bits, out_width, separation_rows); else weave = NULL; *************** *** 2019,2024 **** --- 2024,2033 ---- int lineno; int vertical_oversample; /* Vertical oversampling */ int current_vertical_subpass; + int separation_rows; /* Vertical spacing between rows. */ + /* This is used for the 1520/3000, which */ + /* use a funny value for the "print density */ + /* in the vertical direction". */ } escp2_softweave_t; #ifndef WEAVETEST *************** *** 2037,2043 **** static void * initialize_weave(int jets, int sep, int osample, int v_subpasses, int v_subsample, colormode_t colormode, int width, ! int linewidth) { int i; int k; --- 2046,2052 ---- static void * initialize_weave(int jets, int sep, int osample, int v_subpasses, int v_subsample, colormode_t colormode, int width, ! int linewidth, int separation_rows) { int i; int k; *************** *** 2058,2063 **** --- 2067,2073 ---- sw->vmod = sw->separation * sw->oversample; sw->horizontal_weave = osample; sw->pass_adjustment = (osample * sep + jets - 1) / jets; + sw->separation_rows = separation_rows; sw->weavefactor = (sw->njets + sw->separation - 1) / sw->separation; sw->jetsused = MIN(((sw->weavefactor) * sw->separation), sw->njets); *************** *** 2412,2418 **** sw->last_pass_offset = pass->logicalpassstart; else if (pass->logicalpassstart > sw->last_pass_offset) { ! int advance = pass->logicalpassstart - sw->last_pass_offset; int alo = advance % 256; int ahi = advance / 256; if (escp2_has_cap(model, MODEL_VARIABLE_DOT_MASK, MODEL_VARIABLE_4)) --- 2422,2429 ---- sw->last_pass_offset = pass->logicalpassstart; else if (pass->logicalpassstart > sw->last_pass_offset) { ! int advance = pass->logicalpassstart - sw->last_pass_offset - ! (sw->separation_rows - 1); int alo = advance % 256; int ahi = advance / 256; if (escp2_has_cap(model, MODEL_VARIABLE_DOT_MASK, MODEL_VARIABLE_4)) *************** *** 2478,2484 **** fprintf(prn, "\033.%c%c%c%c", 1, 8 * 5, 5, *linecount + pass->missingstartrows); else ! fprintf(prn, "\033.%c%c%c%c", 1, 5, 5, *linecount + pass->missingstartrows); break; } --- 2489,2495 ---- fprintf(prn, "\033.%c%c%c%c", 1, 8 * 5, 5, *linecount + pass->missingstartrows); else ! fprintf(prn, "\033.%c%c%c%c", 1, 5 * sw->separation_rows , 5, *linecount + pass->missingstartrows); break; } |