新手请教:谁有图像旋转和缩放的代码啊?是不改变图像大小的那种

ecustman 2009-04-26 06:11:22
如题:我需要的是对图像进行旋转和缩放,但是不需要图片缩放(目前看到的代码都是改变图像大小的算法)。超出部分截去也无所谓。的!
...全文
119 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tnger 2009-04-28
  • 打赏
  • 举报
回复
旋转后只按原来图像大小显示就可以了
tlxfh 2009-04-28
  • 打赏
  • 举报
回复
BOOL RotateDIBHU(LPSTR lpDIB, float iRotateAngle)
{
CDibImage DibImage;
LPSTR lpDst;
LPSTR lpSrc;
LPSTR lpNewDIBBits;
HLOCAL hNewDIBBits;
LONG i,j;//新坐标
LONG i0,j0;//原坐标
LONG lWidth=DibImage.DIBWidth(lpDIB);
LONG lHeight=DibImage.DIBHeight(lpDIB);
LPSTR lpDIBBits=(LPSTR)DibImage.FindDIBBits(lpDIB);

LONG lLineBytes=WIDTHBYTES(lWidth*8);
hNewDIBBits=LocalAlloc(LHND,lLineBytes*lHeight);

LONG cx,cy;//图像中心坐标
cx=(lHeight+1)/2;
cy=(lHeight+1)/2;


// 将旋转角度从度转换到弧度
iRotateAngle =(float) RADIAN(iRotateAngle);;
float fSina = (float) sin((double)iRotateAngle); // 计算旋转角度的正弦
float fCosa = (float) cos((double)iRotateAngle); // 计算旋转角度的余弦

if (hNewDIBBits==NULL)
{
return FALSE;
}

lpNewDIBBits=(char*)LocalLock(hNewDIBBits);
for (i=0;i<lHeight;i++)
{
for (j=0;j<lWidth;j++)
{
lpDst=(char*)lpNewDIBBits+lLineBytes*(lHeight-1-i)+j;
i0=(LONG)(-j*fSina+i*fCosa+cx*fSina-cy*fCosa+cy);
j0=(LONG)(j*fCosa+i*fSina-cx*fCosa-cy*fSina+cx);
//判断图像是否还在原图范围内
if ((j0>=0)&&(j0<lWidth)&&(i0>=0)&&(i0<lHeight))
{
lpSrc=(char*)lpDIBBits+lLineBytes*(lHeight-1-i0)+j0;
*lpDst=*lpSrc;
}
else
{
*((unsigned char*)lpDst)=255;
}
}
}
memcpy(lpDIBBits,lpNewDIBBits,lLineBytes*lHeight);
LocalUnlock(hNewDIBBits);
LocalFree(hNewDIBBits);
return TRUE;

}

这个肯定满足你要求的。
oysoft 2009-04-27
  • 打赏
  • 举报
回复
不改变图片大小的缩放就就直接修改一下dpi就可以了啊,显示的大小就改变了

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