亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gui.c

?? 基于MEGA16的LCD128x64(ks0108)顯示程序
?? C
?? 第 1 頁 / 共 5 頁
字號:
   GUI_Point(draw_x2, draw_y2, color);
	
   while( (radius_yy*xx) < (radius_xx*yy) ) 
   {
      if(di<0)
      {
         di+= radius_yy2*(2*xx+3);
      }
      else
      {
         di += radius_yy2*(2*xx+3) + 4*radius_xx - 4*radius_xx*yy;
	 	  
         yy--;
         draw_y0--;
         draw_y1--;
         draw_y2++;
         draw_y3++;
      }
	  
      xx ++;						// x軸加1
	 		
      draw_x0++;
      draw_x1--;
      draw_x2++;
      draw_x3--;
		
      GUI_Point(draw_x0, draw_y0, color);
      GUI_Point(draw_x1, draw_y1, color);
      GUI_Point(draw_x2, draw_y2, color);
      GUI_Point(draw_x3, draw_y3, color);
   }
  
   di = radius_xx2*(yy-1)*(yy-1) + radius_yy2*xx*xx + radius_yy + radius_yy2*xx - radius_xx2*radius_yy;
   while(yy>=0) 
   {
      if(di<0)
      {
         di+= radius_xx2*3 + 4*radius_yy*xx + 4*radius_yy - 2*radius_xx2*yy;
	 	  
         xx ++;						// x軸加1
         draw_x0++;
         draw_x1--;
         draw_x2++;
         draw_x3--;
      }
      else
      {
         di += radius_xx2*3 - 2*radius_xx2*yy;
      }
	  
      yy--;
      draw_y0--;
      draw_y1--;
      draw_y2++;
      draw_y3++;
		
      GUI_Point(draw_x0, draw_y0, color);
      GUI_Point(draw_x1, draw_y1, color);
      GUI_Point(draw_x2, draw_y2, color);
      GUI_Point(draw_x3, draw_y3, color);
   }     
}

