MFC中SetWorldTransform函数中XFORM结构体的使用

CImage通过WinApi的SetWorldTransform来实现图片旋转 SetWorldTransform的功能是旋转画布,这样产生的效果就是图像旋转。因此,在旋转画布之前,要把要旋转的图像的位置和大小准备好,这样旋转之后,才能使图像正好出现在显示区域内。这需要计算两个关键参数,图像的左上角坐标和旋转中心坐标。因为是固定大小旋转,因此我们将中心设定在图像的显示中心。这样需要计算选中图像的高和宽。 阅读详情
使用XFORM来控制DC时,需要先设置绘图模式SetGraphicsMode为GM_ADVANCED,再用SetWorldTransform。
否则SetWorldTransform函数会失败
映射后的坐标与映射前的坐标关系为
x' = x * eM11 + y * eM21 + eDx, 
y' = x * eM12 + y * eM22 + eDy, 

若要设置缩放比例,则只需设置eM11和eM22为相应的比例,其余设置为0即可;
若要设置一个逆时针旋转了@度的坐标系映射,则eM11为cos(@), eM12为-sin(@), eM21 为 sin(@), eM22为cos(@)
若要使坐标系平移(a,b),则eDx=a, eDy = b。

若要设置一个缩放比例为0.5,逆时针旋转30度,平移(20,50)的坐标系,则eM11 = 0.5 * cos(30) = 0.4330, eM12 = 0.5 * [- sin( 30 )] = -0.25, eM21 = 0.5 * sin ( 30 ) = 0.25, eM22 = 0.5 * cos( 30 ) = 0.4330, eDx = 20, eDy = 50

注:以上关系只在不改变和原屏幕坐标一样的XY轴关系(X轴正方向为Y轴正方向逆时针旋转90度)的情况下成立。
MFC SetWorldTransform()旋转图片90度只有半张图 今天接到一个把图片旋转90、180、270度的任务,在MSDN搜索一下,找到许多参考例程,代码也简单,很快就把代码写好了。把图片保存到硬盘,发现旋转90度的图片只有半张图! 阅读详情

相关推荐

使用Windows API SetWorldTransForm()对图片进行旋转

1.问题描述 很多朋友可能都会遇到图片旋转的相关编程,一般的图像处理的书里面都会用一个自己写的函数对一个大的数组进行操作来解决旋转问题,这些函数往往还需要很多输入参数,如图片的大小,位的深度之类的,为了处理多种格式的图片我们往往需要重复编写代码,这样非常麻烦。 2.SetWorldTransForm函数 其实Windows 本身就提供了一个API函数SetWorldTransForm来解决图

Cashey1991的专栏 8329

(转)MFC中SetWorldTransform函数中XFORM结构体的使用

SetGraphicsMode   函数功能:该函数为指定的设备环境设置图形模式。   函数原型:int SetGraphicsMode(HDC hdc, int iMode);   参数:   hdc:指向设备环境的句柄。   iMode:指定图形模式,该参数可为下列值之一:   GM_COMPAIBLE:设置与16位Windows相兼容的图形模式,这是缺省的模式。如果指定此值,

gxj1680的专栏 3097

MFC学习笔记之坐标系

Windows API主要使用四种坐标控件

u011143481的专栏 1408

MFC图片旋转

旋转函数 //hBitmap:要旋转位图的句柄 //radians : 旋转的角度(弧度) //clrBack :旋转时的背景颜色 //旋转图片函数 HBITMAP GetRotatedBitmap(HBITMAP hBitmap, float radians, COLORREF clrBack) { // Create a memory DC compatible with the display CDC sourceDC, destDC; sourceDC.CreateCompatible

GULINGSHI的博客 1967

VC++实现坐标系建立与图形转换详解

