WO2001031909A1 - Preparing a header for facsimile transmission in a handheld computer - Google Patents

Preparing a header for facsimile transmission in a handheld computer Download PDF

Info

Publication number
WO2001031909A1
WO2001031909A1 PCT/GB2000/004147 GB0004147W WO0131909A1 WO 2001031909 A1 WO2001031909 A1 WO 2001031909A1 GB 0004147 W GB0004147 W GB 0004147W WO 0131909 A1 WO0131909 A1 WO 0131909A1
Authority
WO
WIPO (PCT)
Prior art keywords
information
header
bit
fax
line
Prior art date
Application number
PCT/GB2000/004147
Other languages
French (fr)
Inventor
Andrew Margolis
Original Assignee
Symbian Limited
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Symbian Limited filed Critical Symbian Limited
Publication of WO2001031909A1 publication Critical patent/WO2001031909A1/en

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/32Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device
    • H04N1/32101Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title
    • H04N1/32144Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title embedded in the image data, i.e. enclosed or integrated in the image, e.g. watermark, super-imposed logo or stamp

Definitions

  • This invention relates to the addition or insertion of information which is initially described in terms of a mathematical model and is then converted to a bit-map for addition or insertion into a bit-mapped image. Hence, it includes, for example, the real-time insertion of Unicode text into bit-mapped images.
  • Applications of this invention include the insertion of text headers into faxes; the insertion of date/time information into pictures taken by digital cameras; digital watermarking and video subtitling as for example used in set top boxes and video text systems.
  • bitmapped header Since the time and date of transmission are not known until the receiving fax machine has actually answered the sending fax machine, the bitmapped header has to be generated by the fax engine in the sending fax machine in real time. That bit-mapped header is generated from information relating to the text string to be displayed, the character encoding scheme, the typeface, font size, attributes (underline, bold etc.) and locale (e.g. layout). The header cannot be fully encoded prior to sending in the same way as the rest of the image.
  • header text has required several relatively time consuming operations to be performed by the fax engine, including the identification of the font information and its locale (i.e. layout and formatting) and the full rasterisation process.
  • These operations are even lengthier in Unicode systems (as opposed to 7 bit ACII text) because the size of Unicode font tables are far larger than for 7 bit ASCII and on occasions because some of the characters represented in the Unicode character set are more complex than those of 7 bit ASCII.
  • the term "mathematical model” shall mean any of the following: a mathematical model (such as in a vector graphic); an index into a collection of mathematical models; an index into a collection of sets of parameters of a mathematical models (such as in a stroked font for Unicode); a dataset; an index into a collection of datasets; rules used in an expert system; fonts and character sets such as ASCII and Unicode; a "function” in the mathematical sense; a "function” in the computer programming sense; a computable algorithm which, given a collection of parameters, rules, or datasets, yields a simple or compound result; any combination of the above.
  • a bitmap may itself be regarded as a mathematical model, in so far as it may be added to another bitmap image only after substantial manipulation, such as decompression, clipping, rotation, colour mapping, or dithering.
  • a method of adding information, which is initially described in terms of a mathematical model, to a bit-mapped image, the bitmapped image being generated by a device for output from the device comprises the steps of: (a) receiving the information, which is described in terms of a mathematical model, at the device from a remote source;
  • the present invention is predicated on the insight that, where information which is described in terms of a mathematical model has to be added to a bit mapped image during a short time interval (for example, as part of a real-time process), it is advantageous to process pre-defined aspects of the information substantially in advance of an operation to add the information to the bit-mapped image.
  • many or all of the time consuming processes can typically be carried out, allowing the final creation of the bit-mapped version of the information and its addition or insertion into the bit-mapped image to occur rapidly without excessive processor or memory demands.
  • the information may also be made available to the device from a remote source only shortly before it has to be added to the bit-mapped image and an output generated: this would apply for example, to the date and time information to be included into a fax header.
  • certain aspects of that information for example, knowledge that it consists only of numerals
  • Rasterisation of all 0 to 9 numerals can therefore take place well before a real-time inclusion of date and time information has to occur.
  • the information once the information is received, it can be added to the bit-mapped image without the necessity of various time consuming steps being performed at a time when performance is critical: these steps have been completed earlier.
  • This approach can significantly improve performance, especially in contexts where there are memory and processor cycle limitations which constrain in particular the real time processes. It opens up, for example, the possibility of converting complex vector based information into bit-maps and incorporating those complex bit maps into larger bit mapped images using real time, memory and CPU efficient software processes.
  • the present invention also enables, for example, the fast and efficient construction of fax headers, including even Unicode fax headers, even in devices such as handheld computers and smart phones where there are stringent memory and CPU constraints.
  • One implementation of the method provides for there to be a low-level software component, which has to operate in real time, and a separate, higher level software component, which does not have to operate in real time.
  • the second, higher level component handles the processing of the received mathematical model based information using processes that are not time critical.
  • the first, lower level component then adds the processed, received information to the bit mapped image during the short time interval available to it before output has to occur; typically, this interval will be short enough such that the addition process has in effect to occur in real time.
  • the low level software module (Ml)
  • Ml the low level software module
  • Ml will typically have few dependencies but will have real time constraints, and is responsible for handling bitmapped image imaging functions such as image rendering, filing, encoding, decoding, transmission and reception.
  • Ml is independent of the higher level user interface components of the operating system.
  • locale e.g. format or layout
  • font information need to be made by the low level software module Ml .
  • These can be quite lengthy operations: removing the need for them to be performed by Ml greatly decreases the burden placed on Ml, so increasing its performance.
  • no font tables need to be held in memory by module M 1 .
  • These can be very large in Unicode systems; again, removing the need for Ml to access large Unicode tables greatly increases its performance.
  • the low level software module Ml knows everything about the bit-mapped image to be output, but hardly anything about the information (typically text) to be inserted within it, beyond the fact that it may contain temporal and/or sequential information which cannot be known in advance. It knows nothing else about either the content of the text and in particular, it knows nothing about the font or character set which is to be used.
  • the higher level module (“M2”), with many dependencies but no real-time constraints, makes calls to low level module Ml for Ml to perform all tasks connected with the picture.
  • the higher level module M2 knows hardly anything about the bit-mapped image except its dimensions, but knows almost everything about the information (typically, the text to be inserted within a picture), with the exception of the values for the time, date and sequencing details.
  • the low level component Ml may know nothing about installable fonts at all, yet, in conjunction with the pre- processed information from higher level component M2, be able to embed Unicode time and date related textual information as a caption to a picture in real time and in a memory and CPU efficient manner.
  • a fax header line template is partially prepared in advance by M2, with empty spaces for the information which must be supplied at send-time. When this information is known, the appropriate characters are selected from a pre- prepared font bitmap, and inserted by Ml into the empty positions.
  • the header line template, font bitmap, and the information needed to create the header line file from them, are stored in a header line data file.
  • An API includes the classes used to create and read the fax header line data file, and the class used to perform scan line encoding and decoding. This process is achieved as follows in one embodiment: the higher level component M2 preferably prepares two bitmaps and one information structure in advance of its call to Ml :
  • the first bitmap contains a digitized raster image of the line of text to be inserted into the picture using a fixed width font.
  • the text can be formatted or split into sections and margins can be used: it forms a template. It is highly recommended that for speed and for simplicity, the font should be an exact number of bytes wide.
  • the width of the bitmap must not be longer than the width of the image into which the text needs to be inserted.
  • the second bitmap contains a digitized raster image of single line of text containing a representation of the 10 digits "0123456789".
  • the same fixed width font must be used, but the characters cannot be split or formatted and no margins can be used.
  • the information structure must contain at a minimum the dimensions of the font used (width and height), and width of the two bitmaps, together with the offsets in the text where the temporal and sequential information needs to be inserted.
  • the exact format of the two bitmaps, the content of the information structure, and the method by which M2 passes these three items to Ml, are part of the contracted API between the two modules.
  • the contracted API may be used to simplify the information structure. For example, were the contract to stipulate that the width of the two bitmaps is the same as the width of the picture, then neither of these widths needs to be passed from M2 to Ml .
  • the non-abstract example described in the Appendix stipulates this (all the fax bitmaps conform to the ITU T.4 standard width). When Ml is called, it completes the line of text once the time, date and sequential information it needs to include is known.
  • Adaptation of the method to handle multiple lines of text is also a straightforward matter of adding the total number of lines of text as one of the items in the information structure.
  • the line into to which each temporal or sequential item of information is to be added could also be specified along with the offset.
  • the present invention can be used in many contexts, including for example operating systems for handheld computers with a fax capability, operating systems incorporating digital camera functionality (either still or moving) and crypto-engines for digital watermarking.
  • an operating system adapted to perform the inventive method described above, an apparatus programmed with such an operating system, and media programmed with such an operating system.
  • a preferred embodiment of this invention is specifically designed for portable electronic devices using modular operating systems with memory and CPU constraints. It enables low-level operating system components to embed textual information into pictures or images using Unicode fonts, in real time, without needing to know what font is in use, and without needing to know what character set is in use, while using minimum memory. It can of course also be used in situations where these constraints do not apply.
  • ETEL Fax software which forms part of the EPOC operating system from Symbian Limited, ER5.
  • all faxes sent by the ETEL fax client have a header line inserted at the top of each page. This line includes the page number, the time and the date of transmission, and the identity and phone number of the sender. Since the time and the date are not known until the receiving fax has actually answered, the header has to be generated by the fax engine in real time. It cannot be fully encoded prior to sending in the same way as the rest of the image.
  • a fax header line template is partially prepared in advance — with empty spaces for the information which must be supplied at send-time.
  • the appropriate characters are selected from a pre-prepared font bitmap, and inserted into the empty positions. This makes generation of a fax header in real-time both reliable and simple.
  • the header line template, font bitmap, and the information needed to create the header line file from them, are stored in a header line data file.
  • the API discussed in this document includes the classes used to create and read the fax header line data file, and the class used to perform scan line encoding and decoding. If the EPOC device has a licence which includes the Email application, the fax MTM is used to generate this header line data file. The fax server then takes the data file, creates the header line, and appends it to each fax page. If Email is not present then this API can be used to localise the header line file, or to generate a header line for EPOC devices that do not include the EPOC Email application.
  • header line template c: ⁇ system ⁇ faxhead.dat.
  • the header line data file defines the layout and formatting of the header line. It must be regenerated each time the user identity or phone number changes.
  • the fax engine needs to have no knowledge of any locale-specific information — all of this detail is handled whatever code produces the header line data file.
  • the only two assumptions made are that the date, time, and page information can be accurately conveyed by inserting decimal characters at the appropriate places, and that the collating sequence for the digits 0123456789 remains constant across all character sets.
  • the information stored in the header line data file is described in detail below.
  • the fax header template contains the header line information known prior to sending the fax.
  • the template must be exactly 1728 pixels wide, including a margin of approximately 74 pixels at the start and end of each line. There is no restriction on the height. Also, the text in the bitmap must be generated using a fixed width font.
  • the font bitmap is a line containing the 10 digits "0123456789".
  • the fax server inserts the appropriate characters from this file into the gaps in the fax header template.
  • the font bitmap must have no margins, and should be in the same fixed width font as was used to create the header line template. Knowledge of the font dimensions — number of bytes wide and height in rows — allows individual characters to be extracted from the font bitmap.
  • the fax header line data file is not read from or written to directly by either the fax engine or the fax MTM.
  • the only access to this file is through the CFaxHeaderLines class, which contains functions to read and write the fax header information and, once that has been done, to read and write raw header lines and font line data.
  • CFaxHeaderLines To use CFaxHeaderLines. first call WriteFaxHeaderInfoL() to create and open the new header line data file. The function also adds the font dimension and send-time field offset information, contained in a TFaxHeaderlnfo object, to the file. WriteRawFontLineL() and WriteRawHeaderLineL() should then be called to add the header line template and the font bitmap.
  • the header line template bitmap and the font line bitmap can be generated by means of a fax print-to-file in the normal way.
  • the width of the non-proportional font used to generate the header must be a multiple of 8 bytes. This means that the task of inserting the correct digits in the header line is made substantially easier and quicker.
  • the fax header data file is read by the fax server, and used to create a new fax header line every time a page is sent.
  • the ReadFaxHeaderInfoL() is invoked first to open the file and read the font dimension and send-time field offset information. ReadRawFontLineL() and ReadRawHeaderLineL() should then be called to get the header line template and the font bitmap. If the fax header file cannot be read, the session terminates prematurely with KErrNotFound.
  • This reference contains the complete public API for creating and reading the header line data file, and for performing scan line encoding and decoding. This information is required by developers wanting to localise the header line sent at the top of each fax page, or to generate a fax header file in an EPOC device which does not include the fax MTM — part of the EPOC Email application.
  • the API is documented for EPOC Release 5.0.
  • Read/write fax header line data — CFaxHeaderLines class
  • This class allows applications to read and write information from the fax data file; including the header line template, a font bitmap, and character offset information.
  • This class contains the information needed to generate a fax header line from a font bitmap line and a header line template.
  • Fax header information package TFaxHeaderlnfoPckg typedef This typedef is used to package header information for transferring across the client- server boundary.
  • This class provides utility function for encoding and decoding fax scan lines.
  • the lines can be encoded decoded as 1 dimensional modified Huffman or 2 dimensional modified Read.
  • CFaxHeaderLines class — Read/write fax header line data
  • This class allows applications to read and write information from the fax header line data file: including the header line template, a font bitmap, and character offset information.
  • This data can be used to generate a fax header line — which contains send-time information — in real time.
  • This class is not intended for user derivation.
  • NewL() Create new CFaxHeaderLines object
  • This function constructs a CFaxHeaderLines object, which is used to read and write the fax header line data file. Return value
  • the function may leave with KErrNoMemory if there is insufficient memory to perform the operation: the system returns an error code.
  • the object opens a session with the file server.
  • NewLC() Create new header line object static CFaxHeaderLines* NewLC();
  • This function constructs a CFaxHeaderLines object, which is used to read and write the fax header line data file.
  • the function may leave with KErrNoMemory if there is insufficient memory to perform the operation: the system returns an error code. .
  • the object opens a session with the file server.
  • This function closes the open header line data file and shuts down the file server session.
  • a new fax header data file — C: ⁇ System ⁇ faxhead.dat — should be created every time the user identity or phone number changes.
  • the WriteFaxHeaderlnfoL ⁇ must be invoked first, as it creates/opens the file and adds the font and character offset information to it.
  • WriteRawFontLineL() should then be invoked to add the header line template scan lines, and WriteRawHeaderLineL() should be called to add the font bitmap scan lines.
  • WriteFaxHeaderInfoL Write font and offset information to data file void WriteFaxHeaderInfoL(TFaxHeaderInfo &aFaxHeaderInfo); Description
  • This function creates and opens the fax header data file, and then writes font and character offset information to it.
  • the font and character offset information is used by the fax server to determine at which position the font bitmap characters should be inserted in the header line template — to create the send-time header line for a page.
  • TFaxHeaderlnfo &aFaxHeaderInfo The fax header line information to be written to the file.
  • This function is used to write header line font bitmap scan lines to the header line data file. It should be called to add every scan line in the font bitmap.
  • WriteRawHeaderLineL Write raw header line void WriteRawHeaderLineL(const Tint alineNumber,TRawScanLine& aUncompressedDataLine);
  • This function is used to write the header line template's scan lines to the header line data file. It should be called to add every scan line in the template. Arguments const Tint alineNumber The line number of the current scan line.
  • the fax header data file — C: ⁇ System ⁇ faxhead.dat — is read by the fax server, and used to create a new fax header line every time a page is sent.
  • the ReadFaxHeaderlnfoLO is invoked first, as it opens the file and reads the font and character offset information. ReadRawFontLineL() and ReadRawHeaderLineL() are then be called to get the header line template and the font bitmap.
  • ReadFaxHeaderlnfoLO Read font and offset information from data file void ReadFaxHeaderInfoL(TFaxHeaderInfo &aFaxHeaderInfo);
  • This function opens the fax header data file, and then reads font and character offset information from it.
  • the font and character offset information is used by the fax server to determine at which position the font bitmap characters should be inserted in the header line template — to create the send time header line for a page.
  • ReadRawFontLineL Read raw font line void ReadRawFontLineL(const Tint alineNumber,TRawScanLine &aUncompressedDataLine);
  • This function is used to read the font bitmap's scan lines from the header line data file. It should be called to read every scan line in the bitmap. In normal operation the function is called by the fax server prior to sending a page.
  • Arguments const Tint alineNumber The line number to be read.
  • TRawScanLine On return contains a reference to the raw scan line.
  • ReadRawHeaderLineL Read raw header line
  • ReadRawHeaderLineL (const Tint alineNumber,TRawScanLine &aUncompressedDataLine);
  • This function is used to read the header line template's scan lines from the header line data file. It should be called to read every scan line in the template. In normal operation the function is called by the fax server prior to sending a page.
  • This class contains the information needed to generate a fax header line from a font bitmap line and a header line template.
  • the iOffset members specify an offset in a TRawScanLine.
  • the offsets are specified in bytes — rather than in characters or bits.
  • TFaxHeaderlnfoPckg typedef
  • TFaxHeaderlnfoPckg typedef Fax header information package typedef TPckgBuf ⁇ TFaxHeaderlnfo > TFaxHeaderlnfoPckg;
  • This typedef is used to package header information for transferring across the client- server boundary.
  • This typedef is used to package header information for transferring across the client- server boundary.
  • This class provides utility functions for encoding and decoding fax scan lines.
  • the lines can be encoded/decoded as 1 dimensional modified Huffman or 2 dimensional modified Read.
  • NewL() Construct new CFaxT4 object static CFaxT4* NewL(); Description
  • This function is used to construct a CFaxT4 object, which provides utility functions to encode and decode fax scan lines.
  • the function is exactly the same as NewLC() except that the new object is popped from the cleanup stack.
  • the new object is constructed with the default compression and resolution: EModifiedHuffman and EFaxNormal respectively.
  • the function may leave with KErrNoMemory if there is insufficient memory to perform the operation: the system returns an error code.
  • NewLC() Construct new CFaxT4 object static CFaxT4* NewLC()
  • This function is used to construct a CFaxT4 object, which provides utility functions to encode and decode fax scan lines. As is usual in EPOC, the only difference between this function and NewL() is that this variant pushes the object to the cleanup stack.
  • the new object is constructed with the default compression and resolution: EModifiedHuffman and EFaxNormal respectively.
  • This function initialises the CFaxT4 object with a specific resolution and compression.
  • Tint aFlag2 0 Reserved for future use.
  • EncodeScanLine Encode scan line void EncodeScanLine(const TDesC8& aScanLine,TDes8& anEncodedScanLine);
  • This function encodes a scan line using either one dimensional Modified Huffman (MH) or two dimensional Modified Read (MR) encoding.
  • MH Modified Huffman
  • MR Modified Read
  • TDes8& anEncodedScanLine On return, contains the encoded scan line.
  • DecodeScanLine() Decode scan line
  • Tint DecodeScanLine (TDes8& aScanLine,const TDesC8& anEncodedScanLine);
  • This function decodes a scan line.
  • the decoding method depends on the compression type specified when the object was initialised — using Pagelnitialize(). If the object was not initialised, then the scan line is decoded as Modified Huffman.
  • TDes8& aScanLine On return, contains the decoded scan line, const TDesC8& anEncodedScanLine The encoded scan line to be decoded.
  • Tint An error code the system returns an error code.
  • the fax client can determine the type of compression used in a fax from its header, and can hence use Pagelnitialize() to set the correct decoding method. KErrUnderflow is returned if the wrong type of compression is specified.
  • EncodeScanLinelD Encode scan line as MH void EncodeScanLine 1 D(const TDesC8& aScanLine,TDes8& anEncodedScanLine);
  • This function encodes a scan line using Modified Huffman compression.
  • TDes8& anEncodedScanLine On return, contains the MH encoded scan line.
  • DecodeScanLinelD() Decode MH encoded scan line
  • Tint DecodeScanLinelD (TDes8& aScanLine,const TDesC8& anEncodedScanLine);
  • This function decodes a Modified Huffman encoded scan line.
  • TDes8& aScanLine On return, contains the decoded scan line, const TDesC8& anEncodedScanLine The MH encoded scan line to be decoded.
  • EncodeScanLine2D Encode scan line as MR void EncodeScanLine2D(const TDesC8& aScanLine,TDes8& anEncodedScanLine);
  • This function encodes a scan line using Modified Read compression.
  • TDes8& anEncodedScanLine On return, contains the MR encoded scan line.
  • DecodeScanLine2D() Decode MR encoded scan line
  • Tint DecodeScanLine2D (TDes8& aScanLine,const TDesC8& anEncodedScanLine);
  • TDes8& aScanLine On return, contains the decoded scan line, const TDesC8& anEncodedScanLine The 2D encoded scan line to be decoded.
  • Tint An error code see the system returns an error code.
  • TRawScanLine typedef Raw scan line typedef TBuf ⁇ ⁇ KFaxBytesPerScanLine> TRawScanLine
  • Each scan line is comprised of KFaxBytesPerScanLine — 216 — bytes.

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Facsimiles In General (AREA)
  • Editing Of Facsimile Originals (AREA)