/****************************************************************************
* 名稱:GUI_EllipseFill()
* 功能:畫正橢圓,并填充。給定橢圓的四個點的參數,最左、最右點的x軸坐標值為x0、x1,最上、最下點
*      的y軸坐標為y0、y1。
* 入口參數:x0		最左點的x坐標值
*           x1		最右點的x坐標值
*           y0		最上點的y坐標值
*           y1          最下點的y坐標值
*           color	填充顏色
* 出口參數:無
* 說明:操作失敗原因是指定地址超出有效范圍。
****************************************************************************/
void  GUI_EllipseFill(uint32 x0, uint32 x1, uint32 y0, uint32 y1, TCOLOR color)
{
   int32  draw_x0, draw_y0;			// 劊圖點坐標變量
   int32  draw_x1, draw_y1;
   int32  draw_x2, draw_y2;
   int32  draw_x3, draw_y3;
   int32  xx, yy;				// 畫圖控制變量
    
   int32  center_x, center_y;		        // 橢圓中心點坐標變量
   int32  radius_x, radius_y;		        // 橢圓的半徑,x軸半徑和y軸半徑
   int32  radius_xx, radius_yy;		        // 半徑乘平方值
   int32  radius_xx2, radius_yy2;	        // 半徑乘平方值的兩倍
   int32  di;					// 定義決策變量
	
   /* 參數過濾 */
   if( (x0==x1) || (y0==y1) )
       return;
   
   /* 計算出橢圓中心點坐標 */
   center_x = (x0 + x1) >> 1;			
   center_y = (y0 + y1) >> 1;
   
   /* 計算出橢圓的半徑,x軸半徑和y軸半徑 */
   if(x0 > x1)
   {
      radius_x = (x0 - x1) >> 1;
   }
   else
   {
      radius_x = (x1 - x0) >> 1;
   }
   if(y0 > y1)
   {
      radius_y = (y0 - y1) >> 1;
   }
   else
   {
      radius_y = (y1 - y0) >> 1;
   }
		
   /* 計算半徑乘平方值 */
   radius_xx = radius_x * radius_x;
   radius_yy = radius_y * radius_y;
	
   /* 計算半徑乘4值 */
   radius_xx2 = radius_xx<<1;
   radius_yy2 = radius_yy<<1;
   
    /* 初始化畫圖變量 */
   xx = 0;
   yy = radius_y;
  
   di = radius_yy2 + radius_xx - radius_xx2*radius_y ;	// 初始化決策變量 
	
   /* 計算出橢圓y軸上的兩個端點坐標,作為作圖起點 */
   draw_x0 = draw_x1 = draw_x2 = draw_x3 = center_x;
   draw_y0 = draw_y1 = center_y + radius_y;
   draw_y2 = draw_y3 = center_y - radius_y;
  
	 
   GUI_Point(draw_x0, draw_y0, color);					// 畫y軸上的兩個端點
   GUI_Point(draw_x2, draw_y2, color);
	
   while( (radius_yy*xx) < (radius_xx*yy) ) 
   {
      if(di<0)
      {
         di+= radius_yy2*(2*xx+3);
      }
      else
      {
         di += radius_yy2*(2*xx+3) + 4*radius_xx - 4*radius_xx*yy;
	 	  
         yy--;
         draw_y0--;
         draw_y1--;
         draw_y2++;
         draw_y3++;
      }
	  
      xx ++;						// x軸加1
	 		
      draw_x0++;
      draw_x1--;
      draw_x2++;
      draw_x3--;
		
      GUI_Point(draw_x0, draw_y0, color);
      GUI_Point(draw_x1, draw_y1, color);
      GUI_Point(draw_x2, draw_y2, color);
      GUI_Point(draw_x3, draw_y3, color);
	  
      /* 若y軸已變化,進行填充 */
      if(di>=0)
      {
         GUI_HLine(draw_x0, draw_y0, draw_x1, color);
         GUI_HLine(draw_x2, draw_y2, draw_x3, color);
      }
   }
  
   di = radius_xx2*(yy-1)*(yy-1) + radius_yy2*xx*xx + radius_yy + radius_yy2*xx - radius_xx2*radius_yy;
   while(yy>=0) 
   {
      if(di<0)
      {
         di+= radius_xx2*3 + 4*radius_yy*xx + 4*radius_yy - 2*radius_xx2*yy;
	 	  
         xx ++;						// x軸加1
         draw_x0++;
         draw_x1--;
         draw_x2++;
         draw_x3--;
      }
      else
      {
         di += radius_xx2*3 - 2*radius_xx2*yy;
      }
	  
      yy--;
      draw_y0--;
      draw_y1--;
      draw_y2++;
      draw_y3++;
		
      GUI_Point(draw_x0, draw_y0, color);
      GUI_Point(draw_x1, draw_y1, color);
      GUI_Point(draw_x2, draw_y2, color);
      GUI_Point(draw_x3, draw_y3, color);
	  
      /* y軸已變化,進行填充 */
      GUI_HLine(draw_x0, draw_y0, draw_x1, color);
      GUI_HLine(draw_x2, draw_y2, draw_x3, color); 
   }     
}
#endif

#if  GUI_FloodFill_EN==1
/****************************************************************************
* 名稱:GUI_ReadLeftPoint()
* 功能:找出指定點左邊最近的非color點。
* 入口參數:x0		指定點的x坐標值
*           y0		指定點的y坐標值
*           color	指定顏色值
* 出口參數:返回該點的x軸坐標值。
* 說明:若沒有找出,則返回最左的x坐標0。
****************************************************************************/
uint32  GUI_ReadLeftPoint(uint32 x0, uint32 y0, TCOLOR color)
{
   uint32  i;
   TCOLOR  bakc;
   
   for(i=x0-1; i>0; i--)
   {
      GUI_ReadPoint(i, y0, &bakc);
      if( GUI_CmpColor(bakc,color)==0 )
         return(i+1);	// 若找到,則返回
   }
   GUI_ReadPoint(i, y0, &bakc);
   if( GUI_CmpColor(bakc,color)==0 )
      return(1);	        	// 若找到,則返回
   
   return(0);
}


/****************************************************************************
* 名稱:GUI_ReadRightPoint()
* 功能:找出指定點右邊最近的非color點。
* 入口參數:x0		指定點的x軸坐標值
*           y0		指定點的y軸坐標值
*           color	指定顏色值
* 出口參數:返回該點的x軸坐標值。
* 說明:若沒有找出,則返回最右的x坐標GUI_LCM_XMAX。
****************************************************************************/
uint32  GUI_ReadRightPoint(uint32 x0, uint32 y0, TCOLOR color)
{
   uint32  i;
   TCOLOR  bakc;
   
   for(i=x0+1; i<GUI_LCM_XMAX; i++)
   {
      GUI_ReadPoint(i, y0, &bakc);
      if( GUI_CmpColor(bakc,color)==0 )
         return(i-1);	                 // 若找到,則返回
   }
   return(GUI_LCM_XMAX);
}


