首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我应该如何从WinForms PictureBox中的屏幕空间坐标转换为图像空间坐标?

要将屏幕空间坐标转换为图像空间坐标,您需要使用图像的宽度和高度以及图像在 PictureBox 中的位置。以下是一个简单的示例,说明如何在 WinForms 应用程序中实现此转换:

  1. 首先,确保您已经添加了一个 PictureBox 控件并将其命名为 pictureBox
  2. 然后,在您的代码中添加以下事件处理程序,以便在用户单击 PictureBox 时执行转换:
代码语言:csharp
复制
private void pictureBox_Click(object sender, EventArgs e)
{
    // 获取鼠标点击的屏幕坐标
    Point mouseScreenPosition = Cursor.Position;

    // 获取 PictureBox 的位置和大小
    Point pictureBoxPosition = pictureBox.Location;
    Size pictureBoxSize = pictureBox.Size;

    // 计算图像在 PictureBox 中的位置
    Point imagePositionInPictureBox = new Point(
        mouseScreenPosition.X - pictureBoxPosition.X - pictureBoxSize.Width / 2,
        mouseScreenPosition.Y - pictureBoxPosition.Y - pictureBoxSize.Height / 2);

    // 获取图像的宽度和高度
    int imageWidth = pictureBox.Image.Width;
    int imageHeight = pictureBox.Image.Height;

    // 计算图像空间坐标
    PointF imageSpacePosition = new PointF(
        (float)imagePositionInPictureBox.X / (pictureBoxSize.Width / 2) * imageWidth,
        (float)imagePositionInPictureBox.Y / (pictureBoxSize.Height / 2) * imageHeight);

    // 显示结果
    MessageBox.Show($"图像空间坐标:({imageSpacePosition.X}, {imageSpacePosition.Y})");
}

这个示例将计算并显示图像空间坐标。请注意,这个示例假设您的 PictureBox 显示了一个图像,并且图像已经完全加载。如果您的图像尚未加载,您可能需要在图像加载完成后再尝试进行转换。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【愚公系列】2023年12月 GDI+绘图专题 图形图像编程基础

GetFileDropList 从剪贴板中检索文件名的集合。 GetImage 检索剪贴板上的图像。 GetText 已重载。从剪贴板中检索文本数据。 SetAudio 已重载。...例如,对于一幅256256分辨率的图像,采用变换的方法可以实现不同分辨率显示。 将256256分辨率的图像变换为6464分辨率。...pictureBox2.Image = box2;//图片赋到图片框中 } 输入图像分辨率为256256像素,转换为6464分辨率图像。...3.如何构造一个颜色对象? 4.打开图像有哪些方法? 5.如何转换图像格式?...我用C#的GDI+在FORM窗体上drawimage显示一个图像,然后我想在同一窗体上再drawimage另一张图像,目的是在同一个from窗体中删除一张图像后再显示另一张图像,如此不断反复操作,但是Graphics

88012
  • 基础渲染系列(七)——阴影

    结果,没有三角形边缘,因此MSAA不会影响屏幕空间阴影贴图。MSAA确实适用于最终图像,但是阴影值直接从屏幕空间阴影贴图中获取。当靠近较暗表面的较亮表面被阴影覆盖时,这变得非常明显。...3.1 采样阴影 为了获得阴影,需要对屏幕空间阴影贴图进行采样。为此,需要知道屏幕空间纹理坐标。像其他纹理坐标一样,我们会将它们从顶点着色器传递到片段着色器。...适当时在AutoLight中定义。简单的方法是仅使用片段的剪切空间XY坐标对该纹理进行采样。 ? ? (采样阴影) 现在,我们对阴影进行采样,但是具有剪辑空间坐标而不是屏幕空间坐标。...必须通过将X和Y除以W来转换为屏幕空间坐标。 ? ? (不正确的转换) 结果会失真。阴影被拉伸和弯曲。这是因为我们在插值之前进行了除法。这是不正确的,应在除法之前分别对坐标进行插补。...通过将顶点位置转换为世界空间,然后从顶点位置转换为光源的阴影空间,可以找到阴影坐标。 ? 我们只需对屏幕空间阴影贴图进行采样即可找到定向阴影。

    4.2K30

    2.1 几何阶段第 2 章 GPU 图形绘制管线

    第 2 章 GPU 图形绘制管线 ---- 图形绘制管线描述 GPU 渲染流程,即“给定视点、三维物体、光源、照明模式,和纹理等元素,如何绘制一幅二维图像”。...上述英文意思是:输入到计算机中的是一系列三维坐标点,但是我们终需要看到的是,从视点出发观察到的特定点(这句话可以这样理解,三维坐标点,要使之显示在二维的屏幕上)。...and Project space,屏幕坐标空间。...毫无疑问,我们将一个模型导入计算机后,就应该给它一个相对于坐标原点的位置,那么这个位置就是 world space coordinate,从 object space coordinate 到 world...所以,从视点坐标空间到屏幕坐标空间 (screen coordinate space)事实上是由三步组成: 用透视变换矩阵把顶点从视锥体中变换到裁剪空间的 CVV 中; 在 CVV 进行图元裁剪;

    1.4K30

    5-3 绘制图形

    图5-8 正弦曲线 u 实验步骤(4): 因为窗体中纵坐标的正方向是垂直向下的,和我们在数学中画坐标轴的方向相反,因此,需对纵坐标的值做一些修改。...因为直接根据y=sinx中的x范围画图,画出的正弦曲线很窄,x取值范围是从0-2 为一个周期,也就是几个像素,因此需将曲线放宽,通过改变横坐标来完成。...案例学习:按百分比绘制饼图 本次练习的目标是掌握绘制统计图形的基本要领,绘制饼图并按比例填充不同颜色,饼图可以直接使用类库中的方法填充图形,不同在于统计类图形需和数据关联,如何获取数据并按不同数据绘制不同比例的饼图是实现的关键...输入的参数既可以从数据库表中的指定列获取,也可通过从文件中的数据获取。在调用时确定将饼图切割为几份。 ?...主要属性和方法定义如表5-5所示: 属性 说明 Image 设置或获取与该控件显示的图像 SizeMode 指示如何显示图像 方法 说明 Load 显示图像 表5-5 PictureBox控件属性及方法

    1.5K10

    (一) 3D图形渲染管线

    世界空间: 一个物体的物体空间和其它对象没有空间上的关系。世界空间的目的是为在你的场景中的所有物体提供一个绝对的参考。一个世界空间坐标系如何建立可以任意选择。...剪裁空间: 当位置在眼空间以后,下一步是决定什么位置是在你最终要渲染的图像中可见的。在眼空间之后的坐标系统被称为剪裁空间,在这个空间中的坐标系统称为剪裁坐标。...我是这么理解的,比如你有一个三维游戏场景,场景中的每个模型都可以用一个向量来确定它的位置,但如何让计算机根据这些坐标把模型正确的、有层次的画在屏幕上?...所以这个转换过程事实上由三步组成: (1),用透视变换矩阵把顶点从视锥体变换到CVV中; (2),在CVV内进行剪裁; (3),屏幕映射:将经过前两步得到的坐标映射到屏幕坐标系上。...经过上面的步骤之后,我们得到了每个点的屏幕坐标值,和我们需要绘制的图元,但此时还有两个问题: (1)屏幕坐标是浮点数,但像素是用整数来表示的,如何确定屏幕坐标值所对应的像素?

    1.4K30

    ThreeJS中三维世界坐标转换成二维屏幕坐标

    三维开发中最常用的是三维坐标和二维坐标的转换,比如说:给一个三维模型中动态赋予一个文字标签进行展示,以前使用OpenGL处理起来比较麻烦,使用Threejs就简单了很多。...画布的中心从屏幕坐标系的角度看是坐标是(window.innerWidth/2,window.innerHeight/2),从WebGL标准设备坐标系的角度看是坐标原点(0,0)。...var h = window.innerHeight / 2; var x = Math.round(vector.x *w + w);//标准设备坐标转屏幕坐标 var...同理使用函数vector.unproject(camera)则可以从屏幕2d坐标转换为3d空间坐标, var vector = new THREE.Vector3(mX, mY, 0.5 );//这里定义深度值为...0.5 //将鼠标坐标转换为3D空间坐标 vector.unproject(camera);

    5.2K10

    unity3d:Shader知识点,矩阵,函数,坐标转换,Tags,半透明,阴影,深度,亮度,优化

    它将三维模型从模型空间经过模型矩阵变换到世界坐标系,再经过视图矩阵变换到观察空间,最后经过投影矩阵映射到裁剪空间。该矩阵的结果可以用于将顶点坐标从三维空间投影到屏幕上的二维坐标。...它是一个 4x4 的矩阵,表示了物体从本地坐标系到世界坐标系的变换。 通过使用 unity_ObjectToWorld,我们可以将对象空间的顶点坐标转换为世界空间的顶点坐标。...在着色器中,我们可以使用这个旋转矩阵来将法线从切线空间转换到世界空间或屏幕空间,以便进行光照计算和渲染。 切线空间是一种以顶点切线、法线和切线叉积向量为基础的局部坐标系,常用于处理带有法线贴图的模型。...用于坐标从模型空间转世界空间 V代表观察矩阵。用于世界空间转观察空间 P代表投影矩阵。...使用亮度可以实现各种效果,例如: 灰度化:通过将颜色的 R、G、B 通道都设置为相同的亮度值,可以将图像转换为灰度图像。

    47710

    【专业技术】OpenGL操作技巧介绍

    存在问题: opengl中如何渲染管线? 解决方案: 绝大数OpenGL实现都有相似的操作顺序,一系列相关的处理阶段称为OpenGL渲染管线。...这种方法是一种多项式映射,它可以根据控制点产生表面 法线、纹理坐标、颜色以及空间坐标。...有些类型的 顶点数据(例如空间坐标)是通过一个4*4 的浮点矩阵进行变换的。空间坐标从3D世界的一个位置投影到屏幕上的一个位置。如果启用了高级特性,这个阶段将更为忙碌。...6 纹理装配Texture Assembly OpenGL 应用程序可以在几何物体上应用纹理图像,使它们看上去更为逼真。如果需要使用多幅纹理图像,把它们放在纹理对象中是一种明智的做法。...7 光棚化Rasterization 光棚化就是把几何数据和像素数据转换为片断(fragment)的过程。每个片断方块对应用 于帧缓冲区中的一个像素。

    1.4K20

    变换(Transform)(2)-坐标空间变换

    : 从模型空间到屏幕空间 在我之前的博客中介绍了渲染管线,其中提到了顶点着色器涉及到了多个坐标空间的转换,下面会详细这个过程。...观察坐标系转换到世界坐标系的变换矩阵不一定是正交矩阵,所以不能用转置直接求出逆矩阵,那么就用老方法,从观察坐标系转换到世界坐标系实际上就是一个平移和旋转摄像机的模型变换,那么只需要逆着操作,比如反向平移和反向旋转就可以得到...而这个旋转就是一个正交矩阵,所以直接转置即可,也就是: 如果对 观察空间中坐标轴在世界空间的表示是uvw,那么将世界空间坐标轴旋转成观察空间的矩阵是u v w感到困惑的话,请再次阅读本章节最上面的 坐标空间变换...当初这个问题还困扰了我挺久的,其实如果解决了正交投影的z轴反转(也就是从右手系变为左手系,深度值越大离相机越远),这个问题也就很好解决了。...投影变换的目的仍然是方面裁剪,那么对于所有片元来说,坐标转换后不在这个NDC范围内的就可以剔除掉了。 屏幕空间 屏幕空间主要进行屏幕映射(screen mapping)。

    13620

    OpenGL ES-3D图形变换知识

    也就是说,每个顶点的x,y,z坐标都应该在-1.0到1.0之间,超出这个坐标范围的顶点都将不可见。我们通常会自己设定一个坐标的范围,之后再在顶点着色器中将这些坐标转换为标准化设备坐标。...然后将这些标准化设备坐标传入光栅器(Rasterizer),再将他们转换为屏幕上的二维坐标或像素。...将坐标转换为标准化设备坐标,接着再转化为屏幕坐标的过程通常是分步,也就是类似于流水线那样子,实现的,在流水线里面我们在将对象转换到屏幕空间之前会先将其转换到多个坐标系统(Coordinate System...观察空间就是将对象的世界空间的坐标转换为观察者视野前面的坐标。因此观察空间就是从摄像机的角度观察到的空间。而这通常是由一系列的平移和旋转的组合来平移和旋转场景从而使得特定的对象被转换到摄像机前面。...一旦所有顶点被转换到裁剪空间,最终的操作——透视划分(Perspective Division)将会执行,在这个过程中我们将位置向量的x,y,z分量分别除以向量的齐次w分量;透视划分是将4维裁剪空间坐标转换为

    95820

    OpenGL学习笔记 (三)- 坐标系与顶点变换

    NDC是左手坐标系,而之前的坐标系都是右手坐标系。 屏幕空间 屏幕空间即glViewport函数定义的视口,它的取值范围由视口大小决定。...模型矩阵 模型矩阵复杂把局部空间的顶点变换为世界空间的顶点,可以理解为把一个“模型”摆到它在世界中的位置,因此模型矩阵并没有什么固定的要求。...另外,需要注意的是平移操作通常会影响后续的旋转和缩放操作,因此推荐把平移操作留至最后进行: 视图矩阵 视图矩阵就是将世界空间变换为观察空间的矩阵,经过变换之后,物体的坐标将会变换为摄像机观察的坐标...而且,LookAt矩阵也不是实现摄像机的全部,实现摄像机的过程中可能还会遇到万向节锁的问题,还需要使用四元数的知识来解决。关于这些,我可能会单独用一篇文章来介绍。...透视除法 经过裁剪后,剩余的所有顶点的坐标值应该都不会大于其w分量(也就是都落在平截头体内),因此我们通过透视除法把裁剪空间坐标转化为标准化设备坐标。

    4K21

    关于计算机图形学的一些介绍(01)基本要素与空间变换

    对于三维世界有了基本的认识以后,让我们接下开始对图形学的一些内容进行介绍。 图形学的要素 在上节中,我们简单介绍了在现实的三维世界中如何构造并观察到一个三维物体。...光栅化是将几何数据经过一系列变换后转换为像素,并呈现在显示设备上的过程。我们常见的显示设备是由物理像素点按照一定的宽高值组成一块完整的屏幕。也就是说,屏幕上的像素点不是“连续”的。...然而,我们的图像是“连续”的,这就意味着对于几何图形,一条线,特别是非水平非垂直的线,这条线上的每一点我们总是需要通过一定的近似处理,来得到其在屏幕上的物理像素的坐标。 我们以呈现一个三角形为例。...观察空间 当得到世界空间下的坐标的时候,我们会进一步将其变换为“观察空间”。介绍“观察空间”前,我们需要先引入一个角色:摄像机。...那么很显然,我们需要将“观察空间”中某一个三维坐标点通过一定的方式的计算变换,得到在屏幕上某个具体位置的像素。

    14910

    从深度图到点云的构建方式

    本期我们将一起讨论如何将RGBD图像转换为3D空间中的点 ? 我们将介绍什么是相机的内参矩阵,以及如何使用它将RGBD(红色、蓝色、绿色、深度)图像转换为3D空间。...(右)笛卡尔坐标x,y,z中的3D视图。 如果要了解3D环境中每个像素对应的内容,那么了解相机的属性就非常重要。相机的关键参数之一是焦距,它帮助我们将像素坐标转换为实际长度。...从类似的三角方法中,我们立即获得: ? 通常fₓ和fᵧ是相同的。但是对于例如图像传感器的非矩形像素,镜头变形或图像的后处理,它们可能会有所不同。...综上所述,我们可以仅使用几何参数编写一段很短的Python代码,以将屏幕的坐标系转换为笛卡尔坐标系。...现在我们可以在齐次坐标上定义各种不同的操作,但是这些操作都保持最后一个维度值不变。 旋转矩阵R,平移矢量t和本征矩阵K组成了相机投影矩阵。它定义为从世界坐标转换为屏幕坐标: ?

    1.4K31

    从深度图到点云的构建方式

    本期我们将一起讨论如何将RGBD图像转换为3D空间中的点 ? 我们将介绍什么是相机的内参矩阵,以及如何使用它将RGBD(红色、蓝色、绿色、深度)图像转换为3D空间。...(右)笛卡尔坐标x,y,z中的3D视图。 如果要了解3D环境中每个像素对应的内容,那么了解相机的属性就非常重要。相机的关键参数之一是焦距,它帮助我们将像素坐标转换为实际长度。...从类似的三角方法中,我们立即获得: ? 通常fₓ和fᵧ是相同的。但是对于例如图像传感器的非矩形像素,镜头变形或图像的后处理,它们可能会有所不同。...综上所述,我们可以仅使用几何参数编写一段很短的Python代码,以将屏幕的坐标系转换为笛卡尔坐标系。...现在我们可以在齐次坐标上定义各种不同的操作,但是这些操作都保持最后一个维度值不变。 旋转矩阵R,平移矢量t和本征矩阵K组成了相机投影矩阵。它定义为从世界坐标转换为屏幕坐标: ?

    2.4K10

    手把手搭建游戏AI—如何使用深度学习搞定《流放之路》

    灰线(投影映射)将蓝点从世界坐标映射到屏幕上的位置。 图3:投影影射 给定2D图像来近似投影矩阵的过程被称为相机标定。...2.相机标定 相机标定是通过一幅包含一个(已知三维空间尺寸的)物体的图像来完成的。从三维坐标到二维坐标的映射,构造了一种求解变换矩阵的优化问题。这个思想可以表示为在方程1。...现在再回头看看一开始的截图,这个值和我们直觉上感受的方向是一致的。世界空间坐标分别以一个箱子的高度、宽度和深度作为单位长度。...应该怎么用鼠标在屏幕上进行操作呢?想一下前几部分的内容,一个标定好的投影矩阵,能让我们在3D坐标中更准确地逼近玩家的位置。因此,利用投影矩阵来变换该点(1,1,0)就可以确定其在屏幕上的位置。...这些值对于将游戏窗口(大小800×600)中鼠标的移动转换为屏幕上的绝对值(通常类似于1920×1080)是很必要的。

    3K70

    iOS ARKit教程:用裸露的手指在空中画画

    对象跟踪的工作原理如下:首先,我们为它们提供一个图像和一个正方形的坐标,用于我们想要跟踪的对象的图像边界。之后我们调用一些函数来初始化跟踪。...我们将要求用户将他们的手放在桌子上,就像他们握笔一样,并确保他们的缩略图面向相机,之后他们应该点击屏幕上的缩略图。这里有两点需要详述。...iOS ARKit Vision库检测到的要素点 我们将按照以下步骤初始化缩略图跟踪: 上面最棘手的部分是如何将点击位置从UIView坐标空间转换为图像坐标空间。...ARKit为我们提供了displayTransform从图像坐标空间转换到视口坐标空间的矩阵,但不是相反。那么我们怎么做反过来呢?通过使用矩阵的逆。...我真的试图在这篇文章中尽量减少对数学的使用,但在3D世界中它有时是不可避免的。

    2.2K30

    Shader经验分享

    e.屏幕映射:把NDC坐标转换为屏幕坐标 3.光栅化阶段:(GPU)把几何阶段传来的数据来产生屏幕上的像素,计算每个图元覆盖了哪些像素,计算他们的颜色、 a.三角形设置:计算网格的三角形表达式 b.三角形遍历...的转置矩阵 UNITY_MATRIX_IT_MV UNITY_MATRIX_MV的逆转置矩阵,用于将法线从模型空间转换到观察空间 _Object2World将顶点方向矢量从模型空间变换到世界空间...(float4 v)输入模型空间中的顶点坐标,返回模型空间中从该点到摄像机的观察方向 WorldSpaceLightDir()仅用于前向渲染,输入模型空间中的顶点坐标,返回世界空间中从该点到光源光照方向...o.scrPos = ComputeGrabScreenPos(o.pos);//得到对应被抓取的屏幕图像的采样坐标 反射和折射需要显示环境的效果,所以需要对环境的cubemap进行采样。...运动模糊:将上一帧的屏幕图像存到renderTexture中,然后执行Graphics.Blit(src, renderTexture, material),shader将开启混合Blend SrcAlpha

    2.1K40

    【笔记】《计算机图形学》(7)——观察

    内容比较多,由于这次有些地方不太直观因此我记录的比较详细,慢慢看吧 ---- 7.1 观察变换 上一章里讲到了对模型的各种变换,这一章则要介绍如何观察这些三维模型,将三维模型投影到二维屏幕的点上的过程就称为观察变换...1.相机变换部分 上图左数的两个步骤,对于一个世界坐标系空间中的物体,我们将虚拟摄像机相机旋转和移动到需要的角度上,然后把物体的顶点坐标从世界坐标系转到相机坐标系中 2.投影变换部分 中间的步骤,把那个横着的金字塔形视体压缩为下面规范视体的形状...,在这里我们要通过一个矩阵把三维空间中的坐标转换为二维的屏幕坐标,并且其排列顺序要按照3.2中的介绍,也就是依据左下坐标系的形式,将[-1,1]^3的三维空间投影到[-0.5,n-0.5]的二维空间中。...为什么视体和坐标系原点中间有一段距离? 如何将正交视体变换为上面的规范视体? 首先这里相机坐标系的z轴正方向和视体不在同一个方向上实际上是一个习惯问题。...计算机中的相机不会发生散焦等情况,因此在正交投影下调整焦距的效果类似于相机在移动 那么最后如何将正交视体变换为规范视体呢,很显然这也是一个缩放和移动仿射矩阵的情况,只是这一次我们无需忽略Z轴的值了,三轴都要进行移动和变换

    2.1K20
    领券