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

📄 glib.c

📁 ucCos移植到广州友善nano2410
💻 C
字号:
/*********************************************************/
/*     glib.c							     			*/
/*********************************************************/
#include "..\inc\def.h"
#include "..\inc\glib.h"
#include "..\inc\lcddrive.h" 

#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>


//TFT 240320
/**************************************************************
320】240 16Bpp TFT LCD 拳家单捞磐免仿
**************************************************************/  
void PutPixel(U32 x,U32 y,U32 color) 
{   
	unsigned int addr;	       	
    addr=LCDFRAMEBUFFER+(x+y*SCR_XSIZE_TFT_240320)*2;
    *(volatile short *)(addr)=color;    
} 

//ucGUI客 龋券阑 嘎眠扁 困秦 荤侩茄巴烙.
void LCD2410_SetPixel(U32 x,U32 y,U32 color,int dindex)
{
	unsigned int addr;	       	
     
    addr=LCDFRAMEBUFFER+(x+y*SCR_XSIZE_TFT_240320)*2;
    *(volatile short *)(addr)=color;    
}

int GetPixel(int x, int y)
{
     unsigned int addr, tmp;	       	
    
     addr=LCDFRAMEBUFFER+(x+y*SCR_XSIZE_TFT_240320)*2;
     
     tmp=*(volatile short *)(addr);
     
     return (tmp);
} 

int LCD2410_GetPixel(U32 x,U32 y,int dindex)
{
	 unsigned int addr, tmp;	       	
    
     addr=LCDFRAMEBUFFER+(x+y*SCR_XSIZE_TFT_240320)*2;
     
     tmp=*(volatile short *)(addr);
     
     return (tmp); 
}

/**************************************************************
	LCD拳搁俊 流荤阿屈阑 父电促.
 **************************************************************/
void Glib_Rectangle(int x1,int y1,int x2,int y2,int color) 
{ 
  Glib_Line(x1,y1,x2,y1,color); 
  Glib_Line(x2,y1,x2,y2,color); 
  Glib_Line(x1,y2,x2,y2,color); 
  Glib_Line(x1,y1,x1,y2,color); 
} 

/**************************************************************
	LCD拳搁俊 加捞 盲况柳 流荤阿屈阑 父电促.
 **************************************************************/
void Glib_FilledRectangle(int x1,int y1,int x2,int y2,int color)
{  
  int i;
  for(i=y1;i<=y2;i++)
     Glib_Line(x1,i,x2,i,color); 
} 

void Glib_Line(double x1, double y1, double x2, double y2, int color)
{
    int dx,dy,e;
	dx=x2-x1; 
	dy=y2-y1;
    
	if(dx>=0)
	{
		if(dy >= 0) // dy>=0
		{
			if(dx>=dy) // 1/8 octant
			{
				e=dy-dx/2;
				while(x1<=x2)
				{
					PutPixel(x1,y1,color);
					if(e>0){y1+=1;e-=dx;}	
					x1+=1;
					e+=dy;
				}
			}
			else		// 2/8 octant
			{
				e=dx-dy/2;
				while(y1<=y2)
				{
					PutPixel(x1,y1,color);
					if(e>0){x1+=1;e-=dy;}	
					y1+=1;
					e+=dx;
				}
			}
		}
		else		   // dy<0
		{
			dy=-dy;   // dy=abs(dy)

			if(dx>=dy) // 8/8 octant
			{
				e=dy-dx/2;
				while(x1<=x2)
				{
					PutPixel(x1,y1,color);
					if(e>0){y1-=1;e-=dx;}	
					x1+=1;
					e+=dy;
				}
			}
			else		// 7/8 octant
			{
				e=dx-dy/2;
				while(y1>=y2)
				{
					PutPixel(x1,y1,color);
					if(e>0){x1+=1;e-=dy;}	
					y1-=1;
					e+=dx;
				}
			}
		}	
	}
	else //dx<0
	{
		dx=-dx;		//dx=abs(dx)
		if(dy >= 0) // dy>=0
		{
			if(dx>=dy) // 4/8 octant
			{
				e=dy-dx/2;
				while(x1>=x2)
				{
					PutPixel(x1,y1,color);
					if(e>0){y1+=1;e-=dx;}	
					x1-=1;
					e+=dy;
				}
			}
			else		// 3/8 octant
			{
				e=dx-dy/2;
				while(y1<=y2)
				{
					PutPixel(x1,y1,color);
					if(e>0){x1-=1;e-=dy;}	
					y1+=1;
					e+=dx;
				}
			}
		}
		else		   // dy<0
		{
			dy=-dy;   // dy=abs(dy)

			if(dx>=dy) // 5/8 octant
			{
				e=dy-dx/2;
				while(x1>=x2)
				{
					PutPixel(x1,y1,color);
					if(e>0){y1-=1;e-=dx;}	
					x1-=1;
					e+=dy;
				}
			}
			else		// 6/8 octant
			{
				e=dx-dy/2;
				while(y1>=y2)
				{
					PutPixel(x1,y1,color);
					if(e>0){x1-=1;e-=dy;}	
					y1-=1;
					e+=dx;
				}
			}
		}	
	}
} 

