C# 针对DPI和像素、毫米、英寸互相转换

ops/2024/10/18 17:25:19/

在C#中,要进行DPI(每英寸点数)、像素、毫米、英寸之间的转换,通常需要知道屏幕或设备的DPI值。

展示如何在已知DPI的情况下进行这些单位的相互转换,示例代码。

获取屏幕DPI

首先,获取屏幕的DPI(这在Windows系统中通常是可行的)。这里使用System.Drawing.Graphics类来获取设备上下文,并通过它得到DPI。

using System.Drawing;public static void GetScreenDpi(out float dpiX, out float dpiY)
{using (Graphics g = Graphics.FromHwnd(IntPtr.Zero)){dpiX = g.DpiX;dpiY = g.DpiY;}
}

像素转英寸

给定像素数量和DPI,可以计算对应的英寸数。

public static float PixelsToInches(int pixels, float dpi)
{return pixels / dpi;
}

像素转毫米

首先将像素转为英寸,再将英寸转为毫米。

public static float PixelsToMillimeters(int pixels, float dpi)
{float inches = PixelsToInches(pixels, dpi);return inches * 25.4f;
}

毫米转像素

先将毫米转为英寸,然后乘以DPI得到像素数。

public static int MillimetersToPixels(float millimeters, float dpi)
{float inches = millimeters / 25.4f;return (int)(inches * dpi + 0.5f); // 使用0.5f进行四舍五入处理
}

示例使用

假设我们要将一个800像素宽的图像在已知DPI为96的情况下转换为毫米:

float dpiX;
float dpiY;
GetScreenDpi(out dpiX, out dpiY); // 获取当前屏幕的DPI
Console.WriteLine("当前屏幕DPI (X): " + dpiX);int pixelWidth = 800;
float millimetersWidth = PixelsToMillimeters(pixelWidth, dpiX);
Console.WriteLine("800像素宽在当前DPI下相当于: " + millimetersWidth + "毫米");

请注意,实际应用中可能需要根据具体场景调整代码,比如在处理不同设备或特定需求时。

上述代码适用于Windows桌面应用程序,并且依赖于System.Drawing命名空间,如果你在.NET Core或.NET 5+环境下工作,可能需要添加相应的NuGet包来支持System.Drawing功能。

 


http://www.ppmy.cn/ops/42783.html

相关文章

LabVIEW虚拟测试实验室开发

LabVIEW虚拟测试实验室开发 在当代的科技和工业进步中,测试与测量扮演着至关重要的角色。随着技术的发展,测试系统也变得日益复杂和成本昂贵,同时对测试结果的准确性和测试过程的效率要求越来越高。开发了一种基于LabVIEW的虚拟测试实验室的…

安卓开发:相机水印设置

1.更新水印 DecimalFormat DF new DecimalFormat("#"); DecimalFormat DF1 new DecimalFormat("#.#");LocationManager LM (LocationManager)getSystemService(Context.LOCATION_SERVICE); LM.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2…

【限免】杂波环境下线性调频脉冲、巴克码、频率步进脉冲雷达MTI、脉冲压缩【附MATLAB代码】

来源:微信公众号:EW Frontier 本代码主要模拟杂波环境(飞机、地杂波、鸟类信号)下,Chirp脉冲、巴克码脉冲、频率步进脉冲雷达信号的脉冲压缩及MTI、​匹配滤波。 MATLAB主代码 % 定义参数 fs 1000; % 采样率 T 1; …

LLVM Visual Studio构建

cd llvm-project-main cmake -S llvm -B build -G "Visual Studio 16 2019" -DLLVM_ENABLE_PROJECTSclang-tools-extra -DLLVM_ENABLE_PROJECTSclang .

QGraphicsView中鼠标位置图像缩放时不变

设置QGraphicsView的变换锚和调整尺寸锚到鼠标下面的操作,是一个很常见的模式,尤其在实现图形视图的缩放和滚动功能时。这两行代码的作用是提高用户与图形界面交互的直观性和效率。 setTransformationAnchor(QGraphicsView::AnchorUnderMouse)&#xff1…

MATLAB增强型鲸鱼优化改进算法代码复现实例

MATLAB增强型鲸鱼优化改进算法代码复现实例 MATLAB增强型鲸鱼优化改进算法代码复现实例

前端自定义滚动条样式

/* 滚动条轨道 */ ::-webkit-scrollbar-track {background-color: #f1f1f1; /* 轨道背景色 */ }/* 滚动条滑块 */ ::-webkit-scrollbar-thumb {background-color: #888; /* 滑块颜色 */border-radius: 5px; /* 滑块圆角 */ }/* 鼠标悬停在滑块上的效果 */ ::-webkit-scrollbar-…

springboot实现Java异步线程的几种方法

我们讲述几种比较实用的,平时写代码可能用到的方法 1 以下这几种实际写代码不会用到 1.1继承Thread类 1.2 实现Runable接口 1.3 实现Callable 接口 上述三种都是使用 接口或父类中的 start() 方法来实现接口的异步执行, 不过平时写代码几乎不会用到, 因为太原始了 ,只有面试的…