数字图像处理旋转C语言思路,数字图像处理 几何变换(平移、水平镜像、垂直镜像、缩放、旋转)实现思路...

// dd为新的图像指针,sd为旧的图像指针

// 水平镜像

BOOL LImageProc::FlipH()

{

if (!ImageIsValid()) return FALSE;

m_pDestImg->Create(m_pSrcImg->m_Width, m_pSrcImg->m_Height);

BYTE *sd = m_pSrcImg->m_pBits;

BYTE *dd = m_pDestImg->m_pBits;

for (int i = 0; i < m_pDestImg->m_Height; i++)

{

for (int j = 0; j < m_pDestImg->m_Width * 3; j += 3)

{

for (int k = 0; k < 3; k++)

{

dd[i*m_pDestImg->m_WidthBytes + j + k] = sd[i*m_pDestImg->m_WidthBytes + m_pDestImg->m_WidthBytes - j + k - 3];

}

}

}

return TRUE;

}

// 垂直镜像

BOOL LImageProc::FlipV()

{

if (!ImageIsValid()) return FALSE;

m_pDestImg->Create(m_pSrcImg->m_Width, m_pSrcImg->m_Height);

BYTE *sd = m_pSrcImg->m_pBits;

BYTE *dd = m_pDestImg->m_pBits;

for (int i = 0; i < m_pDestImg->m_Height; i++)

{

for (int j = 0; j < m_pDestImg->m_Width * 3; j += 3)

{

dd[i*m_pDestImg->m_WidthBytes + j] = sd[(m_pDestImg->m_Height - i - 1)*m_pDestImg->m_WidthBytes + j];

dd[i*m_pDestImg->m_WidthBytes + j + 1] = sd[(m_pDestImg->m_Height - i - 1)*m_pDestImg->m_WidthBytes + j + 1];

dd[i*m_pDestImg->m_WidthBytes + j + 2] = sd[(m_pDestImg->m_Height - i - 1)*m_pDestImg->m_WidthBytes + j + 2];

}

}

return TRUE;

}

// 缩放

BOOL LImageProc::Stretch(float aW, float aH)

{

if (!ImageIsValid()) return FALSE;

m_pDestImg->Create((int)m_pSrcImg->m_Width*aW, (int)m_pSrcImg->m_Height*aH);

BYTE *sd = m_pSrcImg->m_pBits;

BYTE *dd = m_pDestImg->m_pBits;

int newX = 1;

int newY = 1;

for (int i = 0; i < m_pDestImg->m_Height; i++)

{

for (int j = 0; j < m_pDestImg->m_Width * 3; j += 3)

{

newX = (int)(j / aW);

newY = (int)(i / aH);

dd[i*m_pDestImg->m_WidthBytes + j] = sd[newY*m_pSrcImg->m_WidthBytes + newX];

dd[i*m_pDestImg->m_WidthBytes + j + 1] = sd[newY*m_pSrcImg->m_WidthBytes + newX + 1];

dd[i*m_pDestImg->m_WidthBytes + j + 2] = sd[newY*m_pSrcImg->m_WidthBytes + newX + 2];

}

}

}

// 平移

BOOL LImageProc::Translate(int Hori, int Vert)

{

if (Hori > m_pSrcImg->m_Width || Vert > m_pSrcImg->m_Height)

{

AfxMessageBox("图像平移不能超过原始长度:", MB_OK, 0);

return FALSE;

}

if (!ImageIsValid()) return FALSE;

m_pDestImg->Create((int)m_pSrcImg->m_Width, (int)m_pSrcImg->m_Height);

BYTE *sd = m_pSrcImg->m_pBits;

BYTE *dd = m_pDestImg->m_pBits;

int x, y;

for (y = 0; y < m_pDestImg->m_Height; y++)

{

if (((y < Vert) && (Vert >= 0)) || ((y >= (m_pDestImg->m_Height + Vert)) && (Vert < 0)))

{

for (x = 0; x < m_pDestImg->m_Width * 3; x += 3)

{

dd[y*m_pDestImg->m_WidthBytes + x] = 255;

dd[y*m_pDestImg->m_WidthBytes + x + 1] = 255;

dd[y*m_pDestImg->m_WidthBytes + x + 2] = 255;

}

}

else if (((y >= Vert) && (Vert >= 0)) || ((y < (m_pDestImg->m_Height + Vert)) && (Vert < 0)))

{

for (x = 0; x < m_pDestImg->m_Width * 3; x += 3)

{

// 右移

if (Hori >= 0) {

if (x < 3 * Hori)

{

dd[y*m_pDestImg->m_WidthBytes + x] = 255;

dd[y*m_pDestImg->m_WidthBytes + x + 1] = 255;

dd[y*m_pDestImg->m_WidthBytes + x + 2] = 255;

}

else if (x >= 3 * Hori)

{

dd[y*m_pDestImg->m_WidthBytes + x] = sd[(y - Vert)*m_pDestImg->m_WidthBytes + x - Hori * 3];

dd[y*m_pDestImg->m_WidthBytes + x + 1] = sd[(y - Vert)*m_pDestImg->m_WidthBytes + x - Hori * 3 + 1];

dd[y*m_pDestImg->m_WidthBytes + x + 2] = sd[(y - Vert)*m_pDestImg->m_WidthBytes + x - Hori * 3 + 2];

}

}

// 左移动

else {

if (x >= (m_pDestImg->m_WidthBytes + 3 * Hori))

{

dd[y*m_pDestImg->m_WidthBytes + x] = 255;

dd[y*m_pDestImg->m_WidthBytes + x + 1] = 255;

dd[y*m_pDestImg->m_WidthBytes + x + 2] = 255;

}

else

{

dd[y*m_pDestImg->m_WidthBytes + x] = sd[(y - Vert)*m_pDestImg->m_WidthBytes + x - Hori * 3];

dd[y*m_pDestImg->m_WidthBytes + x + 1] = sd[(y - Vert)*m_pDestImg->m_WidthBytes + x - Hori * 3 + 1];

dd[y*m_pDestImg->m_WidthBytes + x + 2] = sd[(y - Vert)*m_pDestImg->m_WidthBytes + x - Hori * 3 + 2];

}

}

}

}

}

return TRUE;

}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值