--- Begin Message ---
Subject: |
example Re: [ft] Fw: outline points |
Date: |
Mon, 24 Dec 2012 11:35:26 +0100 |
User-agent: |
Thunderbird 2.0.0.24 (X11/20100623) |
Tell me where i can put callback or what I can read all points on path
outline?
pp: pp.c
gcc `freetype-config --cflags --libs` -o pp -lm pp.c
pp > gg.pgm
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <ft2build.h>
#include FT_FREETYPE_H
void drukuj_grafike(unsigned char *image, int maxx, int maxy )
{
int i, j,k;
k=0;
for ( i = 0; i < maxx; i++ )
{
for ( j = 0; j < maxy; j++ )
{
putchar( (short)(255-image[k]) );
k++;
};
}
};
int main( int argc, char** argv )
{
FT_Error error;
FT_Library library;
FT_UInt ipu;
FT_Int ico;
FT_Outline obwiednia;
error = FT_Init_FreeType( &library );
const int width = 300;
const int rows = 200;
ipu=33;
ico=2;
FT_Outline_New(library,ipu,ico, &obwiednia);
obwiednia.flags=FT_OUTLINE_NONE;
obwiednia.n_contours=ico;
obwiednia.n_points=ipu;
FT_Vector pp[33];
char
tt[33]={0,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,1,0,1,0,0,1,1,0,1,1,1,0,0};
short cc[2]={21,32};
obwiednia.tags=tt;
obwiednia.contours=cc;
pp[0].x=522; pp[0].y=596; pp[1].x=522; pp[1].y=406;
pp[2].x=396; pp[2].y=301; pp[3].x=292; pp[3].y=301;
pp[4].x=214; pp[4].y=301; pp[5].x=214; pp[5].y=168;
pp[6].x=214; pp[6].y=97; pp[7].x=226; pp[7].y=28;
pp[8].x=292; pp[8].y=28; pp[9].x=292; pp[9].y=0;
pp[10].x=26; pp[10].y=0; pp[11].x=26; pp[11].y=28;
pp[12].x=92; pp[12].y=28; pp[13].x=104; pp[13].y=97;
pp[14].x=104; pp[14].y=168; pp[15].x=104; pp[15].y=532;
pp[16].x=104; pp[16].y=603; pp[17].x=92; pp[17].y=672;
pp[18].x=26; pp[18].y=672; pp[19].x=26; pp[19].y=700;
pp[20].x=292; pp[20].y=700; pp[21].x=396; pp[21].y=700;
pp[22].x=416; pp[22].y=501; pp[23].x=416; pp[23].y=578;
pp[24].x=345; pp[24].y=672; pp[25].x=278; pp[25].y=672;
pp[26].x=226; pp[26].y=672; pp[27].x=214; pp[27].y=603;
pp[28].x=214; pp[28].y=532; pp[29].x=214; pp[29].y=329;
pp[30].x=278; pp[30].y=329; pp[31].x=345; pp[31].y=329;
pp[32].x=416; pp[32].y=423;
obwiednia.points=pp;
int i;
for(i=0;i<ipu;i++)
{
pp[i].x+=200; pp[i].y+=50;
pp[i].x*=16; pp[i].y*=16;
};
FT_Bitmap bmp;
FT_Raster_Params params;
const int pitch_gray = (width + 3) & -4; // 8 bits per pixel; must be a
multiple of four.
unsigned char bb[rows * pitch_gray];
bmp.buffer = bb;
memset(bmp.buffer, 0, rows * pitch_gray);
bmp.width = width;
bmp.rows = rows;
bmp.pitch = pitch_gray;
bmp.pixel_mode = FT_PIXEL_MODE_GRAY;
bmp.num_grays = 16;
// Set up the necessary raster parameters.
memset(¶ms, 0, sizeof (params));
params.source = &obwiednia;
params.target = &bmp;
params.flags = FT_RASTER_FLAG_AA;
FT_Outline_Get_Bitmap(library, &obwiednia,&bmp);
printf("P5 %d %d 255\n",width,rows);
drukuj_grafike((unsigned char *)bmp.buffer,(int)rows,(int)width);
FT_Outline_Done(library, &obwiednia);
FT_Done_FreeType( library );
return 0;
}
--- End Message ---