C#把图片放到picturebox上的指定位置,PointToClient与PointToScreen解读

news2025/2/23 12:30:20

1、C#中如何把图片放到picturebox上的指定位置

构造一个跟picturebox1一样大小的Bitmap,
设置给picturebox1,
然后在上面画图

Bitmap image = new Bitmap(picturebox1.Size.Width, picturebox1.Size.Height);
Graphics device = Graphics.FromImage(image);
//如果picturebox1本身有内容,就先画到image上
device.DrawImage(picturebox2.Image, w, h); //用你想要的位置画picturebox2
picturebox1.Image = image;

2、PointToClient与PointToScreen

//
// 摘要:
// 将指定屏幕点的位置计算成工作区坐标。
//
// 参数:
// p:
// 要转换的屏幕坐标 System.Drawing.Point。
//
// 返回结果:
// 一个 System.Drawing.Point,它表示转换后的 System.Drawing.Point、p(以工作区坐标表示)。
public Point PointToClient(Point p);
//
// 摘要:
// 将指定工作区点的位置计算成屏幕坐标。
//
// 参数:
// p:
// 要转换的工作区坐标 System.Drawing.Point。
//
// 返回结果:
// 一个 System.Drawing.Point,它表示转换后的 System.Drawing.Point、p(以屏幕坐标表示)。
public Point PointToScreen(Point p);

PointToClient是将Screen坐标(pt)与Control在Screen上的坐标做位置比较,返回差值,坐标中心为Control的Location在Screen中绝对位置。

PointToScreen是将坐标点(pt)与Control在Screen上的坐标做比较返回迭加值,坐标中心为屏幕左上角,即(0, 0)点。

引用其他的解说如下:
在这里插入图片描述

PointToClient 将指定屏幕点的位置计算成工作区坐标。坐标原点为黄色区域左上角,X轴方向从左到右,Y轴方向从上到下,坐标单位为像素;
PointToScreen 将指定工作区点的位置计算成屏幕坐标。坐标原点在屏幕左上角,X轴方向从左到右,Y轴方向从上到下,坐标单位为像素。

写Demo如下图,分而述之。

在这里插入图片描述
1、PointToClient(Point p)

这里的p,坐标原点为Screen左上角,即(0, 0)。

它计算以当前Control的位置在Screen位置为坐标原点,返回p相对于坐标原点的值。

如上图例,btn在screen中位置为(328, 188),那么,screen上点(10, 10)相对于(320, 188)即为结果(-318, -178),同理screen上点(0, 0)相对于pnl来说,是(-183, -185)。

Control在Screen上点计算方式为:窗体Location加上其各级Parent的Location。

2、PointToScreen(Point p)

这里的p,坐标原点相对于Control的Location。

这是求p于Control的Locaton在Screen上点迭加结果。

如上例,pnl相对于窗体位置为(80, 60),其加上窗体Location(200, 100),再加上边框宽度3、标题栏高度25,即得185。

btn.PointToScreen(new Point(30, 20)): {X=358,Y=208}

此值即为:btn在Screen上位置(328, 188)加上(30, 20)所得。

3、获取控件在窗体中的位置

Delphi中有,c#没有没,需要自己写,封装一静态函数实现吧:

public static class ControlHelper
    {
        public static Point LocationOnClient(this Control c)
        {
            var retval = new Point(0, 0);
            for (; c.Parent != null; c = c.Parent)
                retval.Offset(c.Location);
            return retval;
        }
    }

求btn在窗体中的位置:

lbl.Text = btn.LocationOnClient().ToString();    //{X=125, Y=63}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/362276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA电源电流参数

一、FPGA里各个电源释义 VCCINT VCCINT是FPGA芯片的内核电压,是用来给FPGA内部的逻辑门和触发器上的电压。即芯片的晶体管开关是有核心电压提供。当内部逻辑工作时钟速率越高,使用逻辑资源越多,则核心电压供电电流会更大,可高达几…

【halcon】模板匹配和仿射变换总结

前言 模板匹配和仿射变换,经常一起使用,他们之前的位置变换一般有两种情况! 情况一 模板是一个很正的图,利用模板的位置,将歪的图像摆正。 情况二 模板和图片正不正都无所谓,只需想模板的位置&#xff0…

内网穿透/组网/设备上云平台EasyNTS上云网关的安装操作指南

EasyNTS上云网关的主要作用是解决异地视频共享/组网/上云的需求,网页对域名进行添加映射时,添加成功后会生成一个外网访问地址,在浏览器中输入外网访问地址,即可查看内网应用。无需开放端口,EasyNTS上云网关平台会向Ea…

进程间同步

并发 线程和进程都是一个调度的单位 并发进程之间的关系 交互关系之间的关系是很复杂的,假如一个进程需要等待另外一个进程的调用才可以运行,就如下面这个例子 竞争关系 上面这个区叫做临界区域 协作方式 前面我们说过异步和同步的概念 那么异…

算法笔记(十一)—— 并查集、KMP

并查集 支持集合快速合并 所有数据生成各自的集合,需要提供查询两个两素是不是属于一个集合,和集合合并操作,并查集能够在常数时间级别上对两个操作进行实现 1. 构造结构(数据指针),将自己的指针指向自己…

