freetype
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[ft] Fw: example Re: Fw: outline points


From: Werner LEMBERG
Subject: [ft] Fw: example Re: Fw: outline points
Date: Mon, 24 Dec 2012 12:14:50 +0100 (CET)

Pankracy, please write to the list for further help!


    Werner

--- 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(&params, 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 ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]