当前位置: 代码迷 >> 单片机 >> UCGUI的MEMDEV,该怎么解决
  详细解决方案

UCGUI的MEMDEV,该怎么解决

热度:67   发布时间:2016-04-28 15:31:56.0
UCGUI的MEMDEV
本帖最后由 yangtseriver1020 于 2010-07-28 15:54:37 编辑
MEMDEV的数据结构式怎样的啊?我下面这段程序能得到一个MEMDEV的一个具体坐标的颜色值吗?
/*********************************************************************
*
*       _XY2PTR
*/
static PIXELINDEX * _XY2PTR(int x, int y) {
  GUI_MEMDEV* pDev = GUI_MEMDEV_H2P(GUI_Context.hDevData);
  U8 *pData = (U8*)(pDev + 1);
  #if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
    if ((x >= pDev->x0+pDev->XSize) | (x<pDev->x0) | (y >= pDev->y0+pDev->YSize) | (y<pDev->y0)) {
      GUI_DEBUG_ERROROUT2("_XY2PTR: parameters out of bounds",x,y);
    }
  #endif
  pData += (GUI_ALLOC_DATATYPE_U)(y - pDev->y0) * (GUI_ALLOC_DATATYPE_U)pDev->BytesPerLine;
  return ((PIXELINDEX*)pData) + x - pDev->x0;
}/////这个是系统的原函数我写了一个函数,调用这个函数。见下面

/*********************************************************************
**/
static PIXELINDEX * XY2PTRXiaoYang(int x, int y,GUI_MEMDEV_Handle pp) 
{  
  GUI_MEMDEV* pDev = GUI_MEMDEV_H2P(pp);
  U8 *pData = (U8*)(pDev + 1);
  #if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
    if ((x >= pDev->x0+pDev->XSize) | (x<pDev->x0) | (y >= pDev->y0+pDev->YSize) | (y<pDev->y0)) {
      GUI_DEBUG_ERROROUT2("_XY2PTR: parameters out of bounds",x,y);
    }
  #endif
  pData += (GUI_ALLOC_DATATYPE_U)(y - pDev->y0) * (GUI_ALLOC_DATATYPE_U)pDev->BytesPerLine;
  return ((PIXELINDEX*)pData) + x - pDev->x0;
}///我添加的一个函数,调用的上面的函数,此函数被后面调用

/*********************************************************************
*
*       _GetPixelIndex
*/
static unsigned int _GetPixelIndex(int x, int y) {
  PIXELINDEX* pData = _XY2PTR(x, y);
  return *pData;
}////系统的原函数,我也做了修改/*********************************************************************
**/
 static unsigned int GetPixelIndexXiaoYang(int x, int y,GUI_MEMDEV_Handle pp) {
XY2PTRXiaoYang(x,y,pp);
  return * XY2PTRXiaoYang(x,y,pp);;
}

/*我最后要使用的外部函数,*/我的想法是这个函数的功能是对于两个同样大小的存储器的其中一张图片实现透明。
extern unsigned int GetAlpha();
void XiaoYangAddNew8(GUI_MEMDEV_Handle PDe,GUI_MEMDEV_Handle SRc,int x0,int y0,int xsize,int ysize)
{
GUI_COLOR color1,color2;
int i=x0,j=y0;
int Alpha = GetAlpha();
for(;j<ysize+y0;j++)
for(;i<xsize+x0;i++)
{
color1=GetPixelIndexXiaoYang(i,j,PDe);
// if(color1!=0)
// {
color2=GetPixelIndexXiaoYang(i,j,SRc);
color2 = LCD_MixColors256(color1, color2, Alpha);
_SetPixelIndex(i,j,LCD_Color2Index(color2));
// }
}
// GUI_DEBUG_ERROROUT2("bounds",10,20);