// 中间变量
int v_r_v, v_g_v, v_b_v, g_v;
int v_r_h, v_g_h, v_b_h, g_h;
// 复制图象数据到中间缓存
for (i = 0; i < lLineBytes * lHeight; i++)
m_temp[i] = *(lpDIBBits + i);
// 2X2 模版
for (i = 0; i < lWidth; i++) //被处理像素在i列
{
for (j = 0; j < lHeight; j++) //被处理像素在j行
{
v_r_v = v_g_v = v_b_v = v_r_h = v_g_h = v_b_h = 0;
for (k = i - 1; k < i + 1; k++) //2*2模版
{
for (l = j - 1; l < j + 1; l++)
{
// 防止内存溢出
if (k >= 0 && l >= 0 && k < lWidth && l < lHeight)
{
// 检测模版
if (k == i - 1 && l == j - 1)
g_v = 1;
else if (k == i && l == j)
g_v = -1;
else
g_v = 0;
if(k == i - 1 && l == j)
g_h = -1;
else if (k == i && l == j - 1)
g_h = 1;
else
g_h = 0;
v_r_v += *(lpDIBBits + l * lLineBytes + k * 3) * g_v;
v_r_h += *(lpDIBBits + l * lLineBytes + k * 3) * g_h;
v_g_v += *(lpDIBBits + l * lLineBytes + k * 3 + 1) * g_v;
v_g_h += *(lpDIBBits + l * lLineBytes + k * 3 + 1) * g_h;
v_b_v += *(lpDIBBits + l * lLineBytes + k * 3 + 2) * g_v;
v_b_h += *(lpDIBBits + l * lLineBytes + k * 3 + 2) * g_h;
}
}
}
m_temp[j * lLineBytes + i * 3] = (int)sqrt(v_r_v * v_r_v + v_r_h * v_r_h);
m_temp[j * lLineBytes + i * 3 + 1] = (int)sqrt(v_g_v * v_g_v + v_g_h * v_g_h);
m_temp[j * lLineBytes + i * 3 + 2] = (int)sqrt(v_b_v * v_b_v + v_b_h * v_b_h);
}
}