在Eboot里面显示图片,如果要显示一些非全屏大小的图片,感觉不是很爽,所以封装了几个函数,用于显示图片,或者画图用。
屏幕大小是320*240的,这样的屏幕,画的时候在屏幕的左上角开始往右边画,画完一行,接着画下一行。要显示的图片,需要先转成对应的数组。这里使用的是bmp2c.exe软件。由于,屏幕打竖来放,即变成240*320。这样子的话,做出来的图片需要逆时针旋转90度之后,才能够转换成对应的数组。
下面的函数支持全屏或非全屏的图片或颜色显示
其中的几个关键函数如下:
// 显示图片
BOOL ShowPicture(int startX, int startY, int width, int high, const unsigned short *picture)
{
unsigned int *pFB;
int i,j;
if(startX>320 || startY>240) return FALSE;
if(picture == NULL) return FALSE;
pFB = (unsigned int *)EBOOT_FRAMEBUFFER_UA_START;
for(j=0; j<high; j++){
for(i=0; i<width; i++){
UpDataBitmaptmp4=(int)picture[i+j*width];
UpDataBitmaptmp=(((UpDataBitmaptmp4>>11)<<19)|(((UpDataBitmaptmp4>>5)&0x3F)<<10)|((UpDataBitmaptmp4&0x1F)<<3)|0x0);
*(pFB+(startY*320+startX)+j*320+i) = UpDataBitmaptmp;
}
}
}
// 显示颜色
BOOL ShowColor(int startX, int startY, int width, int high, const unsigned short color)
{
unsigned int *pFB;
int i,j;
if(startX>320 || startY>240) return FALSE;
pFB = (unsigned int *)EBOOT_FRAMEBUFFER_UA_START;
for(j=0; j<high; j++){
for(i=0; i<width; i++){
UpDataBitmaptmp4=(int)color;
UpDataBitmaptmp=(((UpDataBitmaptmp4>>11)<<19)|(((UpDataBitmaptmp4>>5)&0x3F)<<10)|((UpDataBitmaptmp4&0x1F)<<3)|0x0);
*(pFB+(startY*320+startX)+j*320+i) = UpDataBitmaptmp;
}
}
}
// 清屏
void ClearScreen()
{
unsigned int *pFB;
volatile unsigned long i=0;
pFB = (unsigned int *)EBOOT_FRAMEBUFFER_UA_START;
for(i=0; i<76800; i++){
*(pFB+i)=0x00000000;
}
}
上述函数中的参数说明:
startX : 图片开始的X坐标(以屏幕为320*240为准)
startY : 图片开始的Y坐标
width : 图片的宽度(旋转后的图片宽度)
high : 图片的高度(旋转后的图片高度)
picture : 图片对应的数组指针
color : 颜色值。0xFFFF表示白色,0x0000表示黑色