最近要做一个开机logo 开始打算是采用分区来进行工作,由于图片是1024*768的屏上面显示 图片比较的大,大小是1.7M的空间
而我能够给eboot的分区大小是856k的空间,整个下载流程坐下来是正常的,但是如果我分配2M的空间,图片可以正常显示,但是USB下载就有问题了。所以远远满足不了图片的要求,最后决定采用压缩图片的方法来做,把1.7M的图片压缩为200多k的大小,运行起来感觉挺不错的。下面是我用c#编写的压缩图片的代码。
private void button1_Click(object sender, EventArgs e)//压缩按键
{
number = 1;
flag = 0;
uint i = 0;
//最后一个不能比较了,所以需要减2 BOY
for (i = 0; i < NUM - 2; i = i + 2)
{
//相同的置位相同标志位
if ((image[i] == image[i + 2]) && (image[i + 1] == image[i + 3]))
{
number++;
}
else//不同的话就原样压入新的缓冲区
{
//相同的大于3个字才压缩,不然压缩没有意义
if (number > 3)
{
comress_image[flag++] = HEAD;
comress_image[flag++] = HEAD;
comress_image[flag++] = (byte)number;
comress_image[flag++] = (byte)(number >> 8);//相同的数据的个数
comress_image[flag++] = image[i];
comress_image[flag++] = image[i + 1]; //相同的数据
number = 1;
}
else if (number != 1)
{
while (number != 0)
{
comress_image[flag++] = image[i ];
comress_image[flag++] = image[i+1];
number--;
}
number=1;
}
else
{
comress_image[flag++] = image[i];
comress_image[flag++] = image[i + 1];
}
}
}
comress_image[flag++] = image[i];
comress_image[flag++] = image[i + 1];
}
图片压缩完以后,我就在eboot里面的main函数里面进行解压的操作。
代码如下
int i,j;
unsigned short *pFB,*pPIC;
pFB = (unsigned short *)EBOOT_FRAMEBUFFER_UA_START;
pPIC= (unsigned short *)InitialImage_rgb16_1024x768;
for (i=0; i<LCD_WIDTH*LCD_HEIGHT; i++)//解压缩
{
if(*pPIC==0x5555)
{
for (j=0; j<*(pPIC+1); j++)
{
*pFB++=*(pPIC+2);
}
i=*(pPIC+1)+i-1;
pPIC=pPIC+3;
}
else
{
*pFB++ = *pPIC++;
}
}
最后发现运行正常,能够完成需求。