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

📄 gba_api.h

📁 可以编译产生在gba模拟器上执行的二进制映像的ads模板。
💻 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 + -