>thanks for your valuable tips. I was looking for solution 
>to do it directly on the device without any conversion step 
>done on PC side.  Is it possible to just directly copy font 
>resouces into new resource database, modify density bits and 
>then open and use those fonts?
>
>Frantisek

I don't think so.  We've written some internal tools to build and convert 
dual-density fonts, and I believe hires fonts are always built with an 
equivalent lores font.  The problem is that both fonts share a common 
character-width table (in standard lores coordinates) so that each character in 
the hires font is always an even number of pixels wide, exactly double the 
width of the lores font.  Since the lores standard font has plenty of odd-width 
characters, I don't think you can use its data as is for hires text.

Still, the font format is not all that complex, so you can probably allocate a 
wide 1-bit lores offscreen bitmap and draw all the characters into it, padding 
each one out to an even width.  Then I think you can use the raw data in this 
bitmap as the imagedata part of the font structure.  Here is some old code 
fragments that I don't all remember but might help:

                                                        
// Font format:
// NFNT2_HEADER
//   NFNT2_DENSITY
//   NFNT2_DENSITY
//   ...
//   Image Location Table
//   Width/Offset Table
//   Bitmap Data 1
//   Bitmap Data 2
//   ...
//   Font Name
//   Font Style

typedef struct
{
        short density;       // 0x48 = lores
        ulong bitmap_offset;
} NFNT2_DENSITY;

typedef struct {
        short font_type;     // 0x9200
        short   char_first;
        short   char_last;
        short   max_width;
        short   max_kern;
        short negated_decent;
        short   rect_width;
        short rect_height;

        // actual_offset = 18 + 2 x <width_table_offset>
        short width_table_offset; 
        short   max_ascent;
        short max_decent;
        short leading;
        short row_words;

        // 1 = PalmNewFontVersion
        ushort  version;                        
        ushort  density_count;

        // array of 1 or more records
        NFNT2_DENSITY   densities[0];   
} NFNT2_HEADER;

-Vince




-- 
For information on using the PalmSource Developer Forums, or to unsubscribe, 
please see http://www.palmos.com/dev/support/forums/

Reply via email to