#define SCREEN_WIDTH 240
#define SCREEN_HEIGHT 320
/**
函数功能:把一个tile铺满一个与屏幕大小相同的缓冲区,
然后把缓冲区数据数据绘制到屏幕上
*/
void tileToBufToScreen(char *tileData, int tileWidth, int tileHeight)
{
int16 i = 0;
int16 j = 0;
int16 x = 0;
int16 y = 0;
int16 dy;
int row;
int col;
char *srcBuf, *destBuf;
int32 memcpyNum;
if (tileData == NULL || titleWidth <= 0 || titleHeight <= 0)
{
return;
}
/** 为缓冲区分配内存 */
destBufTemp = (char *)malloc(sizeof(char) * 2 * SCREEN_WIDTH * SCREEN_HEIGHT);
if (destBufTemp == NULL)
{
return;
}
memset((char *)destBufTemp, 0, sizeof(char) * 2 * SCREEN_WIDTH * SCREEN_HEIGHT);
memcpyNum = titleWidth << 1; /** 拷贝图片的一行数据,需要拷贝的字节数 */
row = SCREEN_HEIGHT / titleHeight; /** 需要拷贝的行数 */
col = SCREEN_WIDTH / titleWidth; /** 需要拷贝的列数 */
/* 把地表数据拷贝到缓冲区中 */
for (i = 0; i < row; ++i)
{
/* 依次拷贝一个图块 */
for (j = 0; j < col; ++j)
{
x = j * titleWidth;
y = i * titleHeight;
destBuf = destBufTemp + y * SCREEN_WIDTH * 2 + x * 2;
srcBuf = (char *)tileData;
for (dy = y; dy < y + titleHeight; ++dy) /** 逐行进行拷贝 */
{
memcpy(destBuf, srcBuf, memcpyNum);
destBuf += SCREEN_WIDTH * 2;
srcBuf += titleWidth * 2;
}
}
}
/* 将缓冲中的内存显示到屏幕上 */
BufToScreen((uint16 *)destBufTemp, 0, 0, 240, 240, 320, BM_COPY, 0, 0);
}