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

📄 lcdp0.c

📁 uCOS/II下用的图形系统源码
💻 C
字号:
/***********************************************************************************************************                                                uC/GUI*                        Universal graphic software for embedded applications**                       (c) Copyright 2002, Micrium Inc., Weston, FL*                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH**              礐/GUI is protected by international copyright laws. Knowledge of the*              source code may not be used to write a similar product. This file may*              only be used in accordance with a license and should not be redistributed*              in any way. We appreciate your understanding and fairness.*----------------------------------------------------------------------File        : LCDP0.CPurpose     : Color conversion routines for LCD-drivers---------------------------END-OF-HEADER------------------------------*/#include <stdlib.H>#include "LCD_Protected.h"    /* inter modul definitions *//*        *********************************************************        *                                                       *        *       calculation macros and support                  *        *                                                       *        **********************************************************/#if 1  /* Normaly calculate square values */  #define  SQUARE(Dist) ((U16)Dist) * ((U16)Dist)#else#define S(x) ((x)*(x))#define SQUARES(Base)  S(Base+0),  S(Base+1),  S(Base+2),  S(Base+3), S(Base+4),  S(Base+5),   \                       S(Base+6),  S(Base+7),  S(Base+8),  S(Base+9), S(Base+10), S(Base+11), \                       S(Base+12), S(Base+13), S(Base+14), S(Base+15)static const U16 aSquare[] = {  SQUARES(0*16)  ,SQUARES(1*16), SQUARES(2*16), SQUARES(3*16)  ,SQUARES(4*16) ,SQUARES(5*16), SQUARES(6*16), SQUARES(7*16)  ,SQUARES(8*16) ,SQUARES(9*16), SQUARES(10*16),SQUARES(11*16)  ,SQUARES(12*16),SQUARES(13*16),SQUARES(14*16),SQUARES(15*16)};  #define  SQUARE(Dist) aSquare[Dist]#endif/*        *********************************************************        *                                                       *        *       Color conversions for palette based displays    *        *                                                       *        **********************************************************/static INT32U CalcColorDist (LCD_COLOR PalColor, LCD_COLOR  Color) {/* This routine does not use abs() because we are optimizing for speed ! */  I16 Dist;  INT32U Sum;  Dist  = (PalColor&0xff) - (Color&0xff);  if (Dist < 0)	  Dist = -Dist;  Sum = SQUARE(Dist);  Dist  = ((PalColor>>8)&0xff) -  ((Color>>8)&0xff);  if (Dist < 0)	  Dist = -Dist;  Sum += SQUARE(Dist);  Dist  = (PalColor>>16) - (Color>>16);  if (Dist < 0)	  Dist = -Dist;  return Sum + SQUARE(Dist);}  /*          *********************************************************          *                                                       *          *   Color conversions for 1/2/4/8 bpp color displays    *          *                                                       *          *              with table based palette                 *          *                                                       *          *********************************************************  */  int LCD_Color2Index_0(LCD_COLOR Color, const LCD_PHYSPALETTE* pPhysPal) {    int i;    int NumEntries = pPhysPal->NumEntries;    int BestIndex;    INT32U BestDiff = 0xffffff; /* Initialize to worst match */    const LCD_COLOR* pPalEntry;/* Try to find perfect match */    i=0; pPalEntry = &pPhysPal->pPalEntries[0];    do {	    if (Color==*(pPalEntry+i))	      return i;    } while (++i<NumEntries);/* Find best match */    i=0; pPalEntry = &pPhysPal->pPalEntries[0];    do {      INT32U Diff = CalcColorDist (Color, *(pPalEntry+i));      if (Diff < BestDiff) {        BestDiff  = Diff;        BestIndex = i;      }    } while (++i<NumEntries);    return BestIndex;  }  LCD_COLOR LCD_Index2Color_0(int Index, const LCD_PHYSPALETTE* pPhysPal) {    if ((unsigned)Index >= (unsigned) pPhysPal->NumEntries) {      return 0;     /* Illegal index */    }    return *(pPhysPal->pPalEntries+Index);  }

⌨️ 快捷键说明

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