|

楼主 |
发表于 2018-2-19 17:11:26
|
显示全部楼层
本帖最后由 passteen 于 2018-2-19 17:13 编辑
V6开发板2.0版本的是新版吗?
我就是按照上面的方法做的。
GetAlocMem(sFilename,PicMem)函数是将文件读进动态内存的封装函数。
然后就是创建内存设备并绘制进去。
下面贴上完整代码:
static u8 GetAlocMem(const char *sFilename, GUI_HMEM acMem)
{
res_disk = f_open(&flist,sFilename,FA_READ); //读文件
if(res_disk!=FR_OK) return 0; //判断是否读成功
acMem = GUI_ALLOC_AllocZero(flist.fsize); //申请动态内存并清零
_acBuffer = GUI_ALLOC_h2p(acMem); //将申请到内存的句柄转换为指针
res_disk = f_read(&flist,_acBuffer,flist.fsize,&fnum); //将文件加载至内存
f_close(&flist); //加载完毕后关闭文件
if(res_disk!=FR_OK) return 0;
return 1;
}
GUI_MEMDEV_Handle hMEMjpg;
void _ShowJpg(const char *sFilename, int px, int py)
{
GUI_HMEM PicMem;
GUI_JPEG_INFO JpegInfo;
if(GetAlocMem(sFilename,PicMem)) //将SD卡jpg文件加载至内存
{
GUI_JPEG_GetInfo(_acBuffer,flist.fsize,&JpegInfo); //获取图片的尺寸
hMEMjpg = GUI_MEMDEV_Create(0,0,JpegInfo.XSize,JpegInfo.YSize); //创建内存设备
GUI_MEMDEV_Select(hMEMjpg); //激活(手册上说的)理解为给解码需要使用的指针赋值
GUI_JPEG_Draw(_acBuffer,flist.fsize,0,0); //绘制图像
GUI_MEMDEV_CopyToLCDAt(hMEMjpg,px,py); //显示
}
GUI_ALLOC_Free(PicMem); //释放动态内存
}
使用_CM_ARGB8888颜色显示不正常
颜色转换代码如下:
static void InvertAlpha_SwapRB(LCD_COLOR * pColorSrc, LCD_COLOR * pColorDst, uint32_t NumItems)
{
uint32_t Color;
do
{
Color = *pColorSrc++;
*pColorDst = ((Color & 0x000000FF) << 16) /* Swap red <-> blue */
| (Color & 0x0000FF00) /* Green */
| ((Color & 0x00FF0000) >> 16) /* Swap red <-> blue */
| ((Color & 0xFF000000) ^ 0xFF000000); /* Invert alpha */
pColorDst++;
} while (--NumItems);
}
static void DMA2D_Index2ColorBulk(void * pIndex, LCD_COLOR * pColor, uint32_t NumItems, U8 SizeOfIndex, uint32_t PixelFormat)
{
/* Use DMA2D for the conversion */
DMA2D_ConvertColor(pIndex, _aBuffer_DMA2D, PixelFormat, LTDC_Pixelformat_ARGB8888, NumItems);
/* Convert colors from ARGB to ABGR and invert alpha values */
InvertAlpha_SwapRB(_aBuffer_DMA2D, pColor, NumItems);
} |
|