/************************************************************************
320】240 16Bpp TFT LCD 傈眉 拳搁阑 漂沥祸彬肺 盲款促. 瘤快巴苞 悼老茄 瓤苞
*************************************************************************/
void Glib_ClearScr(U32 c) 
{         
  //Very inefficient function.  
  int i,j; 
  
  //MODE_TFT_8BIT_640480,MODE_TFT_16BIT_640480悼老 利侩
  for(j=0;j<SCR_YSIZE_TFT_240320;j++) 
  {
        for(i=0;i<SCR_YSIZE_TFT_240320;i++) 
        {
                PutPixel(i,j,c);    //LCD_BUFFER[y][x] = c ;
        }
  }
}

/**************************************************************
 LCD拳搁狼 漂沥困摹俊 漂沥农扁狼 弊覆阑 弊赴促.
 **************************************************************/
 void Paint_Bmp(int x0,int y0,int h,int l,unsigned char bmp[])
 {
 	int x,y;
 	U32 c;
 	int p=0;
 	
 	for(y=0;y<l;y++)
 	{
 		for(x=0;x<h;x++)
 		{
 			c=bmp[p+1]|(bmp[p]<<8);
 			
 			if((x0+x<SCR_XSIZE_TFT_240320)&&(y0+y<SCR_YSIZE_TFT_240320))
 				PutPixel(y0+y,x0+x,c);
 			p=p+2;
 		}
 	}
} 
 
int mix=100;
int overwrite=1;
volatile int gray=0;

void DrawBMP(int x, int y, const unsigned char *fp)
{
     int xx=0, yy=0;	
     U32 tmp;
     U8 tmpR, tmpG, tmpB;
     U8 r, g, b;
     
     U16 bfType;
     U32 bfSize;
     U32 bfOffbits;
     U32 biWidth, biWidth2;
     U32 biHeight;     
	
     bfType=*(unsigned short *)(fp+0);
     bfSize=*(unsigned short *)(fp+2);
     tmp=*(unsigned short *)(fp+4);
     bfSize=(tmp<<16)+bfSize;
     bfOffbits=*(unsigned short *)(fp+10);
     biWidth=*(unsigned short *)(fp+18);    
     biHeight=*(unsigned short *)(fp+22);          
     
     biWidth2=(bfSize-bfOffbits)/biHeight;	

     
     for(yy=0;yy<biHeight;yy++)
     {
         for(xx=0;xx<biWidth2/3;xx++)
         {
             tmpB=*(unsigned char *)(fp+bfOffbits+3*xx+(biHeight-yy-1)*biWidth2+0);
             tmpG=*(unsigned char *)(fp+bfOffbits+3*xx+(biHeight-yy-1)*biWidth2+1);
             tmpR=*(unsigned char *)(fp+bfOffbits+3*xx+(biHeight-yy-1)*biWidth2+2);

             if(tmpB==0xff && tmpG==0x00 && tmpR==0x00 && overwrite==0)
             {
             }
             else
             {   	
	             tmpR>>=3;
	             tmpG>>=3;
	             tmpB>>=3;
	             if(gray)
	             {
		 		tmp=(tmpR+tmpG+tmpB)/3;
		 		tmpR=tmp;
		 		tmpG=tmp;
		 		tmpB=tmp;
	             }	             
	             if(mix)
	             {
     	            	tmp=GetPixel(x+xx, y+yy);	
     	            	r=(tmp>>11)&0x1F;
     	            	g=(tmp>>6)&0x1F;
     	            	b=(tmp>>0)&0x1F;
     	     
     	            	if(mix>100) mix=100;
     	            	tmpR=((tmpR*mix)+(100-mix)*r)/100;
     	            	tmpG=((tmpG*mix)+(100-mix)*g)/100;
     	            	tmpB=((tmpB*mix)+(100-mix)*b)/100;		
     	             }
     	        	             
	             if(xx<biWidth2)
	               PutPixel(x+xx,y+yy,(tmpR<<11)+(tmpG<<6)+(tmpB<<0));
             }
         } 
     } 
} 

void Ov_Box(int x1, int y1, int x2, int y2, int color)
{
     int xx, yy;
     int r1,g1,b1;
     int r2,g2,b2;     
     int tmp;
     	 
     for(yy=y1;yy<=y2;yy++)
     {
     	 for(xx=x1;xx<=x2;xx++)	
     	 {
     	     tmp=GetPixel(xx, yy);	
     	     r1=(tmp>>11)&0x1F;
     	     g1=(tmp>>5)&0x3F;
     	     b1=(tmp>>0)&0x1F;
     	     r2=(color>>11)&0x1F;
     	     g2=(color>>5)&0x3F;
     	     b2=(color>>0)&0x1F;     	     
     	     
     	     if(mix>100) mix=100;
     	     r1=((r1*mix)+(100-mix)*r2)/100;
     	     g1=((g1*mix)+(100-mix)*g2)/100;
     	     b1=((b1*mix)+(100-mix)*b2)/100;
     	     
     	     tmp=(r1<<11)|(g1<<5)|(b1);
     	     PutPixel(xx, yy, tmp);		     		
	 	} 
     } 	 
}


⌨️ 快捷键说明

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