using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
namespace ComPDFKitDemo.Helper
{
internal class Helpers
{
///
/// 当前系统DPI
///
public static int Dpi { get; private set; }
///
/// 当前DPI相对系统标准DPI(96)缩小比例
///
public static float ScaleDpi { get { return (96F/Dpi); } }
///
/// 系统DPI相对PDF文档DPI放大倍数
///
public static double ScaleFactor { get { return (Dpi / 72D); } }
///
/// PDF文档DPI相对系统标准DPI(96)缩小倍数
///
public static double InvertScaleFactor { get { return (72D / Dpi); } }
static Helpers()
{
try
{
var flags = BindingFlags.NonPublic | BindingFlags.Static;
var dpiProperty = typeof(SystemParameters).GetProperty("Dpi", flags);
Dpi = (int)dpiProperty.GetValue(null, null);
}
catch (Exception ex)
{
}
}
///
/// 从WPF获取的数值转换成标准DPI时的大小
/// 缩小
///
/// 当前数值
///
public static int GetDpiUnrelatedNum(int oldValue)
{
return (int)(oldValue * ScaleDpi);
}
///
/// 从WPF获取的数值转换成标准DPI时的大小
/// 缩小
///
/// 当前数值
///
public static double GetDpiUnrelatedNum(double oldValue)
{
return (double)(oldValue * ScaleDpi);
}
///
/// 标准DPI时的大小转换成当前DPI对应大小
/// 放大
///
/// 当前数值
///
public static double GetDpiRelatedNum(double oldValue)
{
return (oldValue / ScaleDpi);
}
///
/// 当前矩形换成标准DPI时的大小
///
///
///
public static Rect GetDpiUnrelatedRect(Rect oldValue)
{
return new Rect(GetDpiUnrelatedNum(oldValue.Left), GetDpiUnrelatedNum(oldValue.Top),
GetDpiUnrelatedNum(oldValue.Width), GetDpiUnrelatedNum(oldValue.Height));
}
///
/// 当前DPI转换到PDF矩形
///
///
///
public static Rect GetRawRect(Rect oldValue,bool isStandDpi=false)
{
Rect standRect = oldValue;
if(!isStandDpi)
{
standRect=new Rect(GetDpiUnrelatedNum(oldValue.Left), GetDpiUnrelatedNum(oldValue.Top),
GetDpiUnrelatedNum(oldValue.Width), GetDpiUnrelatedNum(oldValue.Height));
}
return new Rect((int)(standRect.Left * 72D / 96D),(int)(standRect.Top * 72D / 96D), (int)(standRect.Width * 72D / 96D),(int)(standRect.Height * 72D / 96D));
}
///
/// 当前矩形换成当前DPI时的矩形大小
///
///
///
public static Rect GetDpiRelatedRect(Rect oldValue)
{
return new Rect(GetDpiRelatedNum(oldValue.Left), GetDpiRelatedNum(oldValue.Top),
GetDpiRelatedNum(oldValue.Width), GetDpiRelatedNum(oldValue.Height));
}
///
/// 当前点转换成标准DPI时的大小
///
///
///
public static Point GetDpiUnrelatedPoint(Point oldValue)
{
return new Point(GetDpiUnrelatedNum(oldValue.X), GetDpiUnrelatedNum(oldValue.Y));
}
///
/// 点换成当前DPI时的大小
///
///
///
public static Point GetDpiRelatedPoint(Point oldValue)
{
return new Point(GetDpiRelatedNum(oldValue.X), GetDpiRelatedNum(oldValue.Y));
}
///
/// 当前Size转换成标准DPI时的大小
///
///
///
public static Size GetDpiUnrelatedSize(Size oldValue)
{
return new Size(GetDpiUnrelatedNum(oldValue.Width), GetDpiUnrelatedNum(oldValue.Height));
}
///
/// Size换成当前DPI时的大小
///
///
///
public static Size GetDpiRelatedSize(Size oldValue)
{
return new Size(GetDpiRelatedNum(oldValue.Width), GetDpiRelatedNum(oldValue.Height));
}
}
}