Abstract:
A system includes a controller operable to receive a first data set comprising data in a first format type, the first-format-type data representing an image. The system further includes a circuit coupled to the controller, the circuit operable to produce a second data set in a second format type, the second data set based on the first-format-type data, the second data set representing the image.

Description:
BACKGROUND  
       [0001]     Host-based printer drivers are software applications that process print data (i.e., data to be sent to a printer) on a host device, such as a personal computer. By processing the print data on the host device, the printer driver allows the host device to cooperate with printers having minimal processing capability (and, thus, a lower cost) while yielding superior print quality.  
         [0002]     However, because such low-capability printers cannot process object-oriented graphics (e.g., vector graphics and associated text fonts), the printer driver typically converts object-oriented images into raster (bitmap) data before the printer can print the images. Unfortunately, such data conversion often places high demands on the processing resources of the host device, and thus can detract from the performance of applications simultaneously running on the host device.  
       SUMMARY  
       [0003]     According to an embodiment of the invention, a system includes a controller operable to receive a first data set comprising data in a first format type, the first-format-type data representing an image. The system further includes a circuit coupled to the controller, the circuit operable to produce a second data set in a second format type, the second data set based on the first-format-type data, the second data set representing the image. 
     
    
     BRIEF DESCRIPTION OF THE DRAWINGS  
       [0004]      FIG. 1  is a logical block diagram of a system, according to an embodiment of the invention, for printing an image; and  
         [0005]      FIG. 2  is a logical block diagram illustrating interaction among components of the system of  FIG. 1  according to an embodiment of the invention. 
     
    
     DETAILED DESCRIPTION  
       [0006]     Most modern personal computers (PCs) are equipped with video cards (aka video adapters) that have high-level  2 D and  3 D graphics processing capabilities. Conventionally, PCs employ such video card processing capability solely to process data to be rendered by a video display. According to an embodiment of the invention, a host-based printer driver leverages this video card capability to process print data.  
         [0007]      FIG. 1  illustrates a system  10 , according to an embodiment of the invention, for printing an image. The system  10  includes a computer  20 , such as a PC or workstation, coupled to a printer  30  through a printer interface  31 . The computer  20  includes a memory  40  which is coupled to a computer processing unit (CPU)  50 , a video card  60 , and the interface  31  over a data bus  70 . The memory  40  also stores an operating system (OS)  80 , an application  90 , a printer driver  100 , and an application programming interface (API)  110 . It is understood that the CPU  50  executes the OS  80 , application  90 , printer driver  100 , and API  110  in a conventional manner.  
         [0008]     In operation, the application  90  issues a print request, with associated print data representing an image (e.g., graphics or text), to the driver  100  through defined interfaces associated with the OS  80 . The print data received by the driver  100  can be in a variety of known application-specific formats, such as, for example, bitmapped graphics, bitmapped text fonts, vector-graphics text fonts and/or vector graphics. The driver  100  converts any non-raster print data to raster data so that the printer  30  can print the associated image.  
         [0009]     The driver  100  translates the vector-graphics-based print data into a set of executable commands. The driver  100  communicates these commands to the video card  60  for execution. In one embodiment, the driver  100  is configured to employ a high-level cross platform API  110 , such as OpenGL® or DirectX, in order to communicate with the video card  60 . Of course, the driver  100  can be configured to utilize other custom APIs as well.  
         [0010]     In executing the commands received from the driver  100 , the video card  60  produces bitmapped images of points, arcs, lines, text and other shapes corresponding to the vector graphics, and thus to the associated image. The commands may further instruct the video card  60  to fill, as appropriate, the rendered bitmapped shapes in a manner and with colors specified by the commands. For example, at the direction of the driver  100 , the video card  60  may render overlapping objects, only a topmost object, or blended objects in the case of semi-transparent objects.  
         [0011]     In a case where the print data includes both vector graphics and bitmap data, the driver  100  may pass the bitmap data, along-with the commands, to the video card  60 . The video card  60  may cache this bitmap data in a memory (not shown) of the video card  60 , and later place the bitmap data in an appropriate location of the image rendered by the video card  60 .  
         [0012]     Once the video card  60  has rendered into bitmap format the image (or portion thereof) associated with the print data, the video card  60  communicates the bitmapped image to the memory  40 . The driver  100  may then employ the CPU  50  to perform any necessary post processing of the rendered image before providing the image to the printer  30 , via the interface  31 , for printing.  
         [0013]     As discussed above, video cards are conventionally used to process data for display on video monitors. Standard video monitors are capable of displaying far fewer pixels than can be displayed on a printed page. If a particular print-data set represents an image that, when in bitmap format, requires a large number of pixels, the video card  60  may not be able to render the entire image.  
         [0014]     As illustrated in  FIG. 2 , an embodiment of the driver  100  includes a divider  120  and an assembler  130 . The assembler  120  is operable to divide into portions  200  (only portions  200   a - 200   d  shown) a print-data set received from the application  90 . The driver  100  translates each vector-graphic portion  200  into a corresponding instruction set and serially issues each instruction set to the video card  60  for execution. Each instruction set, once executed by the video card  60 , produces a corresponding bitmap portion  210  that the video card  60  subsequently provides to the assembler  130 . The assembler  130  is operable to assemble the bitmap portions  210  into the complete bitmapped version of the image. The driver  100  then provides the assembled bitmapped image to the printer  30 .  
         [0015]     In an alternative embodiment, the driver  100  may allocate a subset of the data portions  200  to the video card  60  for processing. The driver  100  itself may then process the data portions  200  not allocated to the video card  60  to produce corresponding bitmap portions  210 . The processing by the driver  100  of data portions  200  may or may not be simultaneous with processing by the video card  60  of data portions  200 .  
         [0016]     The preceding discussion is presented to enable a person skilled in the art to make and use the invention. Various modifications to the disclosed embodiments will be readily apparent to those skilled in the art, and the generic principles herein may be applied to other embodiments and applications without departing from the spirit and scope of the present invention. Thus, the present invention is not intended to be limited to the embodiments shown, but is to be accorded the widest scope consistent with the principles and features disclosed herein.