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;
}
}
}