⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 grblit.c

📁 freetype库的应用demo,里面包含freetype的很多实例
💻 C
📖 第 1 页 / 共 4 页
字号:
            pixel[0] = (short)color2;          }          else if ( val >= 2 )          {            /* compose gray value */            int   pix = (int)*pixel;            int   dr  = pix & 0xF800;            int   dg  = pix & 0x07E0;            int   db  = pix & 0x001F;            dr  = pix & 0xF800;            dr += ((sr-dr)*val) >> 8;            dr &= 0xF800;                        dg  = pix & 0x07E0;            dg += ((sg-dg)*val) >> 8;            dg &= 0x7E0;                        db  = pix & 0x001F;            db += ((sb-db)*val) >> 8;            db += 0x001F;            *pixel = (short)( dr | dg | db );          }        }        _write +=2;        _read  ++;        x--;      }      read  += blit->read_line;      write += blit->write_line;      y--;    }    while (y > 0);  }                           #endif    static  void  blit_gray_to_565( grBlitter*  blit,                          grColor     color,                          int         max )  {    int             y;    unsigned char*  read;    unsigned char*  write;    long            color2;    read   = blit->read  + blit->xread;    write  = blit->write + 2*blit->xwrite;    color2 = color.value;    extract565( color2, color );    y = blit->height;    do    {      unsigned char*  _read  = read;      unsigned char*  _write = write;      int             x      = blit->width;      while (x > 0)      {        unsigned char    val;        val = *_read;        if (val)        {          unsigned short* pixel = (unsigned short*)_write;          if (val == max)          {            pixel[0] = (short)color2;          }          else          {            /* compose gray value */            unsigned short  pix16 = *pixel;            grColor         pix;            extract565( pix16, pix );            compose_pixel( pix, color, val, max );            *pixel = (short)inject565( pix );          }        }        _write +=2;        _read  ++;        x--;      }      read  += blit->read_line;      write += blit->write_line;      y--;    }    while (y > 0);  }/**************************************************************************//*                                                                        *//* <Function> blit_gray_to_24                                             *//*                                                                        *//**************************************************************************/#ifdef GRAY8  static void  blit_gray8_to_24( grBlitter*  blit,                    grColor     color )  {    int             y;    int             sr = color.chroma[0];    int             sg = color.chroma[1];    int             sb = color.chroma[2];    unsigned char*  read;    unsigned char*  write;    read   = blit->read  + blit->xread;    write  = blit->write + 3*blit->xwrite;    y = blit->height;    do    {      unsigned char*  _read  = read;      unsigned char*  _write = write;      int             x      = blit->width;      while (x > 0)      {        unsigned char    val;        val = *_read;        if (val)        {          if (val >= 254)          {            _write[0] = (unsigned char)sr;            _write[1] = (unsigned char)sg;            _write[2] = (unsigned char)sb;          }          else if ( val >= 2 )          {            int  dr = _write[0];            int  dg = _write[1];            int  db = _write[2];                        dr += ((sr-dr)*val) >> 8;            dg += ((sg-dg)*val) >> 8;            db += ((sb-db)*val) >> 8;            _write[0] = (unsigned char)dr;            _write[1] = (unsigned char)dg,            _write[2] = (unsigned char)db;          }        }        _write += 3;        _read  ++;        x--;      }      read  += blit->read_line;      write += blit->write_line;      y--;    }    while (y > 0);  }                    #endif /* GRAY8 */  static  void  blit_gray_to_24( grBlitter*  blit,                         grColor     color,                         int         max )  {    int             y;    unsigned char*  read;    unsigned char*  write;    read   = blit->read  + blit->xread;    write  = blit->write + 3*blit->xwrite;    y = blit->height;    do    {      unsigned char*  _read  = read;      unsigned char*  _write = write;      int             x      = blit->width;      while (x > 0)      {        unsigned char    val;        val = *_read;        if (val)        {          if (val == max)          {            _write[0] = color.chroma[0];            _write[1] = color.chroma[1];            _write[2] = color.chroma[2];          }          else          {            /* compose gray value */            grColor pix;            pix.chroma[0] = _write[0];            pix.chroma[1] = _write[1];            pix.chroma[2] = _write[2];            compose_pixel( pix, color, val, max );            _write[0] = pix.chroma[0];            _write[1] = pix.chroma[1];            _write[2] = pix.chroma[2];          }        }        _write += 3;        _read  ++;        x--;      }      read  += blit->read_line;      write += blit->write_line;      y--;    }    while (y > 0);  }/**************************************************************************//*                                                                        *//* <Function> blit_gray_to_32                                             *//*                                                                        *//**************************************************************************/  static  void  blit_gray_to_32( grBlitter*  blit,                         grColor     color,                         int         max )  {    int             y;    unsigned char*  read;    unsigned char*  write;    read   = blit->read  + blit->xread;    write  = blit->write + 4*blit->xwrite;    y = blit->height;    do    {      unsigned char*  _read  = read;      unsigned char*  _write = write;      int             x      = blit->width;      while (x > 0)      {        unsigned char  val;        val = *_read;        if (val)        {          if (val == max)          {            _write[0] = color.chroma[0];            _write[1] = color.chroma[1];            _write[2] = color.chroma[2];            _write[3] = color.chroma[3];          }          else          {            /* compose gray value */            grColor pix;            pix.chroma[0] = _write[0];            pix.chroma[1] = _write[1];            pix.chroma[2] = _write[2];            compose_pixel( pix, color, val, max );            _write[0] = pix.chroma[0];            _write[1] = pix.chroma[1];            _write[2] = pix.chroma[2];          }        }        _write += 4;        _read  ++;        x--;      }      read  += blit->read_line;      write += blit->write_line;      y--;    }    while (y > 0);  }  static  void  blit_gray8_to_32( grBlitter*  blit,                          grColor     color )  {    blit_gray_to_32( blit, color, 255 );  }                          /**************************************************************************//*                                                                        *//* <Function> blit_lcd_to_24                                              *//*                                                                        *//**************************************************************************/#ifdef GRAY8  static void  blit_lcd8_to_24( grBlitter*  blit,                   grColor     color )  {    int             y;    int             sr = color.chroma[0];    int             sg = color.chroma[1];    int             sb = color.chroma[2];    unsigned char*  read;    unsigned char*  write;    read   = blit->read  + 3*blit->xread;    write  = blit->write + 3*blit->xwrite;    y = blit->height;    do    {      unsigned char*  _read  = read;      unsigned char*  _write = write;      int             x      = blit->width;      while (x > 0)      {        int    val0, val1, val2;        val0 = _read[0];        val1 = _read[1];        val2 = _read[2];        if ( val0 | val1 | val2 )        {          if ( val0 == val1 &&               val0 == val2 &&               val0 == 255  )          {            _write[0] = (unsigned char)sr;            _write[1] = (unsigned char)sg;            _write[2] = (unsigned char)sb;          }          else          {            /* compose gray value */            int   dr, dg, db;                        dr  = _write[0];            dr += (sr-dr)*val0 >> 8;                        dg  = _write[1];            dg += (sg-dg)*val1 >> 8;                        db  = _write[1];            db += (sb-db)*val2 >> 8;                        _write[0] = dr;            _write[1] = dg;            _write[2] = db;          }        }        _write += 3;        _read  += 3;        x--;      }      read  += blit->read_line;      write += blit->write_line;      y--;    }    while (y > 0);  }#endif /* GRAY8 */  static void  blit_lcd_to_24( grBlitter*  blit,                  grColor     color,                  int         max )  {    int             y;    unsigned char*  read;    unsigned char*  write;    read   = blit->read  + 3*blit->xread;    write  = blit->write + 3*blit->xwrite;    y = blit->height;    do    {      unsigned char*  _read  = read;      unsigned char*  _write = write;      int             x      = blit->width;      while (x > 0)      {        int    val0, val1, val2;        val0 = _read[0];        val1 = _read[1];        val2 = _read[2];        if ( val0 | val1 | val2 )        {          if ( val0 == val1 &&               val0 == val2 &&               val0 == max  )          {            _write[0] = color.chroma[0];            _write[1] = color.chroma[1];            _write[2] = color.chroma[2];          }          else          {            /* compose gray value */            grColor pix;            pix.chroma[0] = _write[0];            pix.chroma[1] = _write[1];            pix.chroma[2] = _write[2];            compose_pixel_full( pix, color, val0, val1, val2, max );            _write[0] = pix.chroma[0];            _write[1] = pix.chroma[1];            _write[2] = pix.chroma[2];          }        }        _write += 3;        _read  += 3;        x--;      }      read  += blit->read_line;      write += blit->write_line;      y--;    }    while (y > 0);  }#ifdef GRAY8  static void  blit_lcd28_to_24( grBlitter*  blit,                    grColor     color )  {    int             y;    int             sr = color.chroma[0];    int             sg = color.chroma[1];    int             sb = color.chroma[2];    unsigned char*  read;    unsigned char*  write;    read   = blit->read  + 3*blit->xread;    write  = blit->write + 3*blit->xwrite;    y = blit->height;    do    {      unsigned char*  _read  = read;      unsigned char*  _write = write;      int             x      = blit->width;      while (x > 0)      {        int    val0, val1, val2;        val0 = _read[2];        val1 = _read[1];        val2 = _read[0];        if ( val0 | val1 | val2 )        {          if ( val0 == val1 &&               val0 == val2 &&               val0 == 255  )          {            _write[0] = (unsigned char)sr;            _write[1] = (unsigned char)sg;            _write[2] = (unsigned char)sb;          }          else          {            /* compose gray value */            int   dr, dg, db;                        dr  = _write[0];            dr += (sr-dr)*val0 >> 8;                        dg  = _write[1];            dg += (sg-dg)*val1 >> 8;                        db  = _write[1];            db += (sb-db)*val2 >> 8;                        _write[0] = dr;            _write[1] = dg;            _write[2] = db;          }        }        _write += 3;        _read  += 3;        x--;      }      read  += blit->read_line;      write += blit->write_line;      y--;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -