源码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;
}
分享到:
相关推荐
默认情况下,GDI+的坐标系原点位于图像的左上角,X轴正向指向右,Y轴正向向下。在进行坐标变换时,我们通常会使用一个变换矩阵来描述这些变换。变换矩阵可以用来执行平移、旋转、缩放和镜像操作。 在VB.NET中,`...
在Windows图形设备接口(GDI)中,逻辑坐标和设备坐标是两个重要的概念。逻辑坐标是程序员在编写代码时使用的坐标系统,而设备坐标则是实际显示在屏幕上的坐标系统。理解这两者的区别和相互作用是进行图形绘制的关键...
在这个主题中,我们将深入探讨如何使用C# GDI+来绘制直角坐标系,并实现自定义的图形绘制,如矩形和圆形。 首先,我们需要导入`System.Drawing`命名空间,这是C#中GDI+的核心库。在窗体或控件的Paint事件处理程序中...
Windows GDI(Graphics Device Interface)和GDI+是Windows操作系统中的图形处理技术,它们为开发者提供了绘制图形、文字、图像的API,使得程序员能够创建出丰富的用户界面和图形应用程序。本压缩包包含“Windows ...
Windows图形设备接口(GDI)是Windows操作系统中的一个重要组件,用于处理图形输出,如窗口、文本、图形和图像。在编程过程中,如果程序不当管理GDI资源,可能会导致GDI泄漏,即创建了GDI对象但没有正确释放,长期...
在GDI中,坐标系统是一个二维的平面,原点通常位于屏幕的左上角,X轴正方向向右,Y轴正方向向下。GDI矩阵是一个3x3的变换矩阵,用于描述这些几何变换。这个矩阵通常表示为: ``` [ m11 m12 0 ] [ m21 m22 0 ] [ dx ...
世界坐标空间是指三维空间中的一种坐标系,而页面坐标空间是指二维空间中的一种坐标系。从世界坐标空间到页面坐标空间的变换是GDI坐标变换中的一项重要内容。 (1)平移变换 平移变换是指将图形元素沿着某个方向...
【学习笔记】Windows GDI绘图(三)坐标系和坐标转换 【学习笔记】Windows GDI绘图(四)矩阵Matrix详解 【学习笔记】Windows GDI绘图(五)图形路径GraphicsPath详解(上) 【学习笔记】Windows GDI绘图(六)图形路径...
Windows GDI 和 GDI+ 编程实例全剖析...本文对 Windows GDI 和 GDI+ 进行了详细的介绍,包括 GDI+ 的初始化和关闭、在 MFC 中使用 GDI+ 进行编程、GDI+ 的功能和性能提升、GDI+ 中的类和函数、使用 GDI+ 的注意事项等。
本篇文章将详细探讨如何利用C#的GDI功能在PictureBox控件中初始化一个坐标系,并在该坐标系内绘制曲线和点。 首先,我们需要了解GDI的基础概念。GDI提供了一系列的函数和对象,如Graphics、Pen、Brush等,它们分别...
在Windows中,默认的坐标系统采用笛卡尔坐标系,其中坐标原点位于屏幕的左上角,水平坐标轴正方向向右,垂直坐标轴正方向向下。例如,如果使用Ellipse函数绘制一个圆形,则需要根据这个坐标原点来指定圆形的位置和...
本文从GDI 映射方式入手, 对基于设备坐标的视口和基于逻辑坐标的窗口的概念、内涵及其相互关系进行了分析...在此基础上, 文章详述了怎样建立不同原点、单位和正方向的逻辑坐标系, 对坐标系的构建原理进行了深入剖析。
最近做项目需要用到坐标画曲线,在网上搜了半天,大部分都是只...现在提供一个能直接运行的源代码给各位初学者参考,基于C#2005做的,只有几行代码,只画一个固定的二维坐标轴,希望对各位初涉GDI+的菜鸟们有帮助。^_^
C# GDI+(Graphics Device Interface Plus)是.NET框架中用于进行图形绘制和图像处理的一组API,它扩展了Windows API中的GDI功能,提供了更强大的图形编程能力。在这个实例代码中,我们可以看到如何利用C#来实现各种...
在Windows编程中,GDI(Graphics Device Interface)是操作系统提供的一种图形设备接口,它允许程序员创建和控制图形输出。本篇文章将深入探讨如何利用Windows GDI函数和C++语言来编写一个函数,以绘制五角星图形。 ...
在本压缩包中,"易语言GDI矩阵坐标源码"提供了关于如何在易语言中应用GDI矩阵坐标系统进行图形绘制的实例代码。 GDI的矩阵坐标系统是一个数学模型,用于在二维空间中表示和变换图形。在计算机图形学中,矩阵常用于...
在计算机编程中,尤其是在图形编程中,我们通常使用笛卡尔坐标系,其中X轴代表水平方向,Y轴代表垂直方向,原点(0,0)位于左上角。 在VB中,我们可以利用GDI+(Graphics Device Interface Plus)库来绘制坐标轴、...
《Windows GDI与GDI+编程实例解析》 Windows GDI(Graphics Device Interface)是Windows API的核心组件之一,它的主要任务是为应用程序提供图形绘制能力,使得开发者无需关注硬件细节,就能在各种设备上实现一致的...
平移变换允许我们移动图形对象在坐标系中的位置,而不改变其大小或形状。在GDI+中,这可以通过创建一个包含平移元素的矩阵来实现。例如,如果要将一个图形向右平移10单位,向下平移20单位,可以创建一个矩阵如下: `...