Efficient Software Screening of Color for Graphics
Original Publication Date: 2000-Aug-01
Included in the Prior Art Database: 2003-Jun-19
Described is a software method which will efficiently screen (halftone) a graphical region, producing the effect of grayscale when output is bilevel. Here, graphics means filled regions and images (text, symbols, logos...) which are one color at a time. The color is not continuously changing. Producing screening when filling an area is accomplished by repeatedly writing the screening pattern within the area. The screening pattern is a bilevel image (tile) which is selected to represent the desired percentage of color. It has a given size and shape. If the tiling pattern fits nicely into a 32-bit word, repetition is easy. For instance, a 4x4 tile is easily used to filll an area. However, it is possible that the tile is not 'nice'; a tile which is 1x17 pels is an example. For the 1x17 tile, an initial word which represents the pattern is created. It is the concatenation of the full 17 bits plus the first 15 bits, making 32 bits. When moving across a row, another version of the word is written. This second word is composed of the last 2 bits, the full 17 bits, and the first 13 bits of the original pattern. The third word is a similar permutation. In all, there are 17 different permutations of the original word. (This is because 17 and 32 are relatively prime.) An array of these 17 words is created. The words written into the page are extracted from this array using an index. As words are written across the row, the index is incremented by one modulo 17. As words are written down a column, the index is incremented by 9 modulo 17. This value of 9 is chosen based on how the original, irregularly shaped, pattern is tiled onto the page. Note that the permutations of the words could be created on the fly as the words are written into the page. There are more operations involved in this than in incrementing the index. Creating the array of permutations is done once when a new color is started. Then, as the pattern is written into the page many times, only the index needs to be incremented. Code which uses this array will perform faster than code which shifts on the fly.