/****************************************************************************
* 名稱:GUI_CmpPointColor()
* 功能:判斷指定點上的顏色是否為某種顏色。
* 入口參數:x		指定點的x軸坐標值
*	    y		指定點的y軸坐標值
*          color	顏色值
* 出口參數:返回1表示相同,返回0表示不相同。
* 說明:
****************************************************************************/
int  GUI_CmpPointColor(uint32 x, uint32 y, TCOLOR color)
{
   TCOLOR  bakc;
   
   GUI_ReadPoint(x, y, &bakc);
   return( GUI_CmpColor(bakc,color) );	
}

/* 定義折點個數 */
#ifndef  DOWNP_N
#define  DOWNP_N		20
#endif
#ifndef	 UPP_N
#define  UPP_N			20
#endif
/****************************************************************************
* 名稱:GUI_FloodFill()
* 功能:圖形填充,將指定點內的封閉圖形進行填充。對指定點的顏色區(qū)域進行填充,即不是該顏色
*      的像素為邊界(如,指定點上的顏色為紅色,則其它顏色像素均為邊界)。
* 入口參數:x0		指定點的x坐標值
*           y0		指定點的y坐標值
*           color	填充顏色
* 出口參數:無
* 說明:操作失敗原因是指定地址超出有效范圍、指定點不在封閉圖形內。
****************************************************************************/
void  GUI_FloodFill(uint32 x0, uint32 y0, TCOLOR color)
{
   PointXY  down_point[DOWNP_N];	                // 定義向下填充轉折點緩沖區(qū)
   uint8    down_no;				        // 向下折點個數
   PointXY  up_point[UPP_N];		                // 定義向上填充轉折點緩沖區(qū)
   uint8    up_no;					// 向上折點個數
   TCOLOR   fcolor;					// 填充點上的顏色
   
   uint32  xx, yy;					// 填充臨時x,y變量 (當前填充行的中點)
   uint32  xx0;						// 當前填充行的左x值變量
   uint32  xx1;						// 當前填充行的右y值變量
   uint32  i;
   
   uint32  x0_bak, y0_bak;
   uint32  x1_bak;
   
   /* 參數過濾 */
   if(x0>=GUI_LCM_XMAX)
      return;
   if(y0>=GUI_LCM_YMAX)
      return;
   
   /* 判斷指定點是否為填充顏色,若是則直接返回 */
   GUI_ReadPoint(x0, y0, &fcolor);					// 取得填充點的顏色
   if( GUI_CmpColor(fcolor,color)!=0 )
      return;
   
   y0_bak = y0;
   x0_bak = xx0 = GUI_ReadLeftPoint(x0, y0, fcolor);			// 找出當前y坐標上的最左邊的點
   x1_bak = xx1 = GUI_ReadRightPoint(x0, y0, fcolor);			// 找出當前y坐標上的最右邊的點
   down_point[0].x = up_point[0].x = (xx1 + xx0)/2;
   down_point[0].y = up_point[0].y = y0;
   down_no = 1;
   up_no = 1;
   					
   /* 開始向上填充 */
FILL_UP:
   if(0==up_no)
      goto FILL_DOWN;							// 若向下掃描已完成,則退出
   xx = up_point[up_no-1].x;						// 否則取出下一折點
   yy = up_point[up_no-1].y;
   up_no--; 
   xx0 = GUI_ReadLeftPoint(xx, yy, fcolor);
   xx1 = GUI_ReadRightPoint(xx, yy, fcolor);
   while(1) 
   {
      yy += 1;								// 中心點向上一點

      if( GUI_CmpPointColor(xx, yy, fcolor)==0 )					
      {  /* 判斷此點是否為終點,若是則退出此次循環(huán) */
         for(i=xx0; i<=xx1; i++)     					// 查找此行是否有需填充點
         {
            if( GUI_CmpPointColor(i, yy, fcolor)!=0 ) break;
         }
         if(i>xx1)
            goto FILL_UP;
         
         /* 找出新一行中最右邊的點 */
         xx = i;							// 更新xx到要填充的有效區(qū)域內
         xx1 = GUI_ReadRightPoint(xx, yy, fcolor);
      }
      else
      {  /* 找出新一行中最右邊的點 */
         xx1 = GUI_ReadRightPoint(xx, yy, fcolor);
      }
      xx0 = GUI_ReadLeftPoint(xx, yy, fcolor);
      
      /* 向下折點。使用y0作為折點變量,x0作為上一折點變量 */
      if(down_no<DOWNP_N)
      {
         y0 = xx0;
         x0 = y0-1;
         for(i=y0; i<=xx1; i++)
         {
            if( GUI_CmpPointColor(i, yy-1, fcolor)==0 )                 // 更新折點
            {
               y0 = i;
            }
            else
            {
               if(x0!=y0)						// 找到新的折點
               {
                  x0 = y0;
                  down_point[down_no].x = i;
                  down_point[down_no].y = yy;
                  down_no++;
               }
            }
            if(down_no>=DOWNP_N)
               break;					                // 若緩沖區(qū)已保存滿,則退出
         } // end  of for(i=y0+1; i<xx1; i++)
      } // end of if(down_no<DOWNP_N)
      
      xx = (xx1 + xx0)/2;						// 更新中心點
      GUI_HLine(xx0, yy, xx1, color);					// 填充一行
      
      /* 向上折點。使用y0作為折點變量,x0作為上一折點變量 */
      if(up_no<UPP_N)
      {
         y0 = xx0;
         x0 = y0-1;
         for(i=y0; i<=xx1; i++)
         {
            if( GUI_CmpPointColor(i, yy+1, fcolor)==0 )	                // 更新折點
            {
               y0 = i;
            }
            else
            {
               if(x0!=y0)						// 找到新的折點
               {
                  x0 = y0;
                  up_point[up_no].x = i;
                  up_point[up_no].y = yy;
                  up_no++;
               }
            }
            if(up_no>=UPP_N)
               break;				                	// 若緩沖區(qū)已保存滿,則退出
         }
      } // end of if(up_no<UPP_N)
   } // end of while(1) 

   /* 向下填充 */
FILL_DOWN: 
   if(0==down_no) 
   {
      if(0==up_no)
      {
         GUI_HLine(x0_bak, y0_bak, x1_bak, color);
         return;							// 若向下掃描已完成,且沒有發(fā)現新的向上折點,則退出
      }
      else
      {
         goto FILL_UP;
      }
   }
   xx = down_point[down_no-1].x;					// 否則取出下一折點
   yy = down_point[down_no-1].y;
   down_no--;
   xx0 = GUI_ReadLeftPoint(xx, yy, fcolor);
   xx1 = GUI_ReadRightPoint(xx, yy, fcolor);
   

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品在线观看视频| 成人性色生活片| 久久精品亚洲精品国产欧美kt∨| 一本到一区二区三区| 成人午夜在线视频| 欧美精品 日韩| 91精品国产色综合久久不卡电影| 欧美专区在线观看一区| 在线视频中文字幕一区二区| 精品国产一区二区国模嫣然| 日韩欧美国产1| 久久亚洲精精品中文字幕早川悠里| wwwwxxxxx欧美| 午夜精品一区在线观看| 五月天中文字幕一区二区| 成人免费观看男女羞羞视频| 欧美成人女星排名| 亚洲国产高清在线| 亚洲日本丝袜连裤袜办公室| 亚洲最大的成人av| 日韩高清在线观看| 激情成人午夜视频| 不卡一区二区三区四区| 欧美三级日本三级少妇99| 欧美一区二区三区的| 亚洲综合一区在线| 精品影视av免费| 99久久精品免费看| 中文字幕欧美日本乱码一线二线| 另类成人小视频在线| 成人美女在线视频| 中文久久乱码一区二区| 亚洲综合男人的天堂| 93久久精品日日躁夜夜躁欧美| 日本一区二区视频在线观看| 亚洲网友自拍偷拍| 国产高清精品网站| 欧美日韩免费高清一区色橹橹| 欧美亚洲动漫制服丝袜| 久久久久久免费毛片精品| 亚洲欧洲av在线| 日韩成人精品视频| 欧美理论电影在线| 人人狠狠综合久久亚洲| 色综合天天综合| 日韩一卡二卡三卡| 亚洲综合色视频| 7878成人国产在线观看| 中文字幕欧美三区| 色婷婷亚洲精品| 91麻豆精品91久久久久同性| 色视频一区二区| 亚洲乱码国产乱码精品精98午夜| 欧美电视剧免费全集观看| 蜜臀99久久精品久久久久久软件| 91亚洲精品乱码久久久久久蜜桃| 日韩一区二区三区在线视频| 精东粉嫩av免费一区二区三区| 久久综合五月天婷婷伊人| 成人午夜在线播放| 中文字幕综合网| 欧美日韩国产另类不卡| 精品综合久久久久久8888| 国产亚洲短视频| 色噜噜狠狠成人中文综合| 久久精品一级爱片| 97se狠狠狠综合亚洲狠狠| 亚洲成人高清在线| 欧美性色黄大片手机版| 久久国产精品99久久久久久老狼| 国产日韩成人精品| 国产精品久久99| 欧美日韩一区久久| 欧美精品精品一区| 日本不卡1234视频| 精品国偷自产国产一区| 成人免费av资源| 天天亚洲美女在线视频| 国产偷国产偷精品高清尤物| 91激情在线视频| 精品一区二区三区的国产在线播放| 欧美激情一区二区三区全黄| 欧美视频在线一区二区三区 | 国产福利精品一区| 亚洲欧美日韩国产一区二区三区| 久久超碰97中文字幕| 日韩美女啊v在线免费观看| 欧美一区二区三区在线| 91视频国产观看| 国产麻豆91精品| 国产欧美一区二区在线观看| 国产福利精品一区| wwww国产精品欧美| **欧美大码日韩| 欧美日韩成人在线| 成人永久免费视频| 奇米色一区二区三区四区| 国产精品美女久久久久久| 日韩一级二级三级| 欧美性一区二区| 91网站最新地址| 成人精品国产福利| 国产精品综合av一区二区国产馆| 日韩亚洲欧美高清| 欧美日韩一区在线| 91国在线观看| 99re热视频精品| 成人精品视频一区二区三区| 国产一区视频导航| 九九国产精品视频| 蜜臀av一级做a爰片久久| 亚洲第一狼人社区| 亚洲综合色视频| 依依成人精品视频| 在线观看欧美精品| av在线不卡网| 精品一区二区在线视频| 一区二区三区日韩欧美精品| 色猫猫国产区一区二在线视频| 高清成人在线观看| 亚洲视频一区在线| 日韩理论片中文av| 亚洲婷婷国产精品电影人久久| 中文字幕在线一区免费| 亚洲色图清纯唯美| 一区二区三区中文免费| 一区二区三区国产精华| 亚洲综合无码一区二区| 午夜久久久影院| 免费观看在线色综合| 国产真实乱子伦精品视频| 国产精品一区二区视频| av影院午夜一区| 欧美午夜片在线看| 日韩一区二区三区四区 | 久久久久久一二三区| 久久九九久精品国产免费直播| 3d动漫精品啪啪一区二区竹菊| 色婷婷综合激情| 精品福利在线导航| 欧美日韩在线三级| 日韩中文字幕一区二区三区| 成人精品电影在线观看| 成人做爰69片免费看网站| av激情亚洲男人天堂| 91影视在线播放| 欧美少妇bbb| 欧美大度的电影原声| 久久久久久久精| 亚洲精品国产视频| 蜜臀av一级做a爰片久久| 国产精品一区二区在线播放| 日本国产一区二区| 精品久久人人做人人爱| 国产精品私房写真福利视频| 亚洲国产视频网站| 国产在线看一区| 在线观看av一区二区| www欧美成人18+| 亚洲在线观看免费| 国产大陆精品国产| 99精品在线观看视频| 亚洲三级理论片| 中文字幕永久在线不卡| 一级做a爱片久久| 亚洲高清视频的网址| 日本中文字幕一区二区视频 | 在线国产亚洲欧美| 亚洲精品一区在线观看| 亚洲精品视频一区| 国产成人亚洲综合a∨猫咪| 欧美日韩国产一区| 国产精品丝袜一区| 久久精品噜噜噜成人88aⅴ| 91黄视频在线| 国产精品青草综合久久久久99| 婷婷开心激情综合| 色综合久久综合网欧美综合网| 精品日韩欧美在线| 亚洲成人福利片| 色综合亚洲欧洲| 国产精品久久久久久久久久免费看 | 日韩欧美中文字幕精品| 色噜噜夜夜夜综合网| 日本欧美一区二区| 国产盗摄一区二区三区| 久久九九久久九九| 亚洲欧美日韩中文播放| 精品一区二区久久久| 91超碰这里只有精品国产| 亚洲欧美另类小说视频| 国产综合久久久久久久久久久久| 欧美日本在线观看| 亚洲一区二区三区中文字幕在线| 成人蜜臀av电影| 国产欧美精品日韩区二区麻豆天美| 看片网站欧美日韩| 日韩一区二区中文字幕| 天天影视涩香欲综合网| 欧美日韩一区二区在线观看|