坐标系是用于描述图形对象位置的数学系统。在图形编程中,主要涉及两种坐标系:坐标系类型描述世界坐标系(World Coordinate)逻辑坐标系统,用于描述图形对象在虚拟空间中的位置,独立于设备设备坐标系(Device Coordinate)物理坐标系统,基于屏幕或打印设备的实际像素点,通常原点在左上角建立一个完整的坐标系统是图形绘制的基础。它包括设备上下文的初始化、窗口与视口的设置,以及映射模式与比例的配置。以下是一个典型的坐标系统建立流程图:graph TD。

weixin_42581846的博客 979

使用SetWorldTransform()旋转任意角度的基本形状

如何使用SetWorldTransform()绘制旋转任意角度的基本形状

MFC下图形任意角度旋转.

<br /><br />图形的旋转公式:<br />x1   =   (x - xcenter) *  cosθ - (y - ycenter)  * sinθ + xcenter; <br />y1   =   (x - xcenter) *  sinθ +  (y- ycenter)  * cosθ + ycenter; <br /> <br />x, y:为原先点的坐标位置。<br />x1, y1旋转后点的坐标位置。<br />Xcenter, ycenter:为所绕的中心点的坐标<br /> 

Mur. 1万+

MFC计算机图形学基本变换(平移、错切、对称、旋转、比例)

通过MFC实现计算机图形学中几个二维变换,不过都是写死的,不过可以当作案例启发哈。

利用MFC旋转BMP格式图片

最近工作中利用MFC实现图片旋转的任务,找遍了也没有一个合适的完整的解决方案,当然也是因为有的代码也确实因为自己看不懂,最终自己也是看了好多代码后,将代码融合了一下,最终能够满足自己的使用要求。 //旋转图片函数 HBITMAP GetRotatedBitmap(HBITMAP hBitmap, float radians, COLORREF clrBack) { // Create a mem...

weixin_43165699的博客 1327

数控弯管机xyz转换ybc的算法_花了一年时间开发的三维弯管机交互式转档软件(三维管子模型UG,SOLIDWORK,PRO/E文件转成YBC)...

在弯管机加工中,由管子模型生成可直接进行弯管加工的YBC数据可以大大提高弯管编程过程.传统的做法是先用dxf数据文件(用autocad绘制管子的轴心线数据)转出XYZ数据,然后由XYZ数据转成YBC数据,而且大部分厂家对文件版本以及软件做管方式都有不少限制,这大大花费了用户的时间跟精力.随着企业的信息化管理以及不断的技术升级,传统用autocad线条模式来描述管子的方式正在被用户用PRO/E,UG...

weixin_29065959的博客 1961

CANoe LIN一致性测试之干扰测试Test moudle_LIN Disturbance Block