激光雷达介绍

全球汽车行业正在进行自动化变革,这将彻底改变交通运输的安全和效率水平。戴姆勒在S级豪华车型中引入L3级自动驾驶(L3,在特定条件下自动驾驶,人类驾驶员一旦被请求就会随时接管)是自动驾驶革命的一个重大突破。其他多家…

浅谈SQL中的union和union all

文章目录概念基础语法使用技巧区别总结概念 MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。 UNION 操作符选取不同的值,如果允许得到重复的值,可以使用 UNION ALL 基础语法 -- u…

基于Spring Boot+Vue的在线考试系统(有错题训练功能)

文章目录项目介绍主要功能截图:登录系统日志在线考试错题训练考试记录题库管理试题管理角色管理用户管理部分代码展示设计总结项目获取方式🍅 作者主页:Java韩立 🍅 简介:Java领域优质创作者🏆、 简历模板、…

解决:文档根元素 “configuration“ 必须匹配 DOCTYPE 根 “null“或者“mapper” 必须匹配 DOCTYPE 根 “null”

文档根元素 "configuration" 必须匹配 DOCTYPE 根 "null 出现的原因是在配置mybatis-config.xml的时候没有把文件中的配置信息加进去导致的 解决的方式只需要在<configuration>标签前面加上如下内容: <?xml version"1.0" encoding"UT…

MySQL —— 库的操作

文章目录1. 创建数据库2. 字符集和校验规则3. 数据库的基本操作3.1 查看数据库3.2 显示创建数据库的语句3.3 修改数据库3.4 删除数据库3.5 备份&#xff0c;还原数据库4. 查看数据库的连接情况1. 创建数据库 基本语法&#xff1a; create database if not exists 数据库名 选项…

共享内存

简介&#xff1a; 共享内存两个或多个进程共享物理内存的同一块区域&#xff08;通常被称为段&#xff09;&#xff0c;由于一个共享内存段会称为一个进程用户空间的一部分&#xff0c;因此这种IPC机制无需内核介入。需要做的就是让一个进程将数据复制到共享内存段中&#xff…

数据挖掘,计算机网络、操作系统刷题笔记51

数据挖掘&#xff0c;计算机网络、操作系统刷题笔记51 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;orac…

剑指 Offer 32 - I. 从上到下打印二叉树

摘要 剑指 Offer 32 - I. 从上到下打印二叉树 剑指 Offer 32 - II. 从上到下打印二叉树 II 剑指 Offer 32 - III. 从上到下打印二叉树 III 一、二叉树的层序遍历 题目要求的二叉树的从上至下打印&#xff08;即按层打印&#xff09;&#xff0c;又称为二叉树的广度优先搜索…

解决问题:resource IDS cannot be used in a switch statement in Android library

# 发现问题在抽取lib的时候发现了这样一个问题&#xff0c;如图所示&#xff1a;1. 很正常的onClick事件的处理&#xff0c;使用的swtich语句&#xff0c;但是却报了resource IDS cannot be used in a switch statement in Android library这个问题&#xff0c;原因是...2. and…

kafka架构体系

Kafka简介 Kafka是一个由Scala和Java编写的企业级的消息发布和订阅系统&#xff0c;最早是由Linkedin公司开发&#xff0c;最终开源到Apache软件基金会的项目。Kafka是一个分布式的&#xff0c;支持分区的&#xff0c;多副本的和多订阅者的高吞吐量的消息系统&#xff0c;被广…

【单目标优化算法】樽海鞘群算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

安装vue的具体步骤

首先到官网下载一个node.js官网地址为&#xff1a;http://nodejs.cn/安装教程&#xff1a;选Node.js.runtime和 Add to Path都可以&#xff0c;建议选Add to Path添加到环境变量。这里不用勾选&#xff0c;直接下一步&#xff0c;就可以安装成功了所有的步骤都是在命令窗口执行…

【数据结构趣味多】八大排序

目录 1.直接插入排序 基本思想 代码实现&#xff1a; 直接插入排序的特性总结&#xff1a; 2.希尔排序 基本思想 代码实现 &#xff08;递归实现&#xff09; 希尔排序的特性总结 3.直接选择排序 基本思想 代码实现&#xff1a; 直接选择排序的特性总结 4.堆排序 …

Umi框架

什么是 umi umi 是由 dva 的开发者 云谦 编写的一个新的 React 开发框架。umi 既是一个框架也是一个工具&#xff0c;可以将它简单的理解为一个专注性能的类 next.js 前端框架&#xff0c;并通过约定、自动生成和解析代码等方式来辅助开发&#xff0c;减少开发者的代码量。 u…

进程内存机制及API及详解

一、进程概念 ​ 一个程序文件&#xff08;program&#xff09;&#xff0c;只是一堆待执行的代码和部分待处理的数据&#xff0c;他们只有被加载到内存中&#xff0c;然后让 CPU 逐条执行其代码&#xff0c;根据代码做出相应的动作&#xff0c;才形成一个真正“活的”、动态的…