using NPOI.SS.Formula.Functions; using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; using System.Windows; namespace BBWY.Client.Helpers { public class UnitConverHelper { int dpiX = 0; int dpiY = 0; public UnitConverHelper() { GetDpi(); } private void GetDpi() { var hDc = GetDC(IntPtr.Zero); dpiX = GetDeviceCaps(hDc, LOGPIXELSX); dpiY = GetDeviceCaps(hDc, LOGPIXELSY); ReleaseDC(IntPtr.Zero, hDc); } /// /// 毫米转像素(获取打印的宽和高) /// /// /// public PrintPx MmToPx(double mWidth, double mHeight) { if(dpiX<=0||dpiY<=0) GetDpi(); return new PrintPx { Width = mWidth * dpiX / 25.4, Height = mHeight * dpiY / 25.4, }; } /// /// 像素转毫米 /// /// /// /// public PrintPx PxToMm(double pxWidth, double pxHeight) { if (dpiX <= 0 || dpiY <= 0) GetDpi(); return new PrintPx { Width = pxWidth * 25.4 / dpiX, Height = pxHeight * 25.4 / dpiY, }; } private const int LOGPIXELSX = 88; private const int LOGPIXELSY = 90; [DllImport("gdi32.dll")] private static extern int GetDeviceCaps(IntPtr hdc, int index); [DllImport("user32.dll")] private static extern IntPtr GetDC(IntPtr hWnd); [DllImport("user32.dll")] private static extern int ReleaseDC(IntPtr hWnd, IntPtr hDc); } public class PrintPx { public double Width { get; set; } public double Height { get; set; } } }