BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #73150同步于 2013/8/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[问题]MFC中关于图像旋转的问题

Elky
2013/8/10镜像同步6 回复
我想通过像素点到像素点复制的方法实现图像逆时针旋转90度的功能。我的思路是这样的:通过对新图像每行每列的操作——指针指向新图像上某行某列的一个像素点,然后寻找这一像素点在源图像上该对应像素点的坐标,用一指针指向源图像上该点,将该点内容赋给新图像上的点,循环实现所有点的操作,最后实现旋转。 部分代码如下: // 针对新图像每行进行操作 for(i = 0; i < lNewHeight; i++) { //针对新图像每列进行操作 for(j = 0; j < lNewWidth; j++) { // 指向新DIB第i行,第j个象素的指针 // 注意此处宽度和高度是新DIB的宽度和高度 lpDst = (char *)lpNewDIBBits + lNewLineBytes *i + j; //lpNewDIBBits是指向数据段起始地址的指针,lNewLineBytes是每行的字节数 // 计算该象素在源DIB中的坐标(由于是逆时针旋转90度,新图像的高是源图像的宽,新图像的宽是源图像的高,我直接计算了对应坐标的公式) i0 =j ; j0 = lWidth - 1 -i ; // 判断是否在源图范围内 if( (j0 >= 0) && (j0 < lWidth) && (i0 >= 0)&& (i0 < lHeight)) { // 指向源DIB第i0行,第j0个象素的指针 lpSrc = (char *)lpDIBBits + lLineBytes * i0 + j0; // 复制象素 *lpDst = *lpSrc; } 然而最终显示的图像是一张乱七八糟的图。我认为可能是计算新图像坐标与源图像对应坐标的公式出了问题,但是我自己想不出来是什么原因出错,因为我用了很多像素点来试觉得可以。我水平有限,特来请教各位高手,多谢多谢。
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
hangtj机器人#1 · 2013/8/10
图片信息不单单是像素数据而已的,不同格式的相片有不同的图片存储格式,你可以去谷歌一下相关信息。出发你得到的图片信息只有像素数据可以用你这种方法转。
colorest机器人#2 · 2013/8/13
又重新弄个轮子,用opencv多好
tonyjansan机器人#3 · 2013/8/13
太臃肿~球减负~ 【 在 colorest 的大作中提到: 】 : 又重新弄个轮子,用opencv多好
Elky机器人#4 · 2013/8/20
【 在 hangtj 的大作中提到: 】 : 图片信息不单单是像素数据而已的,不同格式的相片有不同的图片存储格式,你可以去谷歌一下相关信息。出发你得到的图片信息只有像素数据可以用你这种方法转。 认真查了查,想了想,改了一些代码,最后可以实现了,多谢多谢!
Elky机器人#5 · 2013/8/20
【 在 colorest 的大作中提到: 】 : 又重新弄个轮子,用opencv多好 用opencv的确很方便,但我是为了给一个很老的程序做功能扩展,如果用opencv跟原程序有很多冲突。所以就想尝试自己写一下,查了一些资料,虽然花了更多时间,但都学到了不少东西。
qiukun机器人#6 · 2013/8/21
如果表达成置换更为通用?实现各种奇怪的功能? 【 在 Elky 的大作中提到: 】 : 用opencv的确很方便,但我是为了给一个很老的程序做功能扩展,如果用opencv跟原程序有很多冲突。所以就想尝试自己写一下,查了一些资料,虽然花了更多时间,但都学到了不少东西。