h, unsigned int size)
{
BYTE** imageBuf0 = CreatImage(pixel, w, h);
BYTE** imageBuf1 = CreatImage(tempPixel, w, h);
int x = 0,y = 0; //马赛克方格的左上角坐标
int tx = 0,ty = 0; //马赛克方格的右下角坐标
int i, j;
while(true)
{
if(tx == w) //如果已经处理完一行
{
if(ty == h) break;
//确定马赛克方格的上方边界
y = ty;
//确定马赛克方格的下方边界
if(y + size <= h)
ty = y + size;
else
ty = h;
//把方格位置移动到下一行首部
x = 0;
}
//确定马赛克方格的左边边界
if(x + size <= w)
tx = x + size;
else
tx = w;
for(i = y;i < ty; i++)
for(j = x; j<tx; j++)
{
//把马赛克方格填充为中点的象素
imageBuf1[i][j*4] = imageBuf0[(y+ty) / 2][(x+tx)/2*4];
imageBuf1[i][j*4 + 1] = imageBuf0[(y+ty) / 2][(x+tx)/2*4 + 1];
imageBuf1[i][j*4 + 2] = imageBuf0[(y+ty) / 2][(x+tx)/2*4 + 2];
imageBuf1[i][j*4 + 3] = imageBuf0[(y+ty) / 2][(x+tx)/2*4 + 3];
}
//水平移动到下一个马赛克方格
x = tx;
}
free(imageBuf0);
free(imageBuf1);
}
/************************************************
* 模板的卷积运算
************************************************/
int TempltExcute(BYTE** imageBuf0, int w, int h, int* templt, int tw, int x, int y)
{
int i,j;
int m=0,px,py;
//分别对模板上每个位置进行计算
for(i=0; i<tw; i++)
for(j=0; j<tw; j++)
{
//计算像素在原图像上的位置
py=y-tw/2+i;
px=x-tw/2+j;
//将每个像素的灰度乘以权值再相加
m+=GetAsh(imageBuf0,px,py) * templt[i*tw+j];
}
return m;
}
/************************************************
* 用a表示的灰度填充指定像素
************************************************/
void SetPixel2(BYTE** imageBuf1, int x, in
上一篇:
FilmMoveViewView.cpp
下一篇:
美术教学中网络信息论文