源码:
int imcover(unsigned char *imagebase,unsigned char *imageconer,int sizebase[2],int size[2],float alpha,int position); //输入靓图图像,imagebase必须大于imageconer //alpha为透明度,0-1之间,1为完全透明,相当于无叠加效果 //position为位置,1左上角,2右上角,3右下角,4左下角
效果展示:
转为灰度图,缩小,之后叠加在左上角
工程读取图像,转灰度图,缩放等见我的其它工程,
叠加部分的源码如下
int imcover(unsigned char *imagebase,unsigned char *imageconer,int sizebase[2],int size[2],float alpha,int position) { int i,j; if(position == 4) goto LeftLow; else if(position == 3) goto RightLow; else if(position == 2) goto RightHigh; else { for( i = 0; i < size[1]; i++) { for(j = 0; j < size[0]; j++) { *(imagebase + ( i + sizebase[1] - size[1] ) * sizebase[0] + j) = (alpha) * ( *(imagebase + ( i + sizebase[1] - size[1] ) * sizebase[0] + j) ) + (1-alpha) * ( *(imageconer + i * size[0] + j) ); } }return 0; } RightHigh: for( i = 0; i < size[1]; i++) { for(j = 0; j < size[0]; j++) { *(imagebase + ( i + sizebase[1] - size[1] ) * sizebase[0] + (j + sizebase[0] - size[0]) ) = (alpha) * ( *(imagebase + ( i + sizebase[1] - size[1] ) * sizebase[0] + (j + sizebase[0] - size[0]) ) ) + (1-alpha) * ( *(imageconer + i * size[0] + j) ); } }return 0; LeftLow: for( i = 0; i < size[1]; i++) { for(j = 0; j < size[0]; j++) { *(imagebase + i * sizebase[0] + j) = (alpha) * ( *(imagebase + i * sizebase[0] + j) ) + (1-alpha) * ( *(imageconer + i * size[0] + j) ); } }return 0; RightLow: for( i = 0; i < size[1]; i++) { for(j = 0; j < size[0]; j++) { *(imagebase + i * sizebase[0] + (j + sizebase[0] - size[0]) ) = (alpha) * ( *(imagebase + i * sizebase[0] + (j + sizebase[0] - size[0]) ) ) + (1-alpha) * ( *(imageconer + i * size[0] + j) ); } }return 0; }