📄 gba_api.h
字号:
/**************************************************************************
GBA API LIBRARY
COPYRIGHT (c) 2005 BY JJJ.
-- ALL RIGHTS RESERVED --
File Name: GBA_Api.h
Author: Jiang Jian Jun
Created: 2005/12/3
Modified: NO
Revision: 1.0
Readme: GBA库的核心文件
***************************************************************************/
#ifndef _DEFINE_GBA_API_H_LIB_
#define _DEFINE_GBA_API_H_LIB_
#include "GBA_Config.h"
#include "GBA_Hardware.h"
//type definde------------------------------------------------------------------------------
typedef struct _TPOINT_{ //Defiation POINT Type
int x;
int y;
}TPOINT;
typedef struct _TRECT_{ //Defiation RECT Type
int Left;
int Top;
int Right;
int Bottom;
}TRECT;
typedef enum _TDRAWMODE_{
XOR_MODE, //异或绘图模式
TRANSPANRENT_MODE, //透明绘图模式
PASTE_MODE, //只绘前景色,比如显示文本,粘贴模式
COPY_MODE //绘前景和背景色,比如文本反显,拷贝模式
}TDRAWMODE;
typedef struct _TBITMAP_{
unsigned int Width; //宽度
unsigned int Height; //高度
unsigned char BitsPixel; //多少种颜色,颜色分辨率,默认16位色
unsigned short int PenFrontColor; //画笔的前景色
unsigned short int PenBgColor; //画笔的背景色
unsigned short int PenAlpha; //画笔的透明度0x00~0xFF,值越大,越透明!
unsigned short int MaskColor; //该位图的背景掩码颜色
TDRAWMODE Mode; //绘图模式,
unsigned short int *Dat; //位图数据指针
}TBITMAP;
//Global Variable-----------------------------------------------------------------------------
TBITMAP GBA_LcdScreen;
//Initial Function--------------------------------------------------------------
void GBA_Initial(void) //GBA初始化函数
{
//Initial Video
GBA_LcdScreen.Width = 240; //屏幕宽度
GBA_LcdScreen.Height = 160; //屏幕高度
GBA_LcdScreen.BitsPixel = 16; //16位色
GBA_LcdScreen.PenFrontColor = 0xFFFF; //画笔的前景色,默认白色
GBA_LcdScreen.PenBgColor = 0x0000; //画笔的背景色,默认黑色
GBA_LcdScreen.PenAlpha = 128; //画笔的透明度
GBA_LcdScreen.MaskColor = 0x0000; //该位图的背景掩码颜色,默认黑色
GBA_LcdScreen.Mode = PASTE_MODE; //只绘前景色,比如显示文本,粘贴模式
GBA_LcdScreen.Dat = &GBA_VRAM; //指向LCD缓冲区地址
GBA_SetVideoMode(GBA_MODE_3 | GBA_BG2_ENABLE); //mode3, 240*160 位图模式,支持16位色,单缓冲区
}
//LCD Function------------------------------------------------------------------ 所有的图像函数都基于模式三
unsigned short int GBA_GetPixel(TBITMAP * Bitmap,unsigned int X,unsigned int Y) //取得某点的颜色,读点函数
{
return ( (Bitmap->Dat)[Bitmap->Width*Y+X] );
}
void GBA_SetPixel(TBITMAP * Bitmap,unsigned int X,unsigned int Y,unsigned short int Color)//写点函数
{
(Bitmap->Dat)[Bitmap->Width*Y+X] = Color;
}
void GBA_CleanToColor(TBITMAP * Bitmap,unsigned short int Color) //清除一个位图,并变为某一种颜色
{
unsigned int i;
for(i=0;i<Bitmap->Width*Bitmap->Height;i++)
{
(Bitmap->Dat)[i] = Color;
}
}
void GBA_SetBitmapMode(TBITMAP * Bitmap,TDRAWMODE Mode) //设置位图绘图模式
{
Bitmap->Mode = Mode;
}
void GBA_SetBitmapPenFrontColor(TBITMAP * Bitmap,unsigned short int Color) //设置位图画笔前景色
{
Bitmap->PenFrontColor = Color;
}
void GBA_SetBitmapPenBgColor(TBITMAP * Bitmap,unsigned short int Color) //设置位图画笔背景色
{
Bitmap->PenBgColor = Color;
}
void GBA_SetBitmapMaskColor(TBITMAP * Bitmap,unsigned short int Color) //设置位图掩码颜色
{
Bitmap->MaskColor = Color;
}
void GBA_SetBitmapPenAlpha(TBITMAP * Bitmap,unsigned short int Alpha) //设置位图画笔的透明度
{
Bitmap->PenAlpha = Alpha&0xFF;
}
#if (GBA_FONT == 16)
#include "GBA_ASCII_16X8.h" //ASCII 16X8编码库
#include "GBA_HZK_16X16.h" //汉字库 16X16编码库
void GBA_TextOut(TBITMAP * Bitmap,unsigned int X,unsigned int Y,unsigned char *Str) //在一个位图上输出字符串,有四种绘图模式
{
unsigned int h,i,j,k=0;
unsigned int Offset;
unsigned short int rgb;
unsigned char r1,g1,b1;
unsigned char r2,g2,b2;
unsigned char r3,g3,b3;
while(*Str!='\0')
{
if(*Str < 0x80)
{
Offset = (*Str)*16;
for(j=0;j<16;j++)
for(i=0;i<8;i++)
{
switch(Bitmap->Mode)
{
case XOR_MODE:
if(GBA_ASCII_16X8_CODE[Offset+j]&(0x80>>i))
GBA_SetPixel(Bitmap,(X+k)*8+i,16*Y+j,Bitmap->PenFrontColor^GBA_GetPixel(Bitmap,(X+k)*8+i,16*Y+j));
break;
case TRANSPANRENT_MODE:
if(GBA_ASCII_16X8_CODE[Offset+j]&(0x80>>i))
{
rgb = GBA_GetPixel(Bitmap,(X+k)*8+i,16*Y+j);
r1 = GBA_GetRGB16_R(rgb);
g1 = GBA_GetRGB16_G(rgb);
b1 = GBA_GetRGB16_B(rgb);
r2 = GBA_GetRGB16_R(Bitmap->PenFrontColor);
g2 = GBA_GetRGB16_G(Bitmap->PenFrontColor);
b2 = GBA_GetRGB16_B(Bitmap->PenFrontColor);
r3 = (unsigned char)((r1*Bitmap->PenAlpha + r2*(0xFF-Bitmap->PenAlpha))>>8);
g3 = (unsigned char)((g1*Bitmap->PenAlpha + g2*(0xFF-Bitmap->PenAlpha))>>8);
b3 = (unsigned char)((b1*Bitmap->PenAlpha + b2*(0xFF-Bitmap->PenAlpha))>>8);
GBA_SetPixel(Bitmap,(X+k)*8+i,16*Y+j,GBA_RGB16(r3,g3,b3));
}
break;
case PASTE_MODE:
if(GBA_ASCII_16X8_CODE[Offset+j]&(0x80>>i))
GBA_SetPixel(Bitmap,(X+k)*8+i,16*Y+j,Bitmap->PenFrontColor);
break;
case COPY_MODE:
if(GBA_ASCII_16X8_CODE[Offset+j]&(0x80>>i))
GBA_SetPixel(Bitmap,(X+k)*8+i,16*Y+j,Bitmap->PenFrontColor);
else
GBA_SetPixel(Bitmap,(X+k)*8+i,16*Y+j,Bitmap->PenBgColor);
break;
}
}
Str++;
k++;
}
else
{
Offset = (94*(*Str-0xA0-1) + (*(Str+1)-0xA0-1))*32;
for(h=0;h<2;h++)
for(j=0;j<16;j++)
for(i=0;i<8;i++)
{
switch(Bitmap->Mode)
{
case XOR_MODE:
if(GBA_HZK_16X16_CODE[Offset+j*2+h]&(0x80>>i))
GBA_SetPixel(Bitmap,(X+k+h)*8+i,16*Y+j,Bitmap->PenFrontColor^GBA_GetPixel(Bitmap,(X+k+h)*8+i,16*Y+j));
break;
case TRANSPANRENT_MODE:
if(GBA_HZK_16X16_CODE[Offset+j*2+h]&(0x80>>i))
{
rgb = GBA_GetPixel(Bitmap,(X+k+h)*8+i,16*Y+j);
r1 = GBA_GetRGB16_R(rgb);
g1 = GBA_GetRGB16_G(rgb);
b1 = GBA_GetRGB16_B(rgb);
r2 = GBA_GetRGB16_R(Bitmap->PenFrontColor);
g2 = GBA_GetRGB16_G(Bitmap->PenFrontColor);
b2 = GBA_GetRGB16_B(Bitmap->PenFrontColor);
r3 = (unsigned char)((r1*Bitmap->PenAlpha + r2*(0xFF-Bitmap->PenAlpha))>>8);
g3 = (unsigned char)((g1*Bitmap->PenAlpha + g2*(0xFF-Bitmap->PenAlpha))>>8);
b3 = (unsigned char)((b1*Bitmap->PenAlpha + b2*(0xFF-Bitmap->PenAlpha))>>8);
GBA_SetPixel(Bitmap,(X+k+h)*8+i,16*Y+j,GBA_RGB16(r3,g3,b3));
}
break;
case PASTE_MODE:
if(GBA_HZK_16X16_CODE[Offset+j*2+h]&(0x80>>i))
GBA_SetPixel(Bitmap,(X+k+h)*8+i,16*Y+j,Bitmap->PenFrontColor);
break;
case COPY_MODE:
if(GBA_HZK_16X16_CODE[Offset+j*2+h]&(0x80>>i))
GBA_SetPixel(Bitmap,(X+k+h)*8+i,16*Y+j,Bitmap->PenFrontColor);
else
GBA_SetPixel(Bitmap,(X+k+h)*8+i,16*Y+j,Bitmap->PenBgColor);
break;
}
}
Str+=2;
k+=2;
}
}
}
#elif (GBA_FONT == 12)
#else
#error "没有定义字体GBA_FONT,或者定义错误!"
#endif
//------------------------------------------------------------------------------
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -