1. Field of the Invention
The present invention relates to multi-head printers and, more particularly, to techniques for processing print data for printing by multi-head printers.
2. Related Art
Various kinds of printers are well-known in the computer and digital imaging arts. Such printers include, for example, dot-matrix printers, laser printers, inkjet printers, and thermal printers. Thermal printers use thermal energy (heat) to produce printed output. More specifically, thermal printers typically contain a linear array of heating elements (also referred to herein as “print head elements”) that print on an output medium by, for example, transferring pigment from a donor sheet to the output medium or by initiating a color-forming reaction in the output medium. The output medium is typically a porous receiver receptive to the transferred pigment, or a paper coated with the color-forming chemistry. Each of the print head elements, when activated, forms color on the medium passing underneath the print head element, creating a spot having a particular density. Regions with larger or denser spots are perceived as darker than regions with smaller or less dense spots. Digital images are rendered as two-dimensional arrays of very small and closely-spaced spots.
A thermal print head element is activated by providing it with energy. Providing energy to the print head element increases the temperature of the print head element, causing either the transfer of pigment to the output medium or the formation of color in the receiver. The density of the output produced by the print head element in this manner is a function of the amount of energy provided to the print head element. The amount of energy providing to the print head element may be varied by, for example, varying the amount of power to the print head element within a particular time interval or by providing power to the print head element for a longer time interval.
A single thermal printer may include multiple thermal print heads, in which case the data to be printed is divided into a plurality of portions, referred to as “stripes,” each of which is printed by one of the print heads. The process of dividing the print data into stripes is referred to as “striping.” Multi-head thermal printers can be superior to single-head printers for cost and reliability reasons, particularly when wide printing is required. For example, the cost of a single wide head typically is significantly greater than the total cost of multiple small heads having the same aggregate width as the single wide head. Furthermore, the manufacturing yield for wide heads is very low compared to that of small heads. In addition, when a pixel fails in one print head in a multi-head printer, only the failing print head need be replaced, while the failure of a single printer in a single large print head requires the entire print head to be replaced at a much higher cost.
The print heads in a multi-head printer may be staggered with respect to each other. One example of this kind of printer is described in U.S. Pat. No. 4,660,052 to Kaiya et al., and is described as a heat-sensitive recording apparatus with multiple thermal heads disposed in a staggered arrangement along two platen rollers. The apparatus has alternate image segments printed on a first platen roller by a first set of print heads. The intervening segments are filled in by a second set of print heads printing on a second platen roller. The heads are arranged such that the printing of the second set of print heads overlaps the printing of the first set of print heads, forming “stitching” regions between each pair of adjacent segments in which the printing may be adjusted to obscure the presence of a transition from one to the other.
The use of stitching regions may create undesirable visible artifacts in the printed image if adequate preventative steps are not taken. Various techniques have been employed to “stitch” image segments within stitching regions so that the presence of the stitching regions is imperceptible to the greatest extent possible. Stitching techniques include techniques for performing image processing on stitched image segments prior to printing, mechanical techniques for properly printing stitched image segments with proper alignment, and combinations thereof. Particular examples of stitching techniques may be found, for example, in a commonly-owned patent application Ser. No. 10/374,847, filed on Feb. 25, 2003, and entitled “Image Stitching for a Multi-Head Printer.”
Striping and stitching are merely two examples of kinds of processing that may need to be performed on print data before it is provided to the print heads for printing. As the speed of multi-head printers continues to increase and as price competition among printer manufacturers continues to increase, it is becoming increasingly important that techniques for performing striping, stitching, and other image processing techniques be capable of processing print data both quickly and inexpensively.
Techniques are disclosed for performing processing, such as striping, staggering, and stitching, on print data prior to printing by a multi-head printer. Subsets of the print data may be stored in multiple stages of buffers and processed in parallel to increase processing efficiency. Print data representing digital photographs may be processed sufficiently rapidly to enable continuous printing of digital photographs at high speeds. Parameters of the system, such as print buffer size and interrupt frequency, may be varied in response to design requirements such as overall system cost.
Other features and advantages of various aspects and embodiments of the present invention will become apparent from the following description and from the claims.
Examples of techniques will now be described for processing print data in a multi-head print data in accordance with embodiments of the present invention. Referring to
The printer 202 receives print data 204 to be printed in a print job (step 102). The print data 204 may be any kind of data to print on an output medium. The print data 204 may, for example, be one or more color digital photographs or other digital images represented in a format suitable for input to the printer 202. The printer 202 includes a striper 206 which receives the print data 204 and stripes it to produce striped print data 208 (step 104). Examples of particular techniques that may be used for performing striping will be described below with respect to
The printer 202 also includes a stitcher 214 which receives the staggered print data 212 and stitches it to produce stitched print data 216 (step 108). Examples of particular techniques that may be used to performing stitching are described in the above-referenced patent application entitled “Image Stitching for a Multi-Head Printer.” The printer 202 also includes a thermal history control engine 218 which performs thermal history control on the stitched printer data 116 to produce thermal history control-adjusted print data 220 (step 110). Examples of particular techniques that may be used to performing thermal history control are described in commonly-owned patent application Ser. No. 09/934,703, filed on Aug. 22, 2001, entitled “Thermal Response Correction System.”
The printer 202 also includes a print engine 222 which renders and prints the thermal history control-adjusted print data 220, thereby producing printed output 224. Examples of the print engine 222 are described in the above-referenced patent application entitled “Image Stitching for a Multi-Head Printer.” The printed output 224 may, for example, be one or more color digital photographs or other image printed on a wide-format output medium.
Referring to
In the particular example illustrated in
Print heads 304a-f and 306a-f print output on an output medium 302 which passes underneath the print heads 304a-f and 306a-f in down-web direction 308a. In the particular example illustrated in
In one embodiment of the present invention, each of the print heads 304a-f and 306a-f is 6.4 inches wide and has a resolution of 300 dots per inch (dpi). As a result, each of the print heads 304a-f and 306a-f includes 1920 print head elements and therefore prints lines of pixels that are 1920 pixels wide (i.e., in cross-web direction 308b).
Print heads 304a-f and 306a-f are arranged in rows 316a-d. More specifically, row 316a contains magenta/yellow print heads 304a, 304c, and 304e; row 316b contains cyan print heads 306a, 306c, and 306e; row 316c contains magenta/yellow print heads 304b, 304d, and 304f; and row 316d contains cyan print heads 306b, 306d, and 306f.
Print heads 304a-f and 306a-f are also arranged in columns 318a-f. More specifically, column 318a contains magenta/yellow print head 304a and cyan print head 306a; column 318b contains magenta/yellow print head 304b and cyan print head 306b; column 318c contains magenta/yellow print head 304c and cyan print head 306c; column 318d contains magenta/yellow print head 304d and cyan print head 306d; column 318e contains magenta/yellow print head 304e and cyan print head 306e; and column 318f contains magenta/yellow print head 304f and cyan print head 306f.
Assume that pixels are numbered in the cross-web direction 308b beginning with pixel 1 on the right-hand side of FIG. 3 and ending with pixel 11,100 (300 dpi×37 inches) on the left-hand side of
Print heads 304a-f and 306a-f are also arranged so that there is some cross-web overlap between the output of the print heads 304a-f and 306a-f. For example, columns 318e and 318f overlap in region 310. Region 310 includes 84 pixels (0.28 inches) in the cross-web direction 308b in which the output of heads 304e and 306e overlaps with the output of heads 304f and 306f. Region 310 is an example of a stitching region in which stitching techniques, such as those disclosed in the above-referenced patent application entitled “Image Stitching for a Multi-Head Printer,” may be employed.
Print heads in each of the columns 318a-f are separated from each other by one inch in the down-web direction 308a. For example, magenta/yellow head 304c is separated by one inch 314a from cyan head 306c in the down-web direction 308a, just as magenta/yellow head 304d is separated by one inch 314b from cyan head 306d in the down-web direction 308a.
Print heads of the same color in different ones of the rows 316a-d are separated from each other by four inches in the down-web direction. For example, magenta/yellow head 304e (in row 316a) is separated by four inches 312a from magenta/yellow head 304f (in row 316c), and cyan head 306a (in row 316b) is separated by four inches 312b from cyan head 306b in the down-web direction 308a. The particular arrangement of the print heads 304a-f and 306a-f illustrated in
It is desirable to provide print data to the print engine 222 quickly enough that the print engine 222 is capable of continuously printing the print data 204. If the print data 204 cannot be provided to the print data 204 sufficiently rapidly, the print engine 222 may stop and restart at various times during the print job, thereby increasing the total time required to print the job. Furthermore, starting and stopping the print engine 222 causes “banding” to appear in the printed output 224 as the result of thermal bleed caused by the stalled print heads. Such banding typically makes the printed output 224 unacceptable for use, thereby requiring the print data 204 to be reprinted. As the speed of print engines continues to increase it is becoming increasingly necessary to perform processing on print data (such as the processing performed by the method 100 illustrated in
Referring to
Referring to
Referring to
The print source 252 enters a loop over each image I in the plurality of images to print (step 402). The print source 252 transmits image I (in the form of print data 204) to the printer 202 (step 404). The print source 252 waits for an acknowledgement 266 from the printer 202 that the printer 202 has received the print data 204 (step 406). The print source 252 repeats steps 404-406 for the remaining images (step 408). As will be described in more detail below, the printer 202 may begin printing one or more of the images in the print job before the print source 252 has finished transmitting all of the images to the printer 202.
Referring to
The receive controller 254 receives the next image (in the form of print data 204) from the print source 252 over connection 264a (step 414) and stores the image in the receive buffer indicated by the value of ReceiveBuf (step 416). In the present embodiment, ReceiveBuf=1 indicates receive buffer 256a and ReceiveBuf=2 indicates receive buffer 256b. The receive controller 254 transmits receipt acknowledgement 266 to the print source 252 (step 418).
The receive controller 254 initializes a variable OldReceiveBuf to be equal to the value of ReceiveBuf (step 420). The function performed by the variable OldReceiveBuf will be described in more detail below.
The receive controller 254 toggles the value of ReceiveBuf (step 422). In the present embodiment, step 422 may be implemented using the assignment ReceiveBuf=(3-ReceiveBuf). More generally, if there are more than two receive buffers, the value of ReceiveBuf may be cycled through its permissible range of values in a round robin fashion or other manner. As a result of toggling or otherwise changing the value of ReceiveBuf, the receive controller 254 will store the next received image in a different receive buffer than that indicated by the previous value of ReceiveBuf.
Note that the receive controller 254 may begin to receive the next image from the print source 252 after step 422, concurrently with execution of the remaining steps of method 410. When the receive controller 254 receives the next image from the print source 252, the receive controller 254 resumes execution of the method 410 beginning with step 414.
The method 410 stripes, staggers, and stitches the print data in the receive buffer indicated by the value of OldReceiveBuf and stores the stitched print data back in the receive buffer indicated by OldReceiveBuf (step 424). Step 424 may be performed by the receive controller 254 or other component of the printer 202, and may be performed, for example, using the techniques described above with respect to steps 104-108 of method 100. The receive controller 254 transmits the stitched print data to the front end 258 over bus 264b (step 426), where it is further processed as described below with respect to
Operation of the front end 258 and back end 262 will now be described according to one embodiment of the present invention. Note that the front end 258 includes two front end buffers 260a-b and that the back end 262 includes two back end buffers 264a-b. The receive controller 254, front end 258, and back end 262 may, for example, be software programs, and the receive buffers 256a-b, front end buffers 264a-b, and back end buffers 264a-b may, for example, be regions of memory (e.g., RAM) or a hard disk or other persistent storage medium. Although two receive buffers 256a-b, two front end buffers 260a-b, and two back end buffers 264a-b are shown in
Referring to
More specifically, the frond end 258 receives a first set of print data from the receive controller 254 (transmitted in step 426,
The front end 258 or other component of the printer 202 performs thermal history control on the first set of print data (using, for example, the techniques described above with respect to step 110 in
The front end 258 then processes the second set of print data from the receive controller 254 in the same way. More specifically, the front end receives the second set of print data from the receive controller 254 and stores it in the second front end buffer 260b (step 448). The front end 258 performs thermal history control on the second set of print data (step 450) and transmits the resulting processed print data to the back end 262 (step 452), where it is stored in the second back end buffer 264b.
Referring to
More specifically, the back end 262 receives a first set of print data from the front end 258 (transmitted in step 446,
Referring to
As described above with respect to
Referring to
In summary, at the beginning of a print job, the receive controller 254 receives two buffers of print data, performs striping, staggering, and stitching on them, and transmits the print data to the front end 258, which stores the print data in front end buffers 260a-b. The front end 258 performs thermal history control on the print data and transmits the print data to the back end 262, where it is stored in the back end buffers 264a-b. Once both of the back end buffers 264a-b are full, the back end 262 begins transmitting processed print data 266 to the print engine 222, which begins printing the print data 266. When either of the back end buffers 264a-b has been emptied of data, the back end 262 transmits a request (e.g., interrupt) to the front end 258, in response to which the front end 258 transmits another buffer of data to the back end 262, where the data is stored in the empty back end buffer. Similarly, when one of the front end buffers 260a-b has been emptied of data, the front end 258 receives additional data from the receive controller 254 and stores it in the empty front end buffer.
The techniques described above with respect to
Now referring to
Print data are arranged in the print data file 600 in alternating lines of cyan, magenta, and yellow pixels. Although only a select number of lines 702a-1 are shown in
More specifically, line 702a contains the first line of cyan pixels in the print data 204, line 702b contains the first line of magenta pixels in the print data 204, and line 702c contains the first line of yellow pixels in the print data 204. Line 702d contains the second line of cyan pixels in the print data 204, line 702e contains the second line of magenta pixels in the print data 204, and line 702f contains the second line of yellow pixels in the print data 204.
Line 702g contains the 300th line of cyan pixels in the print data 204, line 702h contains the 300th line of magenta pixels in the print data 204, and line 702i contains the 300th line of yellow pixels in the print data 204. For ease of illustration, the intervening lines 2-299 of print data 204 are not shown in
In one embodiment of the present invention, the front end buffers 260a-b and back end buffers 264a-b are subdivided into smaller buffers, each of which corresponds to one of the print heads 304a-f and 306a-f. For example, referring to
Each of the sub-buffers in buffers 260a-b stores print data for a particular one of the print heads 304a-f and 306a-f. For example, print buffer 706a stores print data to be printed by cyan print head 306a, print buffer 706b stores print data to be printed by cyan print head 306b, and so on. Similarly, print buffers 708a and 710a store print data to be printed by magenta/yellow print head 304a, print buffers 708b and 710b store print data to be printed by magenta/yellow print head 304b, and so on. The sub-buffers in the second front end buffer 260b are arranged in the same manner as the sub-buffers in the first front end buffer 260a. Furthermore, the sub-buffers (not shown) in the receive buffers 256a-b and the back end buffers 264a-b may also be arranged in the manner shown in
Before describing an example of a method that the striper 206 may use to perform striping on the print data 204, a particular example of striped data will be described. Referring to
In the example shown in
Cyan print buffer 706b includes pixels 1837-3756 of each of the 300 lines of cyan print data. For example, the first line 754a of buffer 706b includes pixels 1837-3756 of the first line of cyan print data, and the last (300th) line 754b of buffer 706b includes pixels 1837-3756 of the 300th line of cyan print data. Finally, the first line 756a of cyan print buffer 706f includes pixels 11,017-11,100 of the first line of cyan print data, and the (300th) line 756b of buffer 706f includes pixels 11,017-11,1000 of the 300th line of cyan print data.
Note that there is an overlap of 84 pixels between buffer 706a and buffer 706b. More specifically, both buffers 706a-b contain pixels 1837-1920 of each of the 300 lines of cyan print data. This overlap represents the 84-pixel overlap region 310 between cyan print head 306a and cyan print head 306b (
As described above with respect to
The method 800 initializes the value LC of a line counter 722b to an initial value (e.g., 1) (step 802). The line counter 722b specifies the line number of the first line of print data 204 that should be stored in the print buffers 260a-b. The method 800 identifies the size 722 c (in lines) of each print head buffer (step 804). The term “print head buffer” refers to a buffer associated with an individual print head. For example, each of the buffers 706a-f is a print head buffer.
The interrupt frequency 722a is the frequency at which the back end 262 interrupts the front end 258 to request additional print data. The value of the size 722 c may be selected to be large enough to hold at least as many lines of print data as may be printed by the print engine 222 between such interrupts. The value of the size 722 c may be selected prior to initiation of the method 800 based on the down-web speed 722g of the output medium 302, the down-web resolution 722h of the print heads 304a-f and 306a-f, and the interrupt frequency 722a.
In the present example, the down-web speed 722g of the output medium 302 is 0.5 inch/sec and the down-web resolution 722h of the print heads 304a-f and 306a-f is 300 dpi. Assume that the interrupt frequency 722a is one interrupt every two seconds. The output medium 302 travels 1.0 inches between each pair of interrupts (0.5 inch/sec×2.0 seconds). During this time, 300 lines are printed (300 dpi×1.0 inches). Therefore, the print buffer size 722 c should be at least 300 lines if the print buffers 702a-b are to hold sufficient print data to enable the print heads 304a-f and 306a-f to print continuously between interrupts. As described above, in the present example, the print buffer size 722 c is equal to 300 lines. Once the print buffer size 722 c is calculated, the method 800 may therefore identify the print buffer size 722 c in step 804 as the number of lines printed between interrupts.
Letting S be the print buffer size 722 c, the method 800 selects S lines of cyan, magenta, and yellow print data (for a total of 3s lines) beginning at the line number LC specified by the line counter 722b (step 806). For example, if LC=1, then the method 800 would obtain lines 1-300 of the print data 204 in step 806.
The method 800 initializes a pixel counter PC 722i to a value such as one (step 808). The method 800 identifies the width HW 722e of each of the print heads 304a-f and 306a-f (step 810), and the width OW 722j (in pixels) of the overlap region 310 (step 812).
Let HC be the number of heads 722d of each color. In the present example, HC=6. The method 800 enters a loop over a variable B (buffer) beginning with a value of 1 and ending with a value of HC (step 814). As will now be described in more detail, in each iteration of the loop over B, the buffers for a distinct one of the columns 318a-f is filled with striped print data.
The method 800 enters a loop over a variable H (head), which may take on values representing cyan, magenta, and yellow (step 816). The method 800 identifies the buffer HB specified by the values of H and B. For example, if H=1 and B=1, then HB is buffer 706a. If H=3 and B=3, then HB is buffer 710c. If buffer 260a is viewed as a two-dimensional array, then H and B may be viewed as indices into a two-dimensional array to identify the corresponding buffer.
The method 800 fills buffer HE with print data of color H, beginning at pixel PC and ending at pixel PC+HW−1 (step 818). For example, if H=1, B=1, PC=1 and HW=1920, then buffer 706a may be filled with pixels 1-1920 of the cyan print data obtained in step 806. Similarly, if H=2, B=3, PC=1837, and HW=1920, then buffer 708c may be filled with pixels 1837-3756 of the magenta print data obtained in step 806. The method 800 repeats step 818 for the remaining values of H (step 820).
Upon completion of the loop in steps 816-820, the method 800 will have filled one set of cyan, magenta, and yellow print head buffers. For example, the first time the loop in steps 816-820 is performed (i.e., when B=1 and PC=1), the method 800 will fill buffers 706a, 708a, and 710a with pixels 1-1920 of cyan, magenta, and yellow print data, respectively.
The method 800 assigns a new value to the pixel counter PC using the formula PC=PC+HW−OW (step 822). In other words, the method 800 increases the value of the pixel counter 722i by the width 722e of a print head minus the width 722j of the overlap region 310. For example, if PC=1, then step 824 will assign the value 1837 (1+1920−84) to PC. Such a result comports with the pixel number of the pixels on the left edge of buffers 706b, 708b, and 710b in
The method 800 increments the value of B (step 824) and repeats steps 816-822 if B is not greater than HC. The method 800 thereby fills the next column of print head buffers. It should be appreciated that the remainder of the loop over B fills the remaining columns of print head buffers with print data in the manner illustrated in
As described above, the striper 206 may store striped print data alternatively in the first and second print buffers 260a-b. A bank flag 722f may store a binary value that indicates in which of the two banks 260a-b the striper 206 is to store striped print data 206 at any particular point in time. For example, the bank flag 722f may be coupled to a switch 724 which directs the output 208 of the striper 206 to the first bank 260a when the bank flag 722f is equal to zero, and which directs the output 208 of the striper 206 to the second bank 260b when the bank flag 722f is equal to one.
After the striper 206 stores striped data 208 in one of the banks 260a-b (by performing steps 806-824), the method 800 may toggle the value of the bank flag 722f (step 826). The method 800 may then increase the value of the line counter 522b by the value of S (step 828) and return to step 806. Although not shown in
Assume, for example, that the striper 206 stores striped print data 208 in print buffer 260a on one pass of steps 806-824. When the bank flag 722f is toggled (step 826) and steps 806-824 are next performed, the next set of S lines from the print data 204 will be striped and stored by the striper 206 in print buffer bank 260b. During the next pass of steps 806-826, the striper 206 will store striped print data in buffer 260a. In this way, the striper 206 alternatively stores striped print data 206 in buffers 260a and 260b.
The use of two buffer banks 260a-b enables a new set of S lines of striped data 208 to be stored in one of the buffers 260a-b while additional processing or printing is being performed on the striped print data in the other one of the buffers 260a-b. As a result, a new set of striped data may always be available for printing immediately after the previous set of striped data has finished printing. In this way, the print heads 304a-f and 306a-f may be provided with data continuously, thereby enabling the printer 202 to print data at maximum efficiency.
Although
As described above, staggerer 210 staggers the striped print data 208 to produce staggered print data 212. The term “staggering” refers to the process of providing data to the print heads 304a-f and 306a-f in a sequence that takes into account the physical staggering of the print heads 304a-f and 306a-f in the down-web direction 308a and which thereby provides the correct print data to the print heads 304a-f and 306a-f at the correct times. Performing staggering correctly also requires that the down-web print speed and down-web resolution be taken into account.
The need for staggering may be appreciated by reference to
Referring to
Referring to
The method 1000 receives the current value of T 904 (step 1002). The staggerer 210 includes subtractor 908 which subtracts the time signal T 904 from the time offsets ΔT(R) 906a-d to produce effective times Teff(R) 910 for each of the rows 316a-d (step 1004). For example, using the values of the time offsets 806a-d described above, when T=0, Teff(0)=0, Teff(1)=2, Teff(2)=8, and Teff(3)=−10.
The method 1000 enters a loop over each value of R (e.g., the values 0, 1, 2, and 3) (step 1006). The method 1000 determines whether Teff(R)<0 for the current value of R (step 1008). If Teff(R)<0, the method 1000 stores null data (e.g., zero values) in the buffers for row R (step 1010). Otherwise, the method 1000 stores the striped data 208 for time Teff(R) in the buffers for row R (step 1012). The striped data 208 for a print head in row R at time Teff(R) may, for example, be the striped print data 208 beginning at line number Teff(R) times the down-web resolution of the print head times the down-web speed of the output medium 302.
The operation of steps 1008-1012 will now be described in more detail with respect to particular examples. Consider, for example, the beginning of a print job, in which case T=0 seconds. Now consider row 316a, for which R=0 and ΔT(0)=0 seconds. In this case, Teff(0)=T−ΔT(0) 0−0=0. Therefore, in this case, the method 1000 would determine in step 1008 that Teff(0) is not less than zero, and therefore would store striped print data for time Teff(0) (e.g., 0 seconds) in the print buffers for magenta/yellow print heads 304a, 304c, and 304e. Such striped print data would begin at line zero of the striped print data 208. This is the correct result, since at the beginning of printing the output medium 302 would begin passing under the print heads 304a, 304c, and 304e in row 316a.
Now consider row 316b, for which R=1 and ΔT(0)=2 seconds, at the beginning of the same print job (T=0 seconds). In this case, Teff(1)T−ΔT(0)=0−2=−2. Therefore, in this case, the method 1000 would determine in step 1008 that Teff(1) is less than zero, and therefore would store null print data in the print buffers for cyan print heads 306a, 306c, and 306e. This is the correct result, since at the beginning of printing the output medium 302 would not yet be passing under the print heads 306a, 306c, and 306e in row 316b. The same result would obtain for the print heads in rows 316c and 316d at time T=0.
Now consider the time at two seconds into the print job, at which T=0 seconds. Now consider row 316a, for which R=0 and ΔT(0)=0 seconds. In this case, Teff(0)=T−ΔT(0)=2−0=2. Therefore, in this case, the method 1000 would determine in step 1008 that Teff(0) is not less than zero, and therefore would store striped print data for time Teff(0) (e.g., 2 seconds) in the print buffers for magenta/yellow print heads 304a, 304c, and 304e. Such striped print data would begin at line 300 of the striped print data 208.
Now consider row 316b, for which R=1 and ΔT(0)=2 seconds. When T=2, Teff(1)=T−ΔT(0)=2−2=0. In this case, the method 1000 would determine in step 1008 that Teff(1) is not less than zero, and therefore would store striped ed print data for time Teff(1) (e.g., 0 seconds) in the print buffers for cyan print heads 306a, 306c, and 306e. Such striped print data would begin at line 0 of the striped print data 208. This is the correct result, since at time T=0, the beginning of the region printed by row 316a would just begin to pass under row 316b. At time T=0, the method 1000 would continue to store null data in the print buffers for rows 316c-d.
Now consider the time at eight seconds into the print job, at which T=8 seconds. Consider row 316a, for which R=0 and ΔT(0)=0 seconds. In this case, Teff(0)=T−ΔT(0)=8−0=8. Therefore, in this case, the method 1000 would determine in step 1008 that Teff(0) is not less than zero, and therefore would store striped print data for time Teff(0) (e.g., 8 seconds) in the print buffers for magenta/yellow print heads 304a, 304c, and 304e. Such striped print data would begin at line 1200 of the striped print data 208.
Now consider row 316b, for which R=1 and ΔT(1)=2 seconds. When T=8, Teff(1)=T−ΔT(1)=8−2=6. In this case, the method 1000 would determine in step 1008 that Teff(1) is not less than zero, and therefore would store striped print data for time Teff(1) (e.g., 6 seconds) in the print buffers for cyan print heads 306a, 306c, and 306e. Such striped print data would begin at line 900 of the striped print data 208.
Now consider row 316c, for which R=2 and ΔT(2)=8 seconds. When T=8, Teff(2)=T−ΔT(2)=8−8=0. In this case, the method 900 would determine in step 1008 that Teff(2) is not less than zero, and therefore would store striped print data for time Teff(2) (e.g., 0 seconds) in the print buffers for cyan print heads 306a, 306c, and 306e. Such striped print data would begin at line 0 of the striped print data 208. This is the correct result, since at time T=8, the beginning of the region printed by row 316a would just begin to pass under row 316c. At time T=8, the method 1000 would continue to store null data in the print buffers for row 316d.
Although additional examples could be provided, the operation of steps 1008-1012 should be clear from the description above. Although the time signal T 904 may be incremented for every line of striped print data 208, it may be incremented in larger steps, in which case the number of lines of print data stored in the print buffers in steps 1010-1012 may be equal to the number of lines printed between updates of T. For example, if T is updated every 1.0 seconds, then steps 1010-1012 may each store 150 lines of print data (0.5 inch/sec*1.0 seconds*300 dots/inch), beginning at the line of print data corresponding to time Teff(R).
The method 1000 repeats steps 1008-1012 for the remaining values of R (step 1014), thereby filling the buffers for the remaining rows 316b-d either with subsets of the striped print data 208 or with null data. The method 1000 repeats steps 1004-1014 when it receive the next time signal T 904 from the clock 902.
Among the advantages of the invention are one or more of the following. One advantage of techniques disclosed herein is that they enabling image processing steps such as striping and staggering to be performed efficiently by organizing data in buffers having buffer sizes and associated interrupt frequencies selected to ensure that print data is provided continuously to the print heads in a multi-head printer. The architecture of such a printer is both modular and scalable and is therefore suitable for use with subsequent generations of printers as they increase in speed.
Furthermore, techniques disclosed above can be implemented to provide print data at a sufficient speed using a conventional off-the-shelf operation system such as the Linux operating system, rather than a real-time operating system (RTOS). Although RTOSs typically provide higher bandwidth guarantees than conventional off-the-shelf operating systems, they are also more expensive, often by an order of magnitude. As a result, the ability to process print data at a sufficient speed using a conventional off-the-shelf operating system enables printers to be manufactured at much lower cost than with be possible with a RTOS.
More generally, the techniques disclosed herein may be employed to enable high-speed printing without the use of a real-time operating system and while keeping the amount of RAM needed in the printer to a minimum, thereby reducing the manufacturing cost of the printer even further. For example, assume a case in which the shortest time between interrupts for a non-real-time operating system is 700 milliseconds. In such a case, the minimum print buffer size is 105 lines (0.7*300*0.5, using the example figures described above). The total amount of RAM needed to implement buffers having this size may easily be calculated. Known amounts of additional RAM may be required for printer-resident software and other buffers. The minimum amount of RAM required to satisfy the minimum print buffer size required may therefore be calculated, allowing a printer which is capable of printing at maximum throughput to be manufactured at the minimum cost.
Another advantage of techniques disclosed above is that the print quality may be improved by providing some data, whether it be actual print data or null data (
It is to be understood that although the invention has been described above in terms of particular embodiments, the foregoing embodiments are provided as illustrative only, and do not limit or define the scope of the invention. Various other embodiments, including but not limited to the following, are also within the scope of the claims. For example, elements and components described herein may be further divided into additional components or joined together to form fewer components for performing the same functions.
Although various embodiments of the present invention are described with relation to thermal printers, the techniques disclosed herein are not limited to use in conjunction with thermal printers. Rather, the techniques disclosed herein may be used in conjunction with any kind of printer. Furthermore, the techniques disclosed herein are not limited to use in conjunction with printers having other particular features of the particular examples disclosed, such as the number, color, resolution, or speed of print heads.
The techniques described above may be implemented, for example, in hardware, software, firmware, or any combination thereof. The techniques described above may be implemented in one or more computer programs executing on a programmable computer including a processor, a storage medium readable by the processor (including, for example, volatile and non-volatile memory and/or storage elements), at least one input device, and at least one output device. Program code may be applied to input entered using the input device to perform the functions described and to generate output. The output may be provided to one or more output devices.
Each computer program within the scope of the claims below may be implemented in any programming language, such as assembly language, machine language, a high-level procedural programming language, or an object-oriented programming language. The programming language may, for example, be a compiled or interpreted programming language.
Each such computer program may be implemented in a computer program product tangibly embodied in a machine-readable storage device for execution by a computer processor. Method steps of the invention may be performed by a computer processor executing a program tangibly embodied on a computer-readable medium to perform functions of the invention by operating on input and generating output. Suitable processors include, by way of example, both general and special purpose microprocessors. Generally, the processor receives instructions and data from a read-only memory and/or a random access memory. Storage devices suitable for tangibly embodying computer program instructions include, for example, all forms of non-volatile memory, such as semiconductor memory devices, including EPROM, EEPROM, and flash memory devices; magnetic disks such as internal hard disks and removable disks; magneto-optical disks; and CD-ROMs. Any of the foregoing may be supplemented by, or incorporated in, specially-designed ASICs (application-specific integrated circuits) or FPGAs (Field-Programmable Gate Arrays). A computer can generally also receive programs and data from a storage medium such as an internal disk (not shown) or a removable disk. These elements will also be found in a conventional desktop or workstation computer as well as other computers suitable for executing computer programs implementing the methods described herein, which may be used in conjunction with any digital print engine or marking engine, display monitor, or other raster output device capable of producing color or gray scale pixels on paper, film, display screen, or other output medium.
Number | Date | Country | |
---|---|---|---|
Parent | 10806627 | Mar 2004 | US |
Child | 12187155 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 12187155 | Aug 2008 | US |
Child | 13232723 | US |