周永强

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
/* example1.c                                                      */
/*                                                                 */
/* This small program shows how to print a rotated string with the */
/* FreeType 2 library.                                             */


#include <stdio.h>
#include <string.h>
#include <math.h>

#include <ft2build.h>
#include FT_FREETYPE_H

#pragma comment(lib, "freetype.lib")


#define WIDTH   640
#define HEIGHT  480


/* origin is the upper left corner */
unsigned char image[HEIGHT][WIDTH];


/* Replace this function with something useful. */

void
draw_bitmap(FT_Bitmap*  bitmap,
FT_Int      x,
FT_Int      y)
{
    FT_Int  i, j, p, q;
    FT_Int  x_max = x + bitmap->width;
    FT_Int  y_max = y + bitmap->rows;


    for (i = x, p = 0; i < x_max; i++, p++)
    {
        for (j = y, q = 0; j < y_max; j++, q++)
        {
            if (i < 0 || j < 0 ||
                i >= WIDTH || j >= HEIGHT)
                continue;

            image[j][i] |= bitmap->buffer[q * bitmap->width + p];
        }
    }
}


void
show_image(void)
{
    int  i, j;
    FILE *fp;
    fopen_s(&fp, "tmp.txt", "w");

    for (i = 0; i < HEIGHT; i++)
    {
        for (j = 0; j < WIDTH; j++)
            fputc(image[i][j] == 0 ? ' '
            : image[i][j] < 128 ? '+'
            : '*', fp);
        putchar('\n');
    }
    fclose(fp);
}


int
main(int     argc,
char**  argv)
{
    FT_Library    library;
    FT_Face       face;

    FT_GlyphSlot  slot;
    FT_Matrix     matrix;                 /* transformation matrix */
    FT_Vector     pen;                    /* untransformed origin  */
    FT_Error      error;

    char*         filename;
    char*         text;

    double        angle;
    int           target_height;
    int           n, num_chars;


/*    if (argc != 3)
    {
        fprintf(stderr, "usage: %s font sample-text\n", argv[0]);
        exit(1);
    }*/

    filename = "a";// argv[1];                           /* first argument     */
    text = "1";                           /* second argument    */
    num_chars = strlen(text);
    angle = (25.0 / 360) * 3.14159 * 2;      /* use 25 degrees     */
    target_height = HEIGHT;

    error = FT_Init_FreeType(&library);              /* initialize library */
    /* error handling omitted */
    if (error)
    {
        printf("is error1!");
    }

    error = FT_New_Face(library, "C:/airstrip.ttf", 0, &face); /* create face object */
    /* error handling omitted */
    if (error)
    {
        printf("is error2!");
    }


    /* use 50pt at 100dpi */
    error = FT_Set_Char_Size(face, 50 * 64, 0,
        100, 0);                /* set character size */
    /* error handling omitted */

    slot = face->glyph;

    /* set up matrix */
    matrix.xx = (FT_Fixed)(cos(angle) * 0x10000L);
    matrix.xy = (FT_Fixed)(-sin(angle) * 0x10000L);
    matrix.yx = (FT_Fixed)(sin(angle) * 0x10000L);
    matrix.yy = (FT_Fixed)(cos(angle) * 0x10000L);

    /* the pen position in 26.6 cartesian space coordinates; */
    /* start at (300,200) relative to the upper left corner  */
    pen.x = 300 * 64;
    pen.y = (target_height - 200) * 64;

    for (n = 0; n < num_chars; n++)
    {
        /* set transformation */
        FT_Set_Transform(face, &matrix, &pen);

        /* load glyph image into the slot (erase previous one) */
        error = FT_Load_Char(face, text[n], FT_LOAD_RENDER);
        if (error)
            continue;                 /* ignore errors */

        /* now, draw to our target surface (convert position) */
        draw_bitmap(&slot->bitmap,
            slot->bitmap_left,
            target_height - slot->bitmap_top);

        /* increment pen position */
        pen.x += slot->advance.x;
        pen.y += slot->advance.y;
    }

    show_image();

    FT_Done_Face(face);
    FT_Done_FreeType(library);

    return 0;
}

/* EOF */

 

posted on 2014-01-18 23:51  周永强  阅读(356)  评论(0编辑  收藏  举报