Abstract

A method of and apparatus for the addition or insertion of information to a bit-mapped image where information which is described in terms of a mathematical model has to be added to a bit mapped image during a short time interval (for example, as part of a real-time process), it is advantageous to process pre-defined aspects of the information substantially in advance of an operation to add the information to the bit-mapped image. During this initial stage, many or all of the time consuming processes can typically be carried out, allowing the final creation of the bit-mapped version of the information and its addition or insertion into the bit-mapped image to occur rapidly without excessive processor or memory demands.

Description

PREPARING A HEADER FOR FACSIMILE TRANSMISSION IN A HANDHELD
COMPUTER
Field of the invention
This invention relates to the addition or insertion of information which is initially described in terms of a mathematical model and is then converted to a bit-map for addition or insertion into a bit-mapped image. Hence, it includes, for example, the real-time insertion of Unicode text into bit-mapped images. Applications of this invention include the insertion of text headers into faxes; the insertion of date/time information into pictures taken by digital cameras; digital watermarking and video subtitling as for example used in set top boxes and video text systems.
Description of the Prior Art
There are many such situations where information which is described in terms of a mathematical model (as in a vector graphic), or in terms of an index to a mathematical model (as in Unicode) has to be added to a bit-mapped image by a device. Doing so conventionally requires one or more time consuming activities, such as rasterising, to take place only after the information has been made available to the device. For example, conventional stand-alone fax machines and PC fax software insert a bitmapped header line at the top of each fax page to be transmitted. This header line includes the page number total, the time and date of transmission, and the identity and fax number of the sender; the insertion of a header into transmitted faxes is, in many countries, a legal requirement. Since the time and date of transmission are not known until the receiving fax machine has actually answered the sending fax machine, the bitmapped header has to be generated by the fax engine in the sending fax machine in real time. That bit-mapped header is generated from information relating to the text string to be displayed, the character encoding scheme, the typeface, font size, attributes (underline, bold etc.) and locale (e.g. layout). The header cannot be fully encoded prior to sending in the same way as the rest of the image.
Conventionally, the generation of header text has required several relatively time consuming operations to be performed by the fax engine, including the identification of the font information and its locale (i.e. layout and formatting) and the full rasterisation process. These operations are even lengthier in Unicode systems (as opposed to 7 bit ACII text) because the size of Unicode font tables are far larger than for 7 bit ASCII and on occasions because some of the characters represented in the Unicode character set are more complex than those of 7 bit ASCII.
Consequently, designing a system that can perform these operations in real time is difficult, particularly if Unicode is adopted. Designing a system that can perform these operations in real time is also particularly challenging for handheld computers and wireless information devices, because of the memory limitations and processor cycle restraints imposed on software in these environments. The combined problem of generating real-time Unicode fax headers for a wireless information device is therefore particularly acute.
The technical problem of rapidly, reliably and efficiently adding information which is described generally in mathematical terms, rather than as a bit-map to a bit-mapped image (such as, for example, adding header text to the main part of a fax ) is not restricted to fax transmission, but occurs in several other contexts as well. These include that inclusion of time and date information into digital images taken by digital cameras, the inclusion of digital watermarks and video sub-titling. For the purposes of this patent, the term "mathematical model" shall mean any of the following: a mathematical model (such as in a vector graphic); an index into a collection of mathematical models; an index into a collection of sets of parameters of a mathematical models (such as in a stroked font for Unicode); a dataset; an index into a collection of datasets; rules used in an expert system; fonts and character sets such as ASCII and Unicode; a "function" in the mathematical sense; a "function" in the computer programming sense; a computable algorithm which, given a collection of parameters, rules, or datasets, yields a simple or compound result; any combination of the above. It is specifically noted that a bitmap may itself be regarded as a mathematical model, in so far as it may be added to another bitmap image only after substantial manipulation, such as decompression, clipping, rotation, colour mapping, or dithering.
Statement of the Present Invention
In one aspect of the present invention, a method of adding information, which is initially described in terms of a mathematical model, to a bit-mapped image, the bitmapped image being generated by a device for output from the device, comprises the steps of: (a) receiving the information, which is described in terms of a mathematical model, at the device from a remote source;
(b) initially processing aspects of the information substantially before the output from the device has to occur, the processing involving one or more activities which place a given demand on processor and/or memory resources; (c) subsequently processing other aspects of the information to generate a bit mapped version of the information, this subsequent processing (i) involving one or more activities which place a significantly lower demand on processor and/or memory resources and (ii) occurring shortly before the output from the device has to occur; and (d) adding or inserting the bit-mapped version of the information to the bitmapped image.
Hence, the present invention is predicated on the insight that, where information which is described in terms of a mathematical model has to be added to a bit mapped image during a short time interval (for example, as part of a real-time process), it is advantageous to process pre-defined aspects of the information substantially in advance of an operation to add the information to the bit-mapped image. During this initial stage, many or all of the time consuming processes can typically be carried out, allowing the final creation of the bit-mapped version of the information and its addition or insertion into the bit-mapped image to occur rapidly without excessive processor or memory demands.
The information may also be made available to the device from a remote source only shortly before it has to be added to the bit-mapped image and an output generated: this would apply for example, to the date and time information to be included into a fax header. However, certain aspects of that information (for example, knowledge that it consists only of numerals) are known to the device substantially before then. Rasterisation of all 0 to 9 numerals can therefore take place well before a real-time inclusion of date and time information has to occur. In the present invention, once the information is received, it can be added to the bit-mapped image without the necessity of various time consuming steps being performed at a time when performance is critical: these steps have been completed earlier. This approach can significantly improve performance, especially in contexts where there are memory and processor cycle limitations which constrain in particular the real time processes. It opens up, for example, the possibility of converting complex vector based information into bit-maps and incorporating those complex bit maps into larger bit mapped images using real time, memory and CPU efficient software processes. The present invention also enables, for example, the fast and efficient construction of fax headers, including even Unicode fax headers, even in devices such as handheld computers and smart phones where there are stringent memory and CPU constraints.
One implementation of the method provides for there to be a low-level software component, which has to operate in real time, and a separate, higher level software component, which does not have to operate in real time. The second, higher level component handles the processing of the received mathematical model based information using processes that are not time critical. The first, lower level component, then adds the processed, received information to the bit mapped image during the short time interval available to it before output has to occur; typically, this interval will be short enough such that the addition process has in effect to occur in real time.
More specifically, the low level software module ("Ml"), will typically have few dependencies but will have real time constraints, and is responsible for handling bitmapped image imaging functions such as image rendering, filing, encoding, decoding, transmission and reception. Ml is independent of the higher level user interface components of the operating system. Hence, no operating system calls to obtain locale (e.g. format or layout) or font information need to be made by the low level software module Ml . These can be quite lengthy operations: removing the need for them to be performed by Ml greatly decreases the burden placed on Ml, so increasing its performance. In addition, no font tables need to be held in memory by module M 1 . These can be very large in Unicode systems; again, removing the need for Ml to access large Unicode tables greatly increases its performance. The low level software module Ml knows everything about the bit-mapped image to be output, but hardly anything about the information (typically text) to be inserted within it, beyond the fact that it may contain temporal and/or sequential information which cannot be known in advance. It knows nothing else about either the content of the text and in particular, it knows nothing about the font or character set which is to be used.
The higher level module ("M2"), with many dependencies but no real-time constraints, makes calls to low level module Ml for Ml to perform all tasks connected with the picture. The higher level module M2 knows hardly anything about the bit-mapped image except its dimensions, but knows almost everything about the information (typically, the text to be inserted within a picture), with the exception of the values for the time, date and sequencing details.
Hence, in the context of adding bit mapped text to pictures, the low level component Ml may know nothing about installable fonts at all, yet, in conjunction with the pre- processed information from higher level component M2, be able to embed Unicode time and date related textual information as a caption to a picture in real time and in a memory and CPU efficient manner.
In a preferred embodiment, a fax header line template is partially prepared in advance by M2, with empty spaces for the information which must be supplied at send-time. When this information is known, the appropriate characters are selected from a pre- prepared font bitmap, and inserted by Ml into the empty positions. This makes generation of a fax header in real-time both reliable and simple. The header line template, font bitmap, and the information needed to create the header line file from them, are stored in a header line data file. An API includes the classes used to create and read the fax header line data file, and the class used to perform scan line encoding and decoding. This process is achieved as follows in one embodiment: the higher level component M2 preferably prepares two bitmaps and one information structure in advance of its call to Ml :
• The first bitmap contains a digitized raster image of the line of text to be inserted into the picture using a fixed width font. The text can be formatted or split into sections and margins can be used: it forms a template. It is highly recommended that for speed and for simplicity, the font should be an exact number of bytes wide. The width of the bitmap must not be longer than the width of the image into which the text needs to be inserted.
• The second bitmap contains a digitized raster image of single line of text containing a representation of the 10 digits "0123456789". The same fixed width font must be used, but the characters cannot be split or formatted and no margins can be used.
• The information structure must contain at a minimum the dimensions of the font used (width and height), and width of the two bitmaps, together with the offsets in the text where the temporal and sequential information needs to be inserted.
The exact format of the two bitmaps, the content of the information structure, and the method by which M2 passes these three items to Ml, are part of the contracted API between the two modules. In some cases the contracted API may be used to simplify the information structure. For example, were the contract to stipulate that the width of the two bitmaps is the same as the width of the picture, then neither of these widths needs to be passed from M2 to Ml . The non-abstract example described in the Appendix stipulates this (all the fax bitmaps conform to the ITU T.4 standard width). When Ml is called, it completes the line of text once the time, date and sequential information it needs to include is known. Since this information is quantitative, it can always be completely represented by inserting the appropriate representations of the digits "0123456789" at the correct offsets in the original text. Since Ml knows the dimensions of the font, where to find the bitmap of the text, and where to find the bitmap of all the digits, the task of completing the text is a simple matter of looping through each raster line in turn, picking up the font data for the appropriate digit for each row from the second bitmap using a combination of the width of the font and the digit itself as an index, and inserting the data in the bitmap of the text, again using the width of the font as part of the index, this time combined with the offset provided as part of the information structure. The process of completing the line of text is therefore fast and suitable for real-time operations. The process of completing the line of text is also as efficient for Unicode text as for 7-bit ASCII text.
Once each row of the bitmapped text line has been completed, it can eitheπ-
(a) be added to the original picture as part of a caption or header, or
(b) be added to the original picture by replacing a portion of the original, or
(c) be combined with the original picture using Boolean logic.
The process continues for each raster line in each bitmap until the entire line of text has been processed; the height of the font is the control for this particular loop.
The only two assumptions made by this method are that the date, time, and sequence information can be accurately conveyed by inserting digits at the appropriate places, and that the collating sequence for the digits 0123456789 remains constant across all character sets. The bitmaps generated by this method are bilevel (monochrome) images. Insertion of such images into coloured pictures does not cause a problem, but the text will not of course be multicoloured. A trivial modification to this innovation as described would allowing the colour of inserted digits to be specified along with their offsets.
Adaptation of the method to handle multiple lines of text is also a straightforward matter of adding the total number of lines of text as one of the items in the information structure. The line into to which each temporal or sequential item of information is to be added could also be specified along with the offset.
Although it is convenient to use a fixed width font, in practice all that is required is for the gap for the information to be inserted to be wide enough and for Ml to know the actual width. Likewise, although the discussion above has focussed on inserting quantitative information using "0123456789", any bitmap symbols can be used so long as Ml knows their width.
The present invention can be used in many contexts, including for example operating systems for handheld computers with a fax capability, operating systems incorporating digital camera functionality (either still or moving) and crypto-engines for digital watermarking.
In several other aspects of the present invention, there is provided an operating system adapted to perform the inventive method described above, an apparatus programmed with such an operating system, and media programmed with such an operating system. Detailed Description
A preferred embodiment of this invention is specifically designed for portable electronic devices using modular operating systems with memory and CPU constraints. It enables low-level operating system components to embed textual information into pictures or images using Unicode fonts, in real time, without needing to know what font is in use, and without needing to know what character set is in use, while using minimum memory. It can of course also be used in situations where these constraints do not apply.
Two examples of specific situations where all the constraints mentioned above apply, and where this innovation can be put to use, are
• wireless information devices needing to send faxes. These require include header lines with time and date of transmission to be added, in real time, as the fax is being transmitted.
1. devices capable of fast digital photography. These optionally require the ability to add captions including time, date and sequencing information.
A fully documented API for the first of these example cases can be found in the Appendix. The remained of the Detailed Description will consist of a guide to the fax header line API at Appendix 1.
Fax header line API Guide
The following detailed description relates to the ETEL Fax software which forms part of the EPOC operating system from Symbian Limited, ER5. In common with all fixed stand-alone fax machines, and because it is a legal requirement in many countries, all faxes sent by the ETEL fax client have a header line inserted at the top of each page. This line includes the page number, the time and the date of transmission, and the identity and phone number of the sender. Since the time and the date are not known until the receiving fax has actually answered, the header has to be generated by the fax engine in real time. It cannot be fully encoded prior to sending in the same way as the rest of the image. To overcome this problem, a fax header line template is partially prepared in advance — with empty spaces for the information which must be supplied at send-time. When this information is known, the appropriate characters are selected from a pre-prepared font bitmap, and inserted into the empty positions. This makes generation of a fax header in real-time both reliable and simple.
The header line template, font bitmap, and the information needed to create the header line file from them, are stored in a header line data file. The API discussed in this document includes the classes used to create and read the fax header line data file, and the class used to perform scan line encoding and decoding. If the EPOC device has a licence which includes the Email application, the fax MTM is used to generate this header line data file. The fax server then takes the data file, creates the header line, and appends it to each fax page. If Email is not present then this API can be used to localise the header line file, or to generate a header line for EPOC devices that do not include the EPOC Email application.
The fax header data file
The header line template, font bitmap, and the additional information required to generate the header line, are stored in the header line data file — c:\system\faxhead.dat. The header line data file defines the layout and formatting of the header line. It must be regenerated each time the user identity or phone number changes.
Consequently, the fax engine needs to have no knowledge of any locale-specific information — all of this detail is handled whatever code produces the header line data file. The only two assumptions made are that the date, time, and page information can be accurately conveyed by inserting decimal characters at the appropriate places, and that the collating sequence for the digits 0123456789 remains constant across all character sets. The information stored in the header line data file is described in detail below.
The fax header template bitmap
The fax header template contains the header line information known prior to sending the fax. The template must be exactly 1728 pixels wide, including a margin of approximately 74 pixels at the start and end of each line. There is no restriction on the height. Also, the text in the bitmap must be generated using a fixed width font.
The font bitmap
The font bitmap is a line containing the 10 digits "0123456789". When the send-time information is known, the fax server inserts the appropriate characters from this file into the gaps in the fax header template. The font bitmap must have no margins, and should be in the same fixed width font as was used to create the header line template. Knowledge of the font dimensions — number of bytes wide and height in rows — allows individual characters to be extracted from the font bitmap.
The font dimensions and header line offsets
To generate a header line using the above bitmaps requires that the font dimensions, and the offsets to the gaps in the template where send time information is to be inserted, are known. This information is stored in the header line data file along with the header template and font bitmap. Creating/writing the fax header line data file
The fax header line data file is not read from or written to directly by either the fax engine or the fax MTM. The only access to this file is through the CFaxHeaderLines class, which contains functions to read and write the fax header information and, once that has been done, to read and write raw header lines and font line data.
To use CFaxHeaderLines. first call WriteFaxHeaderInfoL() to create and open the new header line data file. The function also adds the font dimension and send-time field offset information, contained in a TFaxHeaderlnfo object, to the file. WriteRawFontLineL() and WriteRawHeaderLineL() should then be called to add the header line template and the font bitmap.
The header line template bitmap and the font line bitmap can be generated by means of a fax print-to-file in the normal way. The width of the non-proportional font used to generate the header must be a multiple of 8 bytes. This means that the task of inserting the correct digits in the header line is made substantially easier and quicker.
Unfortunately, there are limits on the possible width of the font used. Based on the recommended minimum margin specified in T4, and the text which has to be placed on the line, the maximum width font which should be used is 24 bits. Wliile this gives room for just 65 characters on the header line, crowding should not be a problem in practice, since it is unlikely that all the 20 characters permitted in the fax and user ids would be used. Only one header is generated irrespective of resolution — scan lines are sent once in normal resolution and twice in fine resolution. Note that currently the header is inserted at the top of each fax page — making the fax as sent marginally longer than the original image. Reading the fax header line data file
The fax header data file is read by the fax server, and used to create a new fax header line every time a page is sent. The ReadFaxHeaderInfoL() is invoked first to open the file and read the font dimension and send-time field offset information. ReadRawFontLineL() and ReadRawHeaderLineL() should then be called to get the header line template and the font bitmap. If the fax header file cannot be read, the session terminates prematurely with KErrNotFound.
Appendix 1: EPOC ER5 Fax Header Line API Reference
About the fax header line API This reference contains the complete public API for creating and reading the header line data file, and for performing scan line encoding and decoding. This information is required by developers wanting to localise the header line sent at the top of each fax page, or to generate a fax header file in an EPOC device which does not include the fax MTM — part of the EPOC Email application. The API is documented for EPOC Release 5.0.
The fax header line classes
Read/write fax header line data — CFaxHeaderLines class
This class allows applications to read and write information from the fax data file; including the header line template, a font bitmap, and character offset information.
Fax header line information — TFaxHeaderlnfo class
This class contains the information needed to generate a fax header line from a font bitmap line and a header line template.
Fax header information package — TFaxHeaderlnfoPckg typedef This typedef is used to package header information for transferring across the client- server boundary.
Fax line coding/decoding — CFaxT4 class
This class provides utility function for encoding and decoding fax scan lines. The lines can be encoded decoded as 1 dimensional modified Huffman or 2 dimensional modified Read. CFaxHeaderLines class
CFaxHeaderLines class — Read/write fax header line data
Overview
Derivation
CBase Abstract: CBase behaviour.
Defined in faxstore.h
Link against faxst2.1ib
Description This class allows applications to read and write information from the fax header line data file: including the header line template, a font bitmap, and character offset information. This data can be used to generate a fax header line — which contains send-time information — in real time.
Writing derived classes
This class is not intended for user derivation.
Construction and destruction
NewL() — Create new CFaxHeaderLines object
static CFaxHeaderLines* NewL(); Description
This function constructs a CFaxHeaderLines object, which is used to read and write the fax header line data file. Return value
CFaxHeaderLines* A pointer to the newly created object.
Note
• The function may leave with KErrNoMemory if there is insufficient memory to perform the operation: the system returns an error code. • As part of the construction process, the object opens a session with the file server.
NewLC() — Create new header line object static CFaxHeaderLines* NewLC();
Description
This function constructs a CFaxHeaderLines object, which is used to read and write the fax header line data file.
As is usual in EPOC, the only difference between this function and NewL() is that this variant pushes the object to the cleanup stack. Return value
CFaxHeaderLines* Pointer to the newly created object.
Note
• The function may leave with KErrNoMemory if there is insufficient memory to perform the operation: the system returns an error code. .
• As part of the construction process, the object opens a session with the file server.
~CFaxHeaderLines() — Destructor
~CFaxHeaderLines(); Description
This function closes the open header line data file and shuts down the file server session.
Writing fax header data file
A new fax header data file — C:\System\faxhead.dat — should be created every time the user identity or phone number changes. The WriteFaxHeaderlnfoLø must be invoked first, as it creates/opens the file and adds the font and character offset information to it. WriteRawFontLineL() should then be invoked to add the header line template scan lines, and WriteRawHeaderLineL() should be called to add the font bitmap scan lines.
WriteFaxHeaderInfoL() — Write font and offset information to data file void WriteFaxHeaderInfoL(TFaxHeaderInfo &aFaxHeaderInfo); Description
This function creates and opens the fax header data file, and then writes font and character offset information to it. The font and character offset information is used by the fax server to determine at which position the font bitmap characters should be inserted in the header line template — to create the send-time header line for a page. Arguments
TFaxHeaderlnfo &aFaxHeaderInfo The fax header line information to be written to the file.
Note
• Since this function creates and opens the file, it should be called before the other write functions. WriteRawFontLineL() — Write raw font line
void WriteRawFontLineL(const Tint alineNumber,TRawScanLine& aUncompressedDataLine) ;
Description This function is used to write header line font bitmap scan lines to the header line data file. It should be called to add every scan line in the font bitmap.
Arguments const Tint alineN umber The line number of the current scan line.
TRawScanLine& A reference to a raw font bitmap scan line to be added to the aUncompressedDataLine header line data file.
WriteRawHeaderLineL() — Write raw header line void WriteRawHeaderLineL(const Tint alineNumber,TRawScanLine& aUncompressedDataLine);
Description
This function is used to write the header line template's scan lines to the header line data file. It should be called to add every scan line in the template. Arguments const Tint alineNumber The line number of the current scan line.
TRawScanLine& A reference to a raw header line template scan line to be added to aUncompressedDataLine the header line data file.
Reading fax header data file
The fax header data file — C:\System\faxhead.dat — is read by the fax server, and used to create a new fax header line every time a page is sent. The ReadFaxHeaderlnfoLO is invoked first, as it opens the file and reads the font and character offset information. ReadRawFontLineL() and ReadRawHeaderLineL() are then be called to get the header line template and the font bitmap.
ReadFaxHeaderlnfoLO — Read font and offset information from data file void ReadFaxHeaderInfoL(TFaxHeaderInfo &aFaxHeaderInfo);
Description
This function opens the fax header data file, and then reads font and character offset information from it. The font and character offset information is used by the fax server to determine at which position the font bitmap characters should be inserted in the header line template — to create the send time header line for a page.
Arguments
TFaxHeaderlnfo On return, contains header line information from the header data
&aFaxHeaderInfo file.
Note
• Since this function opens the file, it should be called before the other read functions.
ReadRawFontLineL() — Read raw font line void ReadRawFontLineL(const Tint alineNumber,TRawScanLine &aUncompressedDataLine);
Description
This function is used to read the font bitmap's scan lines from the header line data file. It should be called to read every scan line in the bitmap. In normal operation the function is called by the fax server prior to sending a page. Arguments const Tint alineNumber The line number to be read.
TRawScanLine On return, contains a reference to the raw scan line.
&aUncompressedDataLine
ReadRawHeaderLineL() — Read raw header line
void ReadRawHeaderLineL(const Tint alineNumber,TRawScanLine &aUncompressedDataLine);
Description
This function is used to read the header line template's scan lines from the header line data file. It should be called to read every scan line in the template. In normal operation the function is called by the fax server prior to sending a page.
Arguments const Tint alineNumber The line number of the scan line to be read.
TRawScanLine &aUncompressedDataLine On return, contains the scan line.
Data members
TFaxHeaderlnfoPckg iOurFaxHeaderlnfoPckg The fax header information package.
TFaxHeaderlnfo class TFaxHeaderlnfo class — Fax header line information
Overview
Defined in faxstore.h Description
This class contains the information needed to generate a fax header line from a font bitmap line and a header line template.
Data members
Tint iHeaderFontHeightlnLines Height of font in lines. Tint iHeaderFontWidthlnBytes Width of font in bytes. Tint iOffsetToCurrentPage Offset to two digits for current page. Tint iOffsetToDay Offset to two digit day of month. Tint iOffsetToHour Offset to two digits hour (24 hour clock). Tint iOffsetToMinute Offset to two digits minute. Tint iOffsetToMonth Offset to two digits month of year. Tint iOffsetToTotalPages Offset to two digits for total pages. Tint iOffsetToYear Offset to four digits year.
Note
The iOffset members specify an offset in a TRawScanLine. In other words, the offsets are specified in bytes — rather than in characters or bits.
TFaxHeaderlnfoPckg typedef TFaxHeaderlnfoPckg typedef — Fax header information package typedef TPckgBuf < TFaxHeaderlnfo > TFaxHeaderlnfoPckg;
Defined in faxstore.h Description
This typedef is used to package header information for transferring across the client- server boundary.
TFaxHeaderlnfoPckg typedef
TFaxHeaderlnfoPckg typedef — Fax header information package
typedef TPckgBuf < TFaxHeaderlnfo > TFaxHeaderlnfoPckg;
Defined in faxstore.h
Description This typedef is used to package header information for transferring across the client- server boundary.
CFaxT4 class
CFaxT4 class — Fax line coding/decoding
Overview
Derivation
CBase Abstract: CBase behaviour. Defined in faxstore.h
Link against
faxst2.1ib
Description This class provides utility functions for encoding and decoding fax scan lines. The lines can be encoded/decoded as 1 dimensional modified Huffman or 2 dimensional modified Read.
Users must first create a CFaxT4 object using NewL() or NewLC(). Specific functions are provided to encode/decode scan lines using the two coding schemes. In addition, general functions are provided which determine the coding type from the values specified when the object is initialised — using Pagelnitialise().
Construction and destruction
NewL() — Construct new CFaxT4 object static CFaxT4* NewL(); Description
This function is used to construct a CFaxT4 object, which provides utility functions to encode and decode fax scan lines. The function is exactly the same as NewLC() except that the new object is popped from the cleanup stack.
The new object is constructed with the default compression and resolution: EModifiedHuffman and EFaxNormal respectively.
Return value
CFaxT4* A pointer to the newly created object.
Note
• The function may leave with KErrNoMemory if there is insufficient memory to perform the operation: the system returns an error code.
NewLC() — Construct new CFaxT4 object static CFaxT4* NewLC();
Description
This function is used to construct a CFaxT4 object, which provides utility functions to encode and decode fax scan lines. As is usual in EPOC, the only difference between this function and NewL() is that this variant pushes the object to the cleanup stack. The new object is constructed with the default compression and resolution: EModifiedHuffman and EFaxNormal respectively.
Return value
CFaxT4* A pointer to the newly created object.
Note
• The function may leave with KErrNoMemory if there is insufficient memory to perform the operation: the system returns an error code. Object initialisation
Pagelnitialize() — Initialise object void PageInitialize(TFaxResolution aResolution, TFaxCompression aCompression, Tint aFlag2 = 0);
Description
This function initialises the CFaxT4 object with a specific resolution and compression.
Arguments
TFaxResolution aResolution The resolution level.
TFaxCompression aCompression The compression type.
Tint aFlag2 = 0 Reserved for future use.
Encoding and decoding
EncodeScanLine() — Encode scan line void EncodeScanLine(const TDesC8& aScanLine,TDes8& anEncodedScanLine);
Description This function encodes a scan line using either one dimensional Modified Huffman (MH) or two dimensional Modified Read (MR) encoding. The type of encoding used depends on the compression type specified when the object was initialised — using Pagelnitialize(). If the object was not initialised, then the default compression is MH.
Arguments const TDesC8& aScanLine The raw scan line to be encoded.
TDes8& anEncodedScanLine On return, contains the encoded scan line. DecodeScanLine() — Decode scan line
Tint DecodeScanLine(TDes8& aScanLine,const TDesC8& anEncodedScanLine);
Description
This function decodes a scan line. The decoding method depends on the compression type specified when the object was initialised — using Pagelnitialize(). If the object was not initialised, then the scan line is decoded as Modified Huffman.
Arguments
TDes8& aScanLine On return, contains the decoded scan line, const TDesC8& anEncodedScanLine The encoded scan line to be decoded.
Return value
Tint An error code: the system returns an error code.
Note
• The fax client can determine the type of compression used in a fax from its header, and can hence use Pagelnitialize() to set the correct decoding method. KErrUnderflow is returned if the wrong type of compression is specified.
EncodeScanLinelD() — Encode scan line as MH void EncodeScanLine 1 D(const TDesC8& aScanLine,TDes8& anEncodedScanLine);
Description
This function encodes a scan line using Modified Huffman compression.
Arguments const TDesC8& aScanLine The scan line to be encoded.
TDes8& anEncodedScanLine On return, contains the MH encoded scan line. DecodeScanLinelD() — Decode MH encoded scan line
Tint DecodeScanLinelD(TDes8& aScanLine,const TDesC8& anEncodedScanLine);
Description
This function decodes a Modified Huffman encoded scan line.
Arguments
TDes8& aScanLine On return, contains the decoded scan line, const TDesC8& anEncodedScanLine The MH encoded scan line to be decoded.
Return value
Tint An error code: the system returns an error code. Note
• KErrUnderflow is returned if the scan line is encoded as MR.
EncodeScanLine2D() — Encode scan line as MR void EncodeScanLine2D(const TDesC8& aScanLine,TDes8& anEncodedScanLine);
Description
This function encodes a scan line using Modified Read compression.
Arguments const TDesC8& aScanLine The scan line to be encoded.
TDes8& anEncodedScanLine On return, contains the MR encoded scan line.
DecodeScanLine2D() — Decode MR encoded scan line
Tint DecodeScanLine2D(TDes8& aScanLine,const TDesC8& anEncodedScanLine);
Description
This function decodes a Modified Read encoded scan line. Arguments
TDes8& aScanLine On return, contains the decoded scan line, const TDesC8& anEncodedScanLine The 2D encoded scan line to be decoded.
Return value
Tint An error code: see the system returns an error code.
Note
• KErrUnderflow is returned if the scan line is encoded as MR.
(and lastly, taken from the Fax Client API documentation for completeness) TRawScanLine typedef
TRawScanLine typedef — Raw scan line typedef TBufδ <KFaxBytesPerScanLine> TRawScanLine
Defined in faxdefn.h
Description This typedef defines a raw scan line. Each scan line is comprised of KFaxBytesPerScanLine — 216 — bytes.