注意:相邻两个显隐性不同的bit不允许干扰,例如我同时选择bit6和bit7,相邻两个同显隐性的bit允许干扰,例如当我选择bit3和bit4,项,这里我选择ID:为0x2F(PID:0x6F)的frame。需按照具体测试规范实施干扰项,帧头和数据段都可以实现干扰。最近发现一个干扰测试模块,下面是一些具体使用方法。选择干扰项:PID的奇偶校验位(一致性测试干扰测试之手动测试。一个待测试frameD。

yuanyikangkang的博客 3410

MFC上如何绘制一个可以旋转的椭圆

问题描述:windows下,GDI可以调用Ellipse直接绘制一个水平或垂直方向的椭圆,但是无法按照一定的角度自由旋转。 解决方法: 1. 使用世界坐标系。通过旋转世界坐标系,达到旋转椭圆的目的。需要使用到SetWorldTransform等一系列的函数。 关于这些函数的使用方法参见如下资料: http://msdn.microsoft.com/en-us/library/win

liuyunhuanying的专栏 3942

IsaacLab从入门到精通(二) 导入自定义机器人

IsaacLab系列第二讲,导入自定义的机器人及设置

DejaWu33的博客 8466

简单实用图片任意旋转

const double PI = 3.1415925;const int widthOfPic = 502;const int heightOfPic = 374;void CView::OnDraw(CDC* pDC){ CDCDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);  CBitmap bmSrc; bmSrc.LoadBitma

郭家佑VC/C++/C 1100

奇迹mu服务端DATA文件解析:从基础配置到高级玩法

本文深入解析奇迹MU服务端DATA文件的核心配置与高级玩法,涵盖基础设置、怪物AI系统、技能战斗机制、副本事件管理及物品商城定制。通过详细示例和实用技巧,帮助开发者掌握从经验倍率调整到动态事件触发的全方位配置方法,实现个性化的私服搭建与运营。

weixin_29254673的博客 530

当AI学会写“自传”:OpenClaw 的 SOUL.md 如何把配置文件变成一颗会变形的心

SOUL.md。

步子哥的博客 1309

Windows API 函数

《Windows API函数手册》摘要 本文档是Windows平台开发的权威参考手册,全面收录774个核心API函数,涵盖系统管理、进程线程、窗口消息、文件操作、图形处理等12大功能模块。手册采用结构化编排,主要特点包括: 编码规范 详细区分多字节(char)与宽字符(wchar_t)编码体系 提供LPSTR/LPCWSTR等字符串指针类型的完整解析 说明UTF-8与GBK编码转换的实际应用场景 核心功能模块 窗口创建:完整展示从注册类到消息循环的窗口生命周期 文件操作:覆盖CreateFile/ReadF

gqk01的博客 862

点云语义分割:使用Cylinder3D训练SemanticKITTI数据集

将该路径修改到config/semanticktti.yaml文件中的data_path节点下。下载semanticKITTI数据集的点云数据和标签,解压到一起。系统:Ubuntu18。

zhaoguanhua的博客 2596

VC++图形坐标转换实战:从数学原理到GDI/GDI+实现

图形坐标转换是计算机图形学和工业软件开发的基石,它基于线性代数中的矩阵运算原理,通过平移、旋转、缩放和错切等基本操作,实现对二维或三维空间中物体的精确控制。这项技术的核心价值在于,它能够将抽象的数学概念转化为可视化的图形操作,为CAD、游戏引擎、地图应用和科学可视化等领域提供底层支持。在Windows平台下,VC++凭借其原生性能和对GDI/GDI+图形接口的深度控制,成为实现高效坐标转换的硬核选择。例如,在工业仿真或需要处理类似“odom坐标系”转换的场景中,VC++能确保实时性和计算精度。本文通过一个交

anjueci1221的博客 311

45、概率与模糊性:粗糙事件与模糊事件概率的探索

本文探讨了概率理论与模糊性理论在处理现实世界不确定性中的应用,重点分析了模糊事件和粗糙事件的概率定义、性质及其条件概率。同时,介绍了近似贝叶斯网络分类器在信息系统中的应用,以及如何通过概率决策约简提高分类效率。这些方法为处理不确定信息提供了灵活的工具,并在决策和数据分析中具有重要价值。

ik67890123的博客 133

PCL点云库入门(第1讲)——PCL库简介和安装(Win10/11+VS2019+PCL 1.12.0)

PCL,全称为,即点云库,是一个专注于2D/3D图像和点云处理的大型开源项目。该项目最初由斯坦福大学的杰出计算机视觉专家Radu博士及其团队开发和维护,经过十余年的发展,目前(2024年12月)已更新至1.14.1版本。PCL点云库集成了众多尖端的点云处理算法,这些算法不仅包括基础的滤波、特征估计、表面重建、配准、模型拟合和分割等,还涵盖了更高级的功能,如点云数据的语义理解、场景解析以及动态环境下的实时处理。这些算法能够对含有噪声的点云数据进行有效过滤,去除异常值;

qq_36812406的博客 1万+

MFC-VIEW 缩放 平移

public: CPoint pt1; CPoint pt0; int sc; CTestDxfView::CTestDxfView() { // TODO: add construction code here sc = 1; } void CTestDxfView::OnDraw(CDC* pDC) { CTestDxfDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: ad...

956

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: 用点乘求点到线段的距离
下一篇: VISTA注册ActiveX控件出现 0x80040200的处理方法
loongee
博客等级 码龄20年 23粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值