源码1
/*
Function:
把逻辑位置转换为最终的物理坐标空间中的位置
Parameter:
hDC---待转换逻辑坐标所处的空间
lpPoint---待转换的逻辑点转换前为逻辑点,转换后为取整后的毫米
nCount----待转换点的个数
RetValue:
TRUE or FALSE
History:
2003-10-25 11:13
*/
void GetPhysicalPosition(HDC hDC,LPPOINT lpPoint ,int nCount)
{
POINT originPoint;
int widthmm=GetDeviceCaps(hDC,HORZSIZE);
int heightmm=GetDeviceCaps(hDC,VERTSIZE);
int widthres=GetDeviceCaps(hDC,HORZRES);
int heightres=GetDeviceCaps(hDC,VERTRES);
LPtoDP(hDC,lpPoint,nCount);
GetDCOrgEx(hDC,&originPoint);
for(int i=0; i<nCount; ++i)
{
lpPoint[i].x +=originPoint.x;
lpPoint[i].y +=originPoint.y;
lpPoint[i].x=lpPoint[i].x*widthmm/widthres;
lpPoint[i].y=lpPoint[i].y*heightmm/heightres;
}
}
源码2
/*
Function:
我们自己的把逻辑坐标转换为设备坐标的函数
*/
BOOL MyLPtoDP(
HDC hdc, // handle to device context
LPPOINT lpPoints, // array of points
int nCount // count of points in array
)
{
int graphicsMode=GetGraphicsMode(hdc);
if(graphicsMode ==GM_ADVANCED) //处理启用了世界坐标系的情况
{
XFORM curForm;
GetWorldTransform(hdc,&curForm);
for(int i=0; i<nCount; ++i)//应用公式一完成世界坐标空间向页面坐标空间的转换
{
float xpage=lpPoints[i].x*curForm.eM11+lpPoints[i].y*curForm.eM21+curForm.eDx;
float ypage=lpPoints[i].x*curForm.eM12+lpPoints[i].y*curForm.eM22+curForm.eDy;
lpPoints[i].x=(int)xpage;
lpPoints[i].y=(int)ypage;
}
}
POINT pointOrgView,pointOrgWin;
SIZE winSize,viewSize;
//得到窗口、视口的原点和范围
GetViewportOrgEx(hdc,&pointOrgView);
GetViewportExtEx(hdc,&viewSize);
GetWindowOrgEx(hdc,&pointOrgWin);
GetWindowExtEx(hdc,&winSize);
//根据公式二进行页面坐标空间到设备坐标空间的转换
for(int i=0; i<nCount; ++i)
{
float xdevice=(lpPoints[i].x-pointOrgWin.x)*viewSize.cx/(float)winSize.cx+pointOrgView.x;
float ydevice=(lpPoints[i].y-pointOrgWin.y)*viewSize.cy/(float)winSize.cy+pointOrgView.y;
lpPoints[i].x=(int)xdevice;
lpPoints[i].y=(int)ydevice;
}
return TRUE;
}
分享到:
相关推荐
该代码示意了,在使用VB.NET的GDI的坐标系矩阵镜像后,如何将镜像后反显示的文字,正常显示的过程,使文字正常显示
C# GDI+绘制直角坐标系并自定义绘图并可通过鼠标在坐标系中绘制矩形圆形等形状
Windows GDI和GDI+编程实例剖析源代码
本文从GDI 映射方式入手, 对基于设备坐标的视口和基于逻辑坐标的窗口的概念、内涵及其相互关系进行了分析...在此基础上, 文章详述了怎样建立不同原点、单位和正方向的逻辑坐标系, 对坐标系的构建原理进行了深入剖析。
在Windows应用程序中,只要进行绘图,就要使用GDI坐标系统。Windows提供了几种映射方式,每一种映射都对应着一种坐标系。
最近做项目需要用到坐标画曲线,在网上搜了半天,大部分都是只...现在提供一个能直接运行的源代码给各位初学者参考,基于C#2005做的,只有几行代码,只画一个固定的二维坐标轴,希望对各位初涉GDI+的菜鸟们有帮助。^_^
WindowsGDI和GDI.pdf
可以监测GDI泄漏情况,并给出泄漏的代码位置
c#GDI+图形操作代码,包括线,矩形,圆,实体圆,阴影圆,刷。
在picturebox中初始化一个坐标系,在坐标系定义的值域中绘制曲线与点。
我参考ffmepg截屏部分的源码,在Windows上用的是gdi bitblt截屏,这完全可以自己用gdi实现一个截屏模块。最终实现如下,整个功能模块只依赖于Windows头文件,效果与ffmpeg基本一致,如果不是追求极致性能(mirro ...
C# GDI+程序设计(教材+代码),C# GDI+程序设计(教材+代码)
C#GDI 绘图 各种方法代码C#GDI 绘图 各种方法代码C#GDI 绘图 各种方法代码
GDI+提供了一个抽象层,隐藏了不同视频卡之间的区别,这样就可以调用Windows API函数完成指定的任务了,GDI会在内部指出在运行特定的代码时,如何让客户机的视频卡完成要绘制的图形,GDI还可以完成其他任务,大多数...
sdk2003 文档 Windows GDI
GDI+程序设计实例VC源代码,里面有各种例子。
GDI+程序设计实例C#源代码 GDI+程序设计实例C#源代码
WIN32编程中涉及的GDI图形/动画程序代码,共11个。
C#GDI+例程源代码,绘图例程