Claims

Claims
1. A method of adding information, which is initially described in terms of a mathematical model, to a bit-mapped image, the bit-mapped image being generated by a device for output from the device; the method including the steps of:
(a) receiving the information, which is described in terms of a mathematical model, at the device from a remote source;
(b) initially processing aspects of the information substantially before the output from the device has to occur, the processing involving one or more activities which place a given demand on processor and/or memory resources;
(c) subsequently processing other aspects of the information to generate a bit mapped version of the information, this subsequent processing (a) involving one or more activities which place a significantly lower demand on processor and/or memory resources and (b) occurring shortly before the output from the device has to occur; and
(d) adding or inserting the bit-mapped version of the information to the bitmapped image.
2. The method of claim 1 in which there is a low- level software component, which has to operate in real time, and a separate, higher level software component, which does not have to operate in real time, the higher level component handling the initial processing of the received information, and the low level component adding or inserting the bit-mapped version of the information to the bit-mapped image in real time.
3. The method of Claim 2 in which the low level software component is called by the higher level component to perform the addition or insertion of the bit-mapped version of the information to the bit-mapped image in real time.
4. The method of any preceding Claim in which the step of initially processing aspects of the information occurs before the receipt of the information.
5. The method of any preceding Claim in which the information which is described in terms of a mathematical model or an index to a mathematical model is text or graphics.
6. The method of Claim 5 in which the text is Unicode text.
7. The method of Claim 5 in which the graphic is a vector graphic.
8. The method of Claim 3 in which the higher level component partially prepares substantially in advance of transmission a fax header line template, with empty spaces for the information which must be supplied at send-time, whereby when this information is known, the appropriate characters are selected from a pre-prepared font bitmap and inserted into the empty positions by the low level component.
9. The method of Claim 8 in which the header line template, font bitmap, and the information needed to create the header line file from them, are stored in a header line data file and an API includes the classes used to create and read the fax header line data file, and the class used to perform scan line encoding and decoding.
10. The method of Claim 2 and any preceding Claim dependent on Claim 2 in which the higher level component prepares two bitmaps and one information structure in advance of its call to the lower level component, the first bitmap containing a digitized raster image of the line of text to be inserted into the picture using a fixed width font and the second bitmap containing a digitized raster image of single line of text containing a representation of the 10 digits "0123456789".
1 1. The method of Claim 10 whereby, when the low level component is called, it completes the line of text once the time, date and sequential information it needs to include is known.
12. The method of Claim 8 in which each empty space for information is wide enough for the widest possible item for that space and for the low level component knows the actual width.
13. An operating system adapted to perform any of the preceding methods.
14. An apparatus programmed to perform any of the preceding methods.
15. Digital media programmed to perform any of the preceding methods.
PCT/GB2000/004147 1999-10-27 2000-10-27 Preparing a header for facsimile transmission in a handheld computer WO2001031909A1 (en)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GBGB9925282.7A GB9925282D0 (en) 1999-10-27 1999-10-27 A method of and apparatus for the addition or insertion of information to a bit-mapped image
GB9925282.7 1999-10-27

