METHOD AND APPARATUS FOR CONVERTING THE RESOLUTION OF DOT MATRIX DISPLAY DATA

Abstract: Original print data of one resolution N are converted into print data of a higher resolution M. The small segment N1 original data is determined by comparing N to M and deriving the smallest fraction therefrom. Additional data is added to the original data by inserting M1-N1 blank data commands evenly between each of the original data. Each inserted blank is converted to a print command when the preceding and following original data are print commands.

Description: The present invention relates to a method and an apparatus for converting the resolution of graphic data; e.g. print data having one resolution which may have been generated from a host computer are converted to a resolution required for printing with a dot matrix printer which has a dedicated output resolution different than the host computer data resolution. Matrix printers available for printing data from a host computer, such as a personal computer, have limited resolution capabilities. Dot matrix printers in widespread use today utilize a fixed resolution capability such as 23,6, 42,2 and 94,3 dots/cm (60, 120 and 240 dots per inch), in order to avoid the additional expense of having multiple graphic resolutions available. Attempts have been made in the past to provide for a printer with a selectable graphic resolution. These prior art attempts propose utilizing a variable speed motor in conjunction with data modifying algorithms for changing the resolution of the printer. U.S. Patent No. 4,278,359 describes one such technique which incorporates a variable speed motor and variable frequency oscillator to provide for a different printer resolution. U.S. Patent No. 4,283,724 describes a technique for changing the character size of a character to be displayed. The reference describes a variable size character generator utilized for controlling the height and width of a character before displaying. The system appears very useful in controlling specific characters of a limited character inventory. However, a graphics display, wherein each dot may be part of an image not directly related to a known print character, is not possible with this system. US-A- 4 275 450 describes a magnification/demagnification apparatus and method to permit selective variation in the size of the output image derived from digital image signals. A Reduction Ratio register is pre-programmed to a count reflecting the image size desired with a Threshold register set to the desired threshold count. The count from the Reduction Ratio register is input to an Accumulator and summed with the count left over from processing the previous image signals. The Accumulator count and the Threshold count are compared. Where the Accumulator count exceeds the Threshold count, the image signal in process is passed on. Where the Accumulator count is less than the Threshold count, the image signal is deleted and the count from an Additive Reset register is added to the Accumulator. GB-A- 2 149 165 teaches a method of reducing the size of dot-matrix characters in a word processor or an office computer, the first row of dots is divided into a plurality of blocks and each block is provided with a ONE or a ZERO depending upon the number of adjacent (black) dots included therein. The same is also done with the first row shifted one dot to the left. Respective logical values of the shifted and non-shifted rows are ORed (column-wise) to obtain a ONE or ZERO block by block. These consecutive steps are repeated on all the rows. Each of the columns represented by ONEs and ZEROs of the row blocks is divided into a plurality of blocks, each of which is reduced by ORing its values. The use of the shifted rows prevents loss of column-wise character strokes which bridge the boundary between blocks. Other references in the prior art describe techniques for scaling characters or recomputing a new data point based on an old data point and approximate output pitch. These systems as well appear dedicated to a limited inventory of print characters. The full benefits of printer graphics requires that graphics of different resolutions, not limited to character display and generation, be emulated for printing on a fixed dot printer resolution. The use of the dot matrix printer, for other than character printing, is becoming more popular and useful as a means for communication. Thus, for full compatability with available host computer data sources, graphics printing is desired using a printer of one resolution and a source of data of another usually lower resolution. If the graphics data is not converted to account for the difference in resolution, the printed image will suffer from distortion. It is therefore an object of this invention to provide a method of converting original serial graphics data of a lower (higher) resolution N to data of a higher (lower) resolution M(S) compatible with the resolutions of e.g. a graphic data display device or a dot printer. It is also an object of this invention to provide an apparatus for converting original serial graphics data from a lower resolution N to a higher resolution M. These objects are accomplished by the features of the main claims. Further advantages of the invention are characterized in the subclaims. In accordance with the invention defined in claim 1, a method is provided of converting original serial graphics of a lower resolution N to data of a higher resolution M suitable for printing with a dot matrix printer or displaying on other dot matrix display devices having a dedicated resolution. In an embodiment the data is received in slices, a slice corresponding to a display command for each data display position of the display device. This invention may also find use as an intermediary step in converting higher resolution data to lower resolution data. As used herein in the context of the preferred embodiment, display commands indicate the presence or absence of a character to be displayed on a dot matrix printer. The presence of a character which is a dot is referred to as a print command, and the absence of a dot is a blank command. The invention defined in claim 1 operates in accordance with the following principles. In carrying out the conversion from a lower data resolution to a higher data resolution, the data is first analyzed by deriving the ratio of the number of data positions in the original host supplied print data stream to the data positions at the new desired resolution. This ratio comprises the lowest common fraction of the ratio of the input data resolution N and output data resolution M. This lowest commmon fraction N1/M1 identifies the smallest segment, N1, of original data slices which is to be converted into the smallest segment of the higher resolution data, M1. For every N1 segment of input data slices defining a print command or the absence of a print command, i.e., a blank command, M1 such data positions for the segment are created by the method of the present invention. In the conversion from a lower data resolution to a higher data resolution, the smaller resolution segment N1 is distributed over the larger segment M1 in a format to preserve line continuity and image proportionality. The difference (B) represented by M1-N1 identifies the number of additional data slices which are to be added to each segment N1 of the original data slices to have data of a resolution M. These additional data slices initially comprise data indicating blank commands, evenly distributed with the original data to derive a new data stream having a sufficient number of data slices. In one embodiment of the method for converting lower resolution graphic data to higher resolution graphic data, when N1 is greater than B, a single blank command data slice is inserted every whole number integer of the fraction N1/(B) of original data slices until the required extra data positions are created with blank command data slices. Whole number integer, as used herein, refers to the integer portion of a fraction, i.e., where the fraction is 5/2, the whole number integer is 2. In the event that some of the original data remain unseparated after inserting the blank command data slices, the original data must be redistributed so that certain locations in the data stream contain more than N1/B original data slice. The locations are determined by the whole number of the fraction B/SNAF, where SNAF (slices not accounted for) is the number of remaining data to distribute. Inclusion of more than N1/B original data slice at the integer interval will evenly distribute the original data in the higher resolution data stream. In the event that N1 is less than or equal to B, a number of blank data commands are inserted between each data of the original data stream until the full number M1 of data positions are derived. This number of blank commands is selected to be the whole number integer portion of the fraction After inserting the required number of blanks between the original data of the original data stream, any blank commands which remain are evenly distributed throughout the data stream. The remaining blank commands SNAF (slices not accounted for) are distributed at locations in the data stream which are determined as the whole number integer of the fraction N1/SNAF where SNAF is the number of blank command data slices to be distributed. In both instances, where N1 is less than B and N1 is greater than or equal to B the resulting data stream is checked to see if one or more inserted blank commands are bounded by two print commands. These blank commands are changed to a print command which eliminates any spreading resulting from the insertion of blank commands in the data stream. Printing of the new higher resolution data stream will then provide a proportioned display of the original lower resolution data. In accordance with the invention, a method defined in claim 4 is also provided for converting original serial graphics data of a higher resolution N to a lower resolution S. This technique will find use when the host processor delivers data at a print resolution greater than the printer resolution capacity. Alternatively, when the printer has multiple resolution capabilities, it may be advantageous to print at a lower resolution. Lower resolution printing may, in some instances, provide for a higher quality print and less document printing time. The conversion of higher resolution graphics data to lower resolution graphics data employs the foregoing method to convert the original higher resolution graphics data to an intermediate graphics data of a greater resolution. The intermediate graphics data is then converted to the desired lower resolution graphics data by combining groups of data slices of the higher resolution data to form a single data slice. The grouping of the intermediate data is selected to include X data slices, where X is a whole number integer representing the ratio of intermediate data resolution to the data resolution of interest. Brief Description of the Figures Figure 1 is an overall block diagram showing a printer of a fixed resolution which will carry out the method in accordance with the invention of converting lower resolution data to a compatible fixed higher resolution data stream. Figure 2 demonstrates the print head configuration in a dot matrix printer incorporating the method in accordance with the present invention. Figure 3 illustrates the technique for generating the character H from the print head of Figure 2. Figure 4 illustrates the format of the print data received from the host computer 11. Figure 5 illustrates the theoretical basis for changing the data of a lower resolution to the higher resolution in accordance with the present invention. Figure 6 is a specific computer program for a microprocessor of a dot matrix printer which will carry out the required conversion when N1>B. Figure 7 is a specific computer program for a microprocessor of a dot matrix printer which will carry out the required conversion when N1≦B. Figure 8 illustrates the process for converting higher resolution data to lower resolution data. Figures 9 and 10 are flow charts of a specific computer program for a dot matrix printer which will carry out the required conversion when graphics data is to be converted from a higher resolution to a lower resolution. Referring now to Figure 1, there is shown in block diagram form a typical dot matrix printer 12 connected to receive dot matrix print data from a host computer 11. The host computer 11 can be any standard personal computer connected by a standard interface 13, such as RS232C to the dot matrix printer 12. The dot matrix printer 12 may be any of several types, the IBM 4201 printer for graphics printing manufactured by the IBM Corporation being generally representative of the fixed resolution printer. The dot matrix printer 12 has a limited number of resolution capabilities. The printer 12 includes an 8 wire print head 17. A print head driver circuit 16 supplies a 1 or 0 drive signal to each of 8 wires of the print head, indicating a print command, or the absence thereof, i.e., a blank command, is to be effected at a print position of the print head. The printer includes a platen 1 over which a print medium 2, for example a continuous web of paper, is moved by means of two tractor devices 3, 4. Each tractor device includes a wheel 5 provided with pins 6 on its outer surface. The pins 6 are adapted to engage with holes 7 formed adjacent to the side edges of the medium 2. The two wheels 5 are mounted on a common shaft 8 which can be rotated as required by a motor 9 in order to move the medium 2 over the platen 1. Motor 9 receives a command from controller 18 which indexes the medium 2. The printer includes a print head 17 which is mounted on a support extending over the platen 1 so that the medium 2 passes between the platen 1 and the print head 17. The print head 17 can be moved along the support by means of a motor 10 by, for example, forming cooperating threads on the support 20 and the head 17 and rotating the support 20. The print head can thereby perform printing operations at any point on the surface of the medium 2 as the print head is moved across the medium and the medium is moved over the platen. The print head 17 is driven horizontally with respect to the print medium by a carriage control 19, operated from a host microprocessor 15. The host microprocessor 15 receives print data slices from the RS232C interface 14, and indexes the print head with respect to the print medium. At each new position the print head will be positioned to print a column of dots. Referring to Figure 2, the general layout of an 8-wire print head 17 is shown. The print head includes eight positions which are similar to those in the IBM 4201 printer for graphics printing. Each of the eight positions being identified by binary 1 through 128. Any combination of print wires may be selected to print any combination of dots by applying an appropriate 8 bit word to the print head. Thus, depending on the format of the eight bit signals coming from the interface 16 to the print head, the print head will print up to eight dots in a column. The print head 17 is formed with a row of printing elements supported in a body portion, as illustrated in Figure 2 which is a view of part of the head 17. The elements of 17 are wires which can be selectively moved axially by, for example, using an electromagnet associated with each one, and which cooperate with an ink ribbon to perform printing operations on the medium. Each print element causes the printing of a character element or print dot and as the head moves a matrix of print dots in vertical columns and horizontal rows is printed. This method of operation of a printer is well known and will not be described in detail. Figure 3 demonstrates a graphic figure resembling the letter H which was formed by printing in position 0 of the print head with respect to the print medium a full column of dots from the command of binary 1 1 1 1 1 1 1 0 and then at positions 1 through 6, printing the binary commands 0 0 0 1 0 0 0 0. At position seven of a 240 dots per inch resolution, the command 1 1 1 1 1 1 1 0 is generated to complete the figure. It is to be noted that with the dot matrix printer, graphics data can be printed by locating one or more dots with any of the positions of the print head elements. The format of the data slices supplied by the host computer 11 for printing at each position of the printer head over the print medium is shown more particularly in Figure 4. Figure 4 includes a preamble ESC R, x, R indicating a graphics mode of variable resolution and x indicating the particular resolution in dots/inch. The second byte of information is the I count, shown to be 1088, corresponding to 53,5 dots/cm (136 dots per inch) of print resolution for printing a line length of 20,32 cm (8 inches). The following 1088 bytes of data are data slices for each position of the print head in the 20,32 cm (8 inch) line. Following execution of all 1088 bytes, the print head will assume a beginning position again with respect to the print medium, and an additional data stream of Figure 4 is sent by the host computer to the printer 12. The method in accordance with the present invention provides for programming steps in microprocessor 15 which will recognize a data stream header indicating a print data resolution different from the dedicated resolution of the printer 12. A subroutine of microprocessor 15 will process each byte of data in accordance with the following rules when the input data stream is to be converted to data having a higher resolution. The theoretical basis for expanding data of a lesser resolution received from the host computer 11 to data of a higher resolution is demonstrated by referring to Figure 5. In Figure 5, line A thereof, data is shown having 53,54 dot/cm (136 dot per inch) resolution. The printer dedicated print resolution is, in the present example, assumed to be 94,45 dots/cm (240 dots per inch). The ratio of these two resolutions N/M, reduced to its lowest fraction, N1 / M1, is the fraction 17 / 30 where N1 = 17 and M1 = 30. This fraction identifies the smallest segment of original lower resolution data as containing 17 original data slices to be distributed over 30 data intervals of the new higher print resolution. The method in accordance with the present invention will analyze the incoming data stream for the smallest segment of data slices N1 to be emulated to a larger resolution segment, M1. As shown in line B of Figure 5, there are an additional 13 data positions in the new higher resolution format. These additional 13 data positions represent additional blank command data slices to be added to the original data stream. These 13 additional blank command data slices are distributed among the original 17 data positions to avoid any elongation of the print information by observing the following rules. The 13 additional spaces, B, are spaced apart at the whole number integer represented by N1/B. This whole number integer equals 1. As such, each of the additional 13 blank commands are inserted between every original data slice position until all 13 additional spaces are utilized. Line C demonstrates the result of this distribution. Each of data D1 through D13 are evenly spaced into data partitions comprising an original data slice followed by an inserted blank command data slice. In other circumstances where the integer N1/B is greater than 1, the partition will include the integer of N1/B data slices followed by an inserted blank command. A remainder SNAF of data D14, D15, D16 and D17, however, do not share the same spacing and do not include the blank command data slices separating each original data slice as the previous data portions. As such, the remainder represents a discontinuity in the reformatted data which other processing steps will effectively remove. Since there are four remaining data, the data stream of line C is further changed, such that every third data partition, P3, P6, P9, P12, includes two of the original print data slices adjacent to each other. This rule can be stated as determining the number of remaining data slices SNAF (equal to four in the present example), and then determining every partition of data slices, represented by the whole number integer of the fraction which receives an adjacent original data slice. Thus, since 13 additional data slices were added, every third partition (the whole number integer of includes the following data slice. Thus, as shown in line D, D3 and D4 occupy the same partition as do D7 and D8, D11 and D12, D15 and D16. The effect of this distribution is to more evenly distribute the 13 blank data slices B throughout the original data stream, leaving 13 partitions, every third partition including two original data slices. Finally, an additional step is carried out for reducing any spreading which results between print commands of the higher resolution data. Each of the inserted blank data slices B1 through B13 is checked to determine whether an inserted blank data slice precedes and follows a print command. If the preceding and following original data slice separated by one or more inserted blank data slices is a print command, that blank slice or slices is converted also to a print command. Lines F, G and H of Figure 5 demonstrate the foregoing steps for the simplified case where the following print commands in the format of Figure 4 are received: The above example assumes that only a single row of printed dots is to be printed by firing wire 7 of the print head of Figure 2 to form the horizontal row F. The segment of original data is distributed over the 30 interval larger resolution segment by inserting the 13 blank data slices in step C as shown in line G. In step H, corresponding to step D, every data slice of the third partition is combined with the following data slice. Finally, those blank data slices b8, b11 and b12 which were inserted and are bounded by print command data slices such as D10, D11, D14 and D15, and D16 and D17 are changed to a print command. Thus, comparing lines F and I it can be seen that the original data is evenly distributed over the new higher resolution data segment without distortion. The foregoing example demonstrates the theoretical basis for the present method of converting lower resolution graphics data to higher resolution graphics data when B is less than N1. Where the number of additional positions B (equal to M1-N1) of the new higher resolution data stream is greater than or equal to N1, more than one blank command data slice is added between the original data positions to form partitions with the original data to derive the new higher resolution data. These partitions comprise a group of inserted blank slices separated by a single original data slice. The number of inserted blank command data slices between each original data slice is determined by the integer P, where P= the whole number integer of the fraction If, after insertion of the required blank data slices there is a remainder indicating that at the end of the original data, now separated by blank data slices, a remaining number of blank data slices exist for completing the minimum segment M1, this remainder is distributed as were the remaining original data slices in the foregoing example. The number of remaining blank data slices is calculated as SNAF=B-P*(N1) . These remaining blank data slices are distributed at an interval of the original data proportional to the integer, SP=N1/SNAF . During every SP partition, where a partition is a group of inserted blank data slices terminated by a data slice, an additional blank data slice is inserted which will eliminate the remaining blank data slices SNAF and evenly distribute the original data. Using the foregoing rules, a processing routine may be developed to take each of the minimum segments of lower resolution data received from the host computer 11 and convert each of these segments into data for printing on a fixed higher resolution dot matrix printer. This discussion is the theoretical basis for making the conversion from the lower resolution data to the higher resolution format. As will become apparent in discussing the programming steps for carrying out this method, the steps of Figure 5 can be effected without creating each of the lines B through E, but each of the required steps may be effected on each pair of received original data slices. The previous example will be found common to many dot matrix printing schemes wherein the resolution of the printer in the horizontal direction is to be matched with the lower horizontal resolution of the received data. It should be noted, however, that the foregoing principles can be applied to match resolutions in the vertical direction. Differences in vertical resolution may be utilized to determine if additional vertical data is to be printed. Additional vertical data slices in the form of blank slices can be added to the original data to create a higher resolution data stream. The foregoing rules for redistributing the inserted data and converting the inserted data to print commands when bounded by original print commands can be effected. This technique can be employed when any two consecutive vertical data slices are available which are separate but contiguous in a graphics display. The smallest ratio between vertical resolutions may be determined as V1/V2 and from this fraction a number of additional column data (V2-V1) to be inserted between each original column data will be found. Calculating the foregoing parameters of B, P, SNAF and SP using the column data as the data stream to be emulated will determine the new distribution of the column data. The new distribution is checked to determine if any inserted blank data slices are bounded by original print commands and thereafter converted to print commands. The foregoing rules for converting print data of a lower resolution to a higher resolution may also be utilized as an intermediate step in forming a lower resolution data stream from an original higher print data stream. The original data stream is emulated to a higher resolution which is a multiple X of the desired lower resolution. Once formed, X adjacent new data slices are logically combined in a logic OR function to provide a single data slice at the lower data resolution. This technique of selecting a multiple X, forming the higher resolution and converting the higher resolution data to the lower resolution data of interest will be described later herein. Summary of Foregoing Rules for Converting Lower Resolution Data to Higher Resolution Data The variables are: N : Not supported density, to be emulated M : Supported density used for emulation N1 : Least common denomination of N in (N/M) M1 : Least common denomination of M in (N/M) B : Amount of blank slices need to be inserted P : No. of slices (dots) before the next slices (dots) insertion SNAF : Slices (dots) not accounted for on the first pass SP : Add one slice on each SP partition DF : The front data slice (dot) that brackets the blank(s) DE : The rear data slice (dot) that brackets the blank(s) IB : Data calculated for the inserted slice(s) (dot(s)) Stage 1 and 2: B = M1 - N1 For case where N1>B P = Integer (N1/B) SNAF = N1 - P * (B) SP = Integer (B/SNAF) For case where B>N1 P = Integer (B/N1) SNAF = B - P * (N1) SP = Integer (N1/SNAF) Stage 3: IB = DF and DE Incoming data is received at the known resolution N and the first of the processing steps determines the ratio N/M and the lowest fraction thereof N1/M1. Next, the number of blank spaces to be added to the lower resolution original data is determined as follows: B=M1-N1 . These additional blank data slices will be distributed in accordance with the following rules depending on whether B is less than N1, or B is greater or equal to N1. In the first instance, a single blank data slice is inserted for every whole number integer represented by N1/B. In the second of these conditions, the number of blank data slices inserted between each data slice of the original data is determined as P, the whole number integer of the fraction Thus, in the foregoing example of converting data of a resolution of 53,54 dots/cm (136 dots per inch) to 94,45 dots/cm (240 dots per inch), N1=17, M1=30, B=13 and P=1. Hence, after each of the first 13 data slices, a blank data slice is inserted. In order to smooth out the remaining data which follows the inserted blank data slices b shown in Figure 5, the number of remaining data slices not accounted for are determined as SNAF=N1-PxB when B is less than N1, SNAF=B-P*N1 when B is greater or equal to N1. The remaining original data or inserted data blank slices are distributed throughout the modified data stream by calculating SP, where SP equals the integer (B/SNAF) when N1 B, or SP equals the integer N1/SNAF when N1≦B. Thus, in the foregoing example, where data of a resolution of 53,54 dots/cm (136 dots per inch) is converted to data of 94,45 dots/cm (240 dots per inch), SP was determined to be 3. This means that every third partition, i.e., after every third interval containing an original data slice and an inserted blank data slice, the following data slice is moved into the third partition, as shown in Fig. 5. Thus, four blank data slices previously inserted into the data stream have been redistributed by including in every third partition an adjacent original data slice. The entire image data is evenly distributed throughout the new data stream. The final stage of implementation will convert any of the inserted blank data slices between two consecutive print command data slices DF and DE into a print command as follows: IB = DF and DE where DF represents the data before one or more inserted blank data slices IB, and DE represents the data following one or more inserted blank data slices. Referring to Figure 6, the program implemented in the microprocessor 15 for carrying out the foregoing method is shown. When the header on the host computer print data of Figure 4 indicates a resolution different from the printer dedicated resolution, the resolution emulation program is entered in 23 and M1 and N1 are determined. If N1>B is determined in step 24, the remaining steps of Figure 6, are carried out, where B≧N1, the program will proceed to Figure 7. Upon entry to the emulation subroutine of Figure 6, the number of additional blank data slices B to be added to the original data; P, the number of original data to separated by an inserted blank data slice; SNAF, the remaining data after inserting the additional data to the original data stream; and SP, the location of each partition of the new data stream which receives more than one original data slice are determined as follows: Having thus determined the general parameters for processing the incoming original data, initial values are set in step 26 for the following parameters: P1 is the data position within a partition currently being processed, B1 the current number of blank data slices left to insert, SP1 the current partition being processed, and SNAF1 the number of data slices not accounted in a segment of N1 data slices of host data. The program will run until all of the data received from the host computer for a given message according to Figure 4 has been processed. Decision block 27 determines when all the data, identified by the I count number, has been so processed. At this time, the program will proceed to an end indication, permitting the microprocessor to exit from the program. The first data slice to be processed, D1 in the foregoing example of converting data from 53,54 dots/cm (136 dots per inch) to 94,45 dots/cm (240 dots per inch), is retrieved in step 28, and the programming proceeds to step 33. In step 33, the P1 value is decremented to 1. Decision block 34 indicates that D1 is currently being processed as P1 = 1, corresponding to the first data of the current partition being processed. A print command at 40 will print D1, the I count is decremented by 1, and OLD SLICE=NEW SLICE (D1). Having thus printed the first data slice D1, the program continues looping back through decision blocks 27, 28 and 29 to program step 33. Decision block 29 will transfer control to a second routine when each of the partitions to receive an additional data slice is encountered. This condition is represented by SP1=SP, SP having been earlier calculated in accordance with the foregoing rules to determine at which partition an additional original data slice is to be inserted. Continuing with the foregoing example, step 33 will decrement P1 to 0. Decision block 34 will indicate that the end of the first partition is reached, as P1=0, and a data blank slice insertion is to be effected. Programming step 35 will reset P1 to be P, decrement B1 to indicate that one of the additional blank spaces is being inserted, increment the partition number SP1, and prepare to make the required insertion in step 36. Step 36 will perform a logical function between the previous data slice D1 (OLD SLICE) and the present data slice D2 (SLICE), thereby making an insertion depending on the result of this logical combination. As was discussed with respect to the line E of Figure 5, if this result is a 0 a blank is inserted when step 36 is executed and if the result is a logical 1, a print command is executed in step 36. After printing the result of the logical functions, step 40 will print D2. The foregoing steps are continued until the first partition SP1 is reached which receives an additional data slice which, in the foregoing example is D4, D8, D12 and D16. Decision block 29 transfers control to programming step 30. The additional data is retrieved and printed in programming step 31. Control then returns such that decision block 29 will continue processing of the data until the second and subsequent partitions are encountered which receive an additional data slice. When the entire segment represented by N1 data slices of the host data have been processed, decision block 38 will indicate this as B1 has been decremented to 0 indicating that the entire additional amount of data B has been inserted. Programming step 37 will reinitialize B1, SP1 and SNAF1 such that the next segment of data from the host computer 11 can be processed. Thus, these programming steps of Figure 6 will receive the incoming data of a lesser resolution and convert the same to the higher resolution data in accordance with the foregoing rules. Figure 6 illustrates the condition where B is less than N1, implementing the foregoing rules for determining where to insert a blank space, how to distribute the remainder of the data spaces after inserting B blank spaces, and converting any inserted blanks to a print command when the previous and following of the original data is a print command. When the header of Figure 4 is deciphered and N1 is determined to be less than or equal to B, the microprocessor will execute the subroutine of Figure 7 for this condition. This subroutine is entered at 42, and the general parameters P, B, SNAF and SP are calculated from N1 and M1 as previously determined in step 43. P represents the number of blanks inserted between received data slices, B the total number of blank data to be inserted, SNAF the number of blank slices left to be distributed, and SP the partition number receiving one of the SNAF blanks. These parameters are determined as: Initial conditions for each of P1, B1, SNAF1 and SP1 are set in step 44. The first dot matrix print data slice is retrieved from the microprocessor 15 memory and conversion of the input original data begins. The first of the data slices D1 will be printed in step 45 and the I count decremented by 1. Additionally, the old slice value is set to D1. If the complete data stream of Figure 4 has not been received as determined in decision block 47, programming step 49 will fetch another data slice D2, and initialize P1 to be equal to P and SP1 equal to SP1+1. Step 51 will insert either a blank or a print command depending on whether the old slice and new slice after being combined together in a logic AND function, produce in step 51 a 1 or a 0. The result of ANDing these two entities is printed. Decision block 53 will determine whether or not a partition has been completed by inserting the proper number of inserted blank data slices. If P1 is greater than 0, the program returns to step 51 inserting either another blank data slice or print command, depending upon the result of the logical AND of the slice and old slice function. Step 54 will determine when a partition has been reached of SP1=SP, such that an additional blank command is inserted. At this time, such a partition results in the program executing step 52, decrementing the value of SNAF1, indicating one remaining of the remaining blank data slices SNAF has been accounted for. Decision block 47 will indicate the end of a data stream of Figure 4. When B≧N1, data will be inserted following the complete processing of the input data stream as an additional partition of data. Step 48 will set the next data to be inserted as a zero blank data slice, the number of remaining data P1 to be inserted as P, and set SP1, the current partition number equal to the former partition number indexed by 1. Step 51 will thereafter insert the remaining data, decrementing B1 and P1. The program will loop between decision block 53 and step 51 until P1≦0, indicating that all of the data of the remaining P data has been inserted. Decision block 60 will determine whether or not all of the inserted data has been made in the new data stream when B1 equals 0. This results in a reinitialization of B1, and SP1 and SNAF1. The I count decision block 56 will end the processing when the I count 56 indicates that no further data is contained in the data stream of Figure 4. Thus, with Figures 6 and 7, the conditions of B greater than or equal to N1 and B less than N1 are fully accounted for. Detailed Description of Method for Converting Original Print Data to Lower Resolution Print Data The foregoing method is useful in converting higher resolution print data to lower resolution print data. Some printers such as the referenced IBM 4201 printer although having multiple print resolutions print faster at a lower resolution making printing at the lower resolution more desirable. In order to change higher resolution print data to a lower resolution print data, data slices of the original data stream must be removed. The removal of data slices in the higher resolution data is accomplished by combining together groups of consecutive higher resolution data slices to derive the lower resolution data slices for printing. As long as the ratio X between input data resolution and output print resolution is an integer, no crucial print information is lost. The combining stage requires the logical OR function of X consecutive data slices to produce data at the desired print resolution. Where the ratio X between input data resolution N and output data resolution S is not exactly an integer X, the input data is converted to intermediate print data of a higher resolution X * S, using the previously described method of converting lower resolution graphic data to higher resolution graphic data. The value of X is selected such that X is greater than 1, and satisfies the following relationship: ((X-1) * S) < N < X * S The value of X which obeys this relationship is defined as X = (integer ((N-1)/S))+1 Having thus determined X, the input data is converted, using the foregoing method, to an intermediate higher resolution data stream of resolution X * S. X consecutive data slices of the data stream are combined in logical OR function as (d1 OR d2 ... OR dx), (dX+1 OR dx + 2 OR ... dX+X) ... The resulting data stream is at the required resolution S. The foregoing method is illustrated byconsidering an example of converting input graphic data having a print resolution of 56,7 dots/cm (144 dots/inch) to data having a print resolution of 47,34 dots/cm (120 dots per inch). The value of X for creating the higher intermediate resolution data is determined as: S = 120, N = 144, X = integer(143/120)+1 = 2 The intermediate resolution data is therefore created at a print resolution of 2 x 120 = 240 per inch (94,45 dots/cm). Referring to Figure 8, the result of converting the input data of a resolution N to the higher, intermediate data resolution of X*S is shown using the input data where The smallest segment of original dats N1 and the smallest segment M1 of the intermediate data resolution of 94,45 dots/cm (240 dots/inch) are shown in lines A and D. The input data slice number and actual data are shown in lines B and C. Since B=2 P=whole number integer SNAF = 1, SP = 2 Therefore, after each original data D in each segment N1, a blank is inserted as shown in line D. Additionally, SNAF = 1 requires that two original data be inserted in the second partition. Line E shows the result of converting each inserted blank bounded by a print command (D₆, D₇, D₁₀, D₁₁) to a print command. The intermediate resolution data may now be converted to the desired lower resolution print data by combining in an OR function each of X consecutive data points, where X = 2. The result of this combination is shown in line F. Referring now to Figures. 9 and 10, there is shown an implementation of a program for converting the higher resolution print data to lower resolution print data. This program has been implemented, utilizing the program of Figure 6 which converts lower resolution data to higher resolution data. As was described with respect to the example of Figure 5, an intermediate resolution data is obtained as a step in deriving the new lower resolution data. This intermediate resolution data is at a higher resolution than the input data resolution. The program steps of Figures 9 and 10 which correspond with those of Figure 6, have been numbered as those in Figure 6, with the prefix "1" preceding the appropriate reference numeral. Comparison of Figure 6 and Figures 9 and 10 will readily identify the common steps which were modified in certain respects to be described, as well as supplemented with other steps to derive the new lower resolution data stream. The resolution emulation 123 for deriving lower resolution data is begun by initially calculating the values for X, X*S, M1, N1, B SNAF, P and SP for the new intermediate data stream in step 125. Having thus determined the parameters of the intermediate data stream of higher resolution, and the number of consecutive data slices of this data stream which are to be combined in a logical OR function as X, the program proceeds to calculate initial values for P1, B1, SP1, SNAF1 in step 126. These calculations, as described with reference to Figure 6, are used to generate the new intermediate higher resolution data stream having a resolution of X*S. As the data is received, the I count is checked in step 127, and the first data slice is received in step 128. Steps 129, 133, 134 and 135 will process the data as was accomplished in Figure 6 to create the higher resolution intermediate print data. In the example described with respect to Figure 5, the program of Figures 9 and 10 would calculate X, (X*S), M1 and N1 as shown in Figure 5. Additionally, each of the following initial values would be set: The intermediate higher resolution (X*S) data stream will be created with steps 127 through 138. Each time a data slice of the new higher resolution data stream is created by step 135 or 130, instead of printing the newly created higher resolution data slice, the data slices are combined in a logical OR function when less than X such data slices have been formed. Decision blocks 146, 147 and 148 will determine, during the creation of the higher resolution data stream, when X of said higher resolution data slices have been created. Each time a data slice is created for the higher resolution data stream, X1 will be incremented, the previous data slice and present data slice will be ORed together in steps 153, 149 and 156 and the result designated PRT slice. Each time a new data slice of the higher resolution intermediate data is created, steps 149 and 156 will decrement the I count, set the OLD SLICE equal to the SLICE and proceed to create an additional data slice for the intermediate higher resolution data. Program control will return to creating another higher resolution data slice through path 2 until X1 has been determined to be equal to X. At this time, a sufficient number of higher resolution data bits have been created and combined in a logical OR function to permit printing of the result. Steps 151, 152 and 155 will print the result of the accumulated higher resolution data slices. The I count is decremented in steps 151 and 155, OLD SLICE is set equal to SLICE, PRT SLICE is set to SLICE and X1 is initialized to 1. There is also shown in steps 135 and 154 additional steps of HOLD=SLICE and SLICE=HOLD. This will permit a saving of a retrieved data slice in step 128 to be ORed in step 156 with the result calculated for PRT slice in step 153. Thus, it is seen that the previous program of Figure 6 for generating higher resolution print data, can be modified according to Figures 9 and 10 to reduce the number of data slices of the newly created higher resolution intermediate print data stream. Thus, by creating a higher resolution intermediate data stream, and ORing together the created data slices in combinations of X data slices, a new lower resolution data stream for printing is generated. Therefore, it is seen that the present invention is useful in creating both higher resolution print data and lower resolution print data from a host processor graphic data source.

Claims: A method of converting original serial graphics data of a lower resolution N to data of a higher resolution M, said original data comprising a plurality of binary data digits where a "1" indicates a print or display command, and a "0" indicates a blank command, comprising: determining the smallest segment N1 of original data to be converted to the smallest segment M1 of data of said higher resolution by forming a ratio of the lower and higher resolutions (N/M), wherein N1 is the least common denomination of N in said ratio and M1 is the least common denomination of M in said ratio; adding additional data to said original data by inserting B blank data commands evenly between said original data in said smallest segment N1, where B=M1-N1 ; and converting each of said inserted blank data commands which lie between two consecutive print or display commands to a print or display command, whereby a segment M1 of data is produced for printing at said higher resolution. The method of claim 1 wherein said additional data is inserted by inserting the same number of blank commands between original data until all of said additional data is inserted to generate a plurality of data partitions, each data partition comprising original data followed by additional data, and a number SNAF of remaining original data items if any, which are not followed by said additional data. The method of claim 2 comprising the steps of: determining the integer of rearranging the original data by grouping original data in adjacent partitions at intervals denoted by multiples of said integer of A method of converting original serial graphics data comprising data of a higher resolution N to data of a lower resolution S, comprising the steps of: forming an even higher intermediate resolution data from said data of resolution N using the method of any one of the claims 1 to 3 to yield an intermediate data resolution of X*S, where X is selected as (integer ((N-1)/S))+1, and combining in a logical OR function groups of said data of resolution X*S, each of said groups containing X consecutive data. Apparatus for converting original serial graphics data consisting of a plurality of binary data slices with blank commands and a dot print or display command of a lower resolution N to data of a higher resolution M, said apparatus comprising; a serial data input port (14) connected to receive graphic data slices of a lower resolution N along with a data header transmitted from a host processor (11); a microprocessor (15) connected to receive said graphic data from said port (14) and to deliver an output data stream of a higher resolution M, said microprocessor being programmed to decode each received header to determine the resolution N of the data from said host device; and to carry out the method steps according to any one of the claims 1, 2 and 3.

Inventors: KELLAM, KAREN KAYE, ON TONG, RONNIE CHI
Applicants: INTERNATIONAL BUSINESS MACHINES CORPORATION
Application year: 1986
Main classification: G06K15
IPC codes: G06K15, G06T3, G06F3, B41J2, G09G5