using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; namespace PaintDotNet.Hardware { /// /// 单位转换类 /// 毫米数 =(像素/DPI)* 25.4 /// 像素=(毫米数/25.4)*DPI /// public class ToolUnitConversion { /// /// 构造函数 /// /// 图片路径 /// /// 1=获取显示器的 Dpi /// 2=获取图片的 Dpi /// public ToolUnitConversion(string ImgPath, int DpiType) { this.DpiType = DpiType; this.ImgPath = ImgPath; } /// /// 构造函数 /// /// 图片对象 /// /// 1=获取显示器的 Dpi /// 2=获取图片的 Dpi /// public ToolUnitConversion(Bitmap Img, int DpiType = 2) { this.DpiType = DpiType; this.Img = Img; } float dpiX = 0; float dpiY = 0; /// /// 1英寸的物理长度:2.54厘米,这里表示25.4毫米 /// public readonly double singleLengthD = 25.4; /// /// 1英寸的物理长度:2.54厘米,这里表示25.4毫米 /// public readonly decimal singleLengthM = 25.4m; /// /// Dpi 类型 /// 1=获取显示器的 Dpi /// 2=获取图片的 Dpi /// private int DpiType = 1; /// /// 图片路径 /// private string ImgPath = ""; /// /// 图片对象 /// private Bitmap Img = null; /// /// 判断是否传入了图片 /// /// public bool IsImg() { try { if (Img == null) { Img = (Bitmap)Image.FromFile(ImgPath); } if (Img != null) { return true; } } catch { } return false; } public float DpiX { get { if (dpiX == 0) { if (DpiType == 2 && IsImg()) { //获取图片的 Dpi DpiX = Img.HorizontalResolution; DpiY = Img.VerticalResolution; } else { //获取显示器的 Dpi using (Graphics graphics = Graphics.FromHwnd(IntPtr.Zero)) { DpiX = graphics.DpiX; DpiY = graphics.DpiY; } } } return dpiX; } set { dpiX = value; } } public float DpiY { get { var d = DpiX; return dpiY; } set { dpiY = value; } } /// /// 毫米转像素 /// 像素=(毫米数/25.4)*DPI /// /// 毫米 /// 图片物理倍数 /// PX public double MMToPX(double mmLength, int imageMultiple) { //像素=(毫米数/25.4)*DPI if (DpiY > DpiX) { return ((mmLength / singleLengthD) * DpiY) * imageMultiple; } else { return ((mmLength / singleLengthD) * DpiX) * imageMultiple; } } /// /// 像素转毫米 /// /// 像素 /// 图片物理倍数 /// MM public double PXToMM(double pxLength, int imageMultiple) { //毫米数 =(像素 / DPI)*25.4 if (DpiY > DpiX) { return ((pxLength / DpiY) * singleLengthD) / imageMultiple; } else { return ((pxLength / DpiX) * singleLengthD) / imageMultiple; } } /// /// 像素转毫米 /// /// 像素 /// 图片物理倍数 /// MM public decimal PXToMM(decimal pxLength, int imageMultiple) { //毫米数 =(像素 / DPI)*25.4 if (DpiY > DpiX) { return ((pxLength / (decimal)DpiY) * singleLengthM) / imageMultiple; } else { return ((pxLength / (decimal)DpiX) * singleLengthM) / imageMultiple; } } /// /// 毫米转像素 /// 像素=(毫米数/25.4)*DPI /// /// 毫米 /// 图片物理倍数 /// PX public decimal MMToPX(decimal mmLength, int imageMultiple) { //像素=(毫米数/25.4)*DPI if (DpiY > DpiX) { return ((mmLength / singleLengthM) * (decimal)DpiY) * imageMultiple; } else { return ((mmLength / singleLengthM) * (decimal)DpiX) * imageMultiple; } } /// /// 像素平方转毫米平方 /// /// 像素 /// 图片物理倍数 /// 毫米平方 public double AreaPXToMM(double pxLength, int imageMultiple) { //假设 宽是 1 高等于本身 double w = 1; double h = pxLength; double Height = PXToMM(h, imageMultiple);//毫米 长 double Width = PXToMM(w, imageMultiple);//毫米 宽 return Height * Width; } /// /// 像素平方转毫米平方 /// /// 像素 /// 图片物理倍数 /// 毫米平方 public decimal AreaPXToMM(decimal pxLength, int imageMultiple) { //假设 宽是 1 高等于本身 decimal w = 1; decimal h = pxLength; decimal Height = PXToMM(h, imageMultiple);//毫米 长 decimal Width = PXToMM(w, imageMultiple);//毫米 宽 return Height * Width; } /// /// 毫米平方转像素平方 /// /// 毫米 /// 图片物理倍数 /// 像素平方 public double AreaMMToPX(double mmLength, int imageMultiple) { //假设 宽是 1 高等于本身 double w = 1; double h = mmLength; double Height = MMToPX(h, imageMultiple);//毫米 长 double Width = MMToPX(w, imageMultiple);//毫米 宽 return Height * Width; } /// /// 毫米平方转像素平方 /// /// 毫米 /// 图片物理倍数 /// 像素平方 public decimal AreaMMToPX(decimal mmLength, int imageMultiple) { //假设 宽是 1 高等于本身 decimal w = 1; decimal h = mmLength; decimal Height = MMToPX(h, imageMultiple);//毫米 长 decimal Width = MMToPX(w, imageMultiple);//毫米 宽 return Height * Width; } } }