📄 glib.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 + -