图形加速软件实现(bitblt软实现)


一、概念及本质
嵌入式下图形加速的概念,详见http://blog.csdn.net/jianchenglee/article/details/12621347
1)其中重要的一步操作就是bitblit:拷贝源图形中的某一块图形区域到目标图形的某一块图形区域(其中可能涉及到拉伸、混合等操作)。
其执行的操作如图所示:
图形加速软件实现(bitblt软实现)_第1张图片
2)本质就是内存的二维操作,由于普通内存都是一维,进行二维操作(涉及到宽度的概念)操作稍显复杂,且效率不高。大部分嵌入式
都提供图形加速引擎(用硬件来加速此块操作)。


二、bitblt的软件实现源码(不支持混合,拉伸等操作)
由于部分嵌入式环境的特殊性可能需要bitblt的软件实现,不支持混合、拉伸等就是通过循环计算偏移进行的内存拷贝
源码:

typedef struct rect_bitblt{  //ljc for bitblt_soft
INT32 nX;   //矩形框的X坐标
INT32 nY;   //矩形框的Y坐标
INT32 nWidth;  //矩形框的宽
INT32 nHeight;  //矩形框的高
}rect_bitblt_t;


参数说明:
rect_src_mother:源图形
rect_dst_mother:目标图形
rect_src_son:源图形中待拷贝的图形区域
rect_dst_son:目标图形中待写入的图形区域
pMemory_src_mother:源图形对应的内存
pMemory_dst_mother:目标图形对应的内存
nbpp:单个像素占用的内存字节数
BOOL  bitblt_soft(rect_bitblt_t rect_src_mother,rect_bitblt_t rect_dst_mother,rect_bitblt_t rect_src_son,rect_bitblt_t rect_dst_son,
void * pMemory_src_mother,void * pMemory_dst_mother,INT32 nbpp) //ljc bitblt(soft version),2d space memcpy,tmp no strech
{
int i;
char *pMemory_dst_mother_tmp=(char *)pMemory_dst_mother;
char *pMemory_src_mother_tmp=(char *)pMemory_src_mother;
if(rect_src_son.nWidth!=rect_dst_son.nWidth || rect_src_son.nHeight!=rect_dst_son.nHeight)//ljc temp no strech
return FALSE;
for(i=0;i<rect_src_son.nHeight;i++)
{
memcpy(pMemory_dst_mother_tmp+(rect_dst_son.nY+i)*rect_dst_mother.nWidth*nbpp+rect_dst_son.nX*nbpp,
pMemory_src_mother_tmp+(rect_src_son.nY+i)*rect_src_mother.nWidth*nbpp+rect_src_son.nX*nbpp,
rect_src_son.nWidth*nbpp);
}
return TRUE;
}

你可能感兴趣的:(BitBlt,内存二维操作,图形加速)