- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
图片旋转任意角度【荐】.doc
MFC中BMP图片旋转任意角度、用于绘制模拟时钟表针filepath为图片路径,angle为旋转角度。旋转以pCenter为中心进行旋转,并且pCenter将位于图片中心
用于绘制模拟时钟表针
void CXXXXX::DrawBmp(CDC *pDC, CString filepath, double angle)
{
?
double SrcWidth = 0;//图片宽度
double SrcHeight = 0;//图片高度
?
CFile ? file; ? ? ? ? ? ? ? ?//用于读取BMP文件?
BITMAPFILEHEADER ? bfhHeader;//bmp文件头?
BITMAPINFOHEADER ? bmiHeader; ? //bmp格式头 ??
?
LPBITMAPINFO ? lpBitmapInfo; ? ? ? ? //bmp格式具体信息?
?
if(!file.Open(filepath,CFile::modeRead))?
return; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //打开文件?
file.Read(bfhHeader,sizeof(BITMAPFILEHEADER));//读取文件头?
if(bfhHeader.bfType!=0x4d42) ? ? ? ? ? ? ? ? ? ? //判断是否是BM?
return;?
if(bfhHeader.bfSize!=file.GetLength())?
return;?
?
if(file.Read((LPSTR)bmiHeader,sizeof(bmiHeader)) != sizeof(bmiHeader))?
return;
?
SrcHeight ? = ? bmiHeader.biHeight; //得到高度和宽度?
SrcWidth ? ?= ? bmiHeader.biWidth;?
file.SeekToBegin();?
file.Read(bfhHeader,sizeof(BITMAPFILEHEADER)); ??
UINT ? uBmpInfoLen=(UINT) ? bfhHeader.bfOffBits-sizeof(BITMAPFILEHEADER);?
lpBitmapInfo=(LPBITMAPINFO) ? new ? BYTE[uBmpInfoLen];?
file.Read((LPVOID) ? lpBitmapInfo,uBmpInfoLen);?
if((* ? (LPDWORD)(lpBitmapInfo))!=sizeof(BITMAPINFOHEADER))?
return;?
DWORD ? dwBitlen=bfhHeader.bfSize ? - ? bfhHeader.bfOffBits;?
LPVOID ? lpSrcBits=new ? BYTE[dwBitlen]; //将数据读入lpSrcBits数组?
file.Read(lpSrcBits,dwBitlen);?
file.Close(); //关闭文件?
?
?
CDC bmpDC;
bmpDC.CreateCompatibleDC(pDC);
CBitmap bmp;
bmp.CreateCompatibleBitmap(pDC,SrcWidth,SrcHeight);
bmpDC.SelectObject(bmp);
?
StretchDIBits(bmpDC.m_hDC,0,0,SrcWidth,SrcHeight,0,0,bmiHeader.biWidth,bmiHeader.biHeight,lpSrcBits,lpBitmapInfo,DIB_RGB_COLORS,MERGECOPY);?
//StretchDIBits不能去掉。将图片贴到bmpDC中
?
?
double x1,x2,x3;?
double y1,y2,y3;?
double maxWidth,maxHeight,minWidth,minHeight;?
double srcX,srcY;?
double sinA,cosA;?
double DstWidth;?
double DstHeight;?
?
angle=angle/ 180.0 * 3
sinA = sin(angle);?
cosA = cos(angle);?
?
x1 = SrcWidth * cosA;
y1 = SrcWidth * sinA;
x2 = SrcWidth * cosA - SrcHeight * sinA;
y2 = SrcW
文档评论(0)