Publications (1)

Publication Number Publication Date
WO2001031909A1 true WO2001031909A1 (en) 2001-05-03

Family

ID=10863378

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/GB2000/004147 WO2001031909A1 (en) 1999-10-27 2000-10-27 Preparing a header for facsimile transmission in a handheld computer

Country Status (2)

Country Link
GB (1) GB9925282D0 (en)
WO (1) WO2001031909A1 (en)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4849816A (en) * 1985-11-29 1989-07-18 Canon Kabushiki Kaisha Data communication apparatus for transmission with variable format
US5602652A (en) * 1989-06-16 1997-02-11 Ishiwatari; Masumi Portable device settable in a host apparatus and combined system therefor

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4849816A (en) * 1985-11-29 1989-07-18 Canon Kabushiki Kaisha Data communication apparatus for transmission with variable format
US5602652A (en) * 1989-06-16 1997-02-11 Ishiwatari; Masumi Portable device settable in a host apparatus and combined system therefor

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
NEWTON TECHNOLOGY JOURNAL, vol. II, no. 2, - April 1996 (1996-04-01), pages 1 - 24, XP002158755, Retrieved from the Internet <URL:ftp://ftp.apple.com/developer/Newton_Development/tech_info/NTJ/NTJ%202.02.pdf> [retrieved on 20010129] *
YACUB, CHAMBERS AND BEY: "The NewtonScript Programming Language (Chapter 2, pages 2-1 to 2-39)", November 1995, APPLE COMPUTER, INC., CUPERTINO, CA, USA, XP002158756 *

Also Published As

Publication number Publication date
GB9925282D0 (en) 1999-12-29

Similar Documents

Publication Publication Date Title
JP4999791B2 (en) Information processing apparatus, control method thereof, and program
US6011905A (en) Using fontless structured document image representations to render displayed and printed documents at preferred resolutions
US20080317348A1 (en) Image processing apparatus, image reproduction apparatus, system, method and storage medium for image processing and image reproduction
US7860892B2 (en) Information processing apparatus, history file generation method and program
EP1727349A2 (en) Recording of history information of input and output jobs of an image processing apparatus
JP2002125090A (en) Communication equipment and communication method and storage medium and its program
US7653254B2 (en) Image coding apparatus and image coding method
US7453594B2 (en) Document filing apparatus for storing information added to a document file
US6492994B2 (en) Image editing method and apparatus and image composing method and apparatus
JP5153277B2 (en) Image processing apparatus, image processing method, and image processing program
JP2013125994A (en) Image compression device, image compression method, and computer program
CN102855602B (en) Picture processing method and picture processing device
JP4089670B2 (en) Document management device
JP5264155B2 (en) Program, file management apparatus and file management method
WO2001031909A1 (en) Preparing a header for facsimile transmission in a handheld computer
JP3865688B2 (en) External character processing system, external character processing program, and external character processing method
JP3865750B2 (en) Electronic form creation system, electronic form creation program, and electronic form creation method
JP3724729B2 (en) Structured document processing apparatus and program thereof
JP3624155B2 (en) Image compression apparatus, image compression method, and information processing system
EP2056582A1 (en) Image processing device, image processing method, image processing program, and recording medium
McIntyre et al. RFC2301: File Format for Internet Fax
JP3880240B2 (en) Image processing apparatus and method
CN111381781A (en) Processing method and device for printed file
CA2077659A1 (en) Segregated format processing of combined text and pictorial image data
JP2016226010A (en) Image processing system, control method of the same, and program

Legal Events

Date Code Title Description
AK Designated states

Kind code of ref document: A1

Designated state(s): CN GB JP US

AL Designated countries for regional patents

Kind code of ref document: A1

Designated state(s): AT BE CH CY DE DK ES FI FR GB GR IE IT LU MC NL PT SE

121 Ep: the epo has been informed by wipo that ep was designated in this application
122 Ep: pct application non-entry in european phase
NENP Non-entry into the national phase

Ref country code: JP