MFC中关于图像旋转的问题 15
我想通过像素点到像素点复制的方法实现图像逆时针旋转90度的功能。我的思路是这样的:通过对新图像每行每列的操作——指针指向新图像上某行某列的一个像素点,然后寻找这一像素点在...
我想通过像素点到像素点复制的方法实现图像逆时针旋转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; }然而最终显示的图像是一张乱七八糟的图。我认为可能是计算新图像坐标与源图像对应坐标的公式出了问题,但是我自己想不出来是什么原因出错,因为我用了很多像素点来试觉得可以。我水平有限,特来请教各位高手,多谢多谢。
展开
2个回答
展开全部
你好,请参考我的博客,里面有个时钟程序,就是用到了360°旋转画法,用来画时钟的:时针、分针和秒针。建议采用PNG图像,而不是BMP图像。这样图像比较小,也支持alpha变换。
有不明白的,请再追问。
http://blog.csdn.net/renstarone/article/details/9089835
有不明白的,请再追问。
http://blog.csdn.net/renstarone/article/details/9089835
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询