步步为盈
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
2.0 KiB

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);
}
/// <summary>
/// 毫米转像素(获取打印的宽和高)
/// </summary>
/// <param name="mm"></param>
/// <returns></returns>
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,
};
}
/// <summary>
/// 像素转毫米
/// </summary>
/// <param name="pxWidth"></param>
/// <param name="pxHeight"></param>
/// <returns></returns>
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; }
}
}