`
webcenterol
  • 浏览: 951004 次
文章分类
社区版块
存档分类
最新评论

Windows GDI中的坐标系一文所涉及的代码

 
阅读更多

源码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转换坐标系(矩阵镜像后),让文字正常显示,为正的方法

    默认情况下,GDI+的坐标系原点位于图像的左上角,X轴正向指向右,Y轴正向向下。在进行坐标变换时,我们通常会使用一个变换矩阵来描述这些变换。变换矩阵可以用来执行平移、旋转、缩放和镜像操作。 在VB.NET中,`...

    GDI逻辑坐标的几个重点

    在Windows图形设备接口(GDI)中,逻辑坐标和设备坐标是两个重要的概念。逻辑坐标是程序员在编写代码时使用的坐标系统,而设备坐标则是实际显示在屏幕上的坐标系统。理解这两者的区别和相互作用是进行图形绘制的关键...

    C# GDI+绘制直角坐标系并自定义绘图

    在这个主题中,我们将深入探讨如何使用C# GDI+来绘制直角坐标系,并实现自定义的图形绘制,如矩形和圆形。 首先,我们需要导入`System.Drawing`命名空间,这是C#中GDI+的核心库。在窗体或控件的Paint事件处理程序中...

    Windows GDI和GDI+编程实例剖析源代码

    Windows GDI(Graphics Device Interface)和GDI+是Windows操作系统中的图形处理技术,它们为开发者提供了绘制图形、文字、图像的API,使得程序员能够创建出丰富的用户界面和图形应用程序。本压缩包包含“Windows ...

    windows GDI泄漏检测工具

    Windows图形设备接口(GDI)是Windows操作系统中的一个重要组件,用于处理图形输出,如窗口、文本、图形和图像。在编程过程中,如果程序不当管理GDI资源,可能会导致GDI泄漏,即创建了GDI对象但没有正确释放,长期...

    GDI矩阵坐标.rar

    在GDI中,坐标系统是一个二维的平面,原点通常位于屏幕的左上角,X轴正方向向右,Y轴正方向向下。GDI矩阵是一个3x3的变换矩阵,用于描述这些几何变换。这个矩阵通常表示为: ``` [ m11 m12 0 ] [ m21 m22 0 ] [ dx ...

    GDI坐标变换详细总结

    世界坐标空间是指三维空间中的一种坐标系,而页面坐标空间是指二维空间中的一种坐标系。从世界坐标空间到页面坐标空间的变换是GDI坐标变换中的一项重要内容。 (1)平移变换 平移变换是指将图形元素沿着某个方向...

    Windows GDI+绘图学习笔记相关文章的源码

    【学习笔记】Windows GDI绘图(三)坐标系和坐标转换 【学习笔记】Windows GDI绘图(四)矩阵Matrix详解 【学习笔记】Windows GDI绘图(五)图形路径GraphicsPath详解(上) 【学习笔记】Windows GDI绘图(六)图形路径...

    WindowsGDI和GDI.pdf

    Windows GDI 和 GDI+ 编程实例全剖析...本文对 Windows GDI 和 GDI+ 进行了详细的介绍,包括 GDI+ 的初始化和关闭、在 MFC 中使用 GDI+ 进行编程、GDI+ 的功能和性能提升、GDI+ 中的类和函数、使用 GDI+ 的注意事项等。

    C# GDI 坐标系中绘制曲线和点

    本篇文章将详细探讨如何利用C#的GDI功能在PictureBox控件中初始化一个坐标系,并在该坐标系内绘制曲线和点。 首先,我们需要了解GDI的基础概念。GDI提供了一系列的函数和对象,如Graphics、Pen、Brush等,它们分别...

    基于VC++的GDI常用坐标系统及应用

    在Windows中,默认的坐标系统采用笛卡尔坐标系,其中坐标原点位于屏幕的左上角,水平坐标轴正方向向右,垂直坐标轴正方向向下。例如,如果使用Ellipse函数绘制一个圆形,则需要根据这个坐标原点来指定圆形的位置和...

    Windows图形编程中的坐标系与GDI映射方式

    本文从GDI 映射方式入手, 对基于设备坐标的视口和基于逻辑坐标的窗口的概念、内涵及其相互关系进行了分析...在此基础上, 文章详述了怎样建立不同原点、单位和正方向的逻辑坐标系, 对坐标系的构建原理进行了深入剖析。

    C#用GDI+做的坐标图

    最近做项目需要用到坐标画曲线,在网上搜了半天,大部分都是只...现在提供一个能直接运行的源代码给各位初学者参考,基于C#2005做的,只有几行代码,只画一个固定的二维坐标轴,希望对各位初涉GDI+的菜鸟们有帮助。^_^

    c#GDI实例代码

    C# GDI+(Graphics Device Interface Plus)是.NET框架中用于进行图形绘制和图像处理的一组API,它扩展了Windows API中的GDI功能,提供了更强大的图形编程能力。在这个实例代码中,我们可以看到如何利用C#来实现各种...

    利用windows GDI函数编写C++函数画五角星图形

    在Windows编程中,GDI(Graphics Device Interface)是操作系统提供的一种图形设备接口,它允许程序员创建和控制图形输出。本篇文章将深入探讨如何利用Windows GDI函数和C++语言来编写一个函数,以绘制五角星图形。 ...

    易语言矩阵应用到指定坐标源码,易语言GDI矩阵坐标

    在本压缩包中,"易语言GDI矩阵坐标源码"提供了关于如何在易语言中应用GDI矩阵坐标系统进行图形绘制的实例代码。 GDI的矩阵坐标系统是一个数学模型,用于在二维空间中表示和变换图形。在计算机图形学中,矩阵常用于...

    vb编写的坐标系源代码

    在计算机编程中,尤其是在图形编程中,我们通常使用笛卡尔坐标系,其中X轴代表水平方向,Y轴代表垂直方向,原点(0,0)位于左上角。 在VB中,我们可以利用GDI+(Graphics Device Interface Plus)库来绘制坐标轴、...

    Windows GDI和GDI+编程实例剖析

    《Windows GDI与GDI+编程实例解析》 Windows GDI(Graphics Device Interface)是Windows API的核心组件之一,它的主要任务是为应用程序提供图形绘制能力,使得开发者无需关注硬件细节,就能在各种设备上实现一致的...

    GDI+绘图中矩阵变换的几种实例

    平移变换允许我们移动图形对象在坐标系中的位置,而不改变其大小或形状。在GDI+中,这可以通过创建一个包含平移元素的矩阵来实现。例如,如果要将一个图形向右平移10单位,向下平移20单位,可以创建一个矩阵如下: `...

Global site tag (gtag.js) - Google Analytics