?(New System.Windows.LengthConverter()).ConvertFrom("1cm")
37.795275590551178 {Double}
Double: 37.795275590551178
所以,在1cm
我37.795275590551178px
WPF像素。
我的问题是我如何从px
转换回cm
?
?(New System.Windows.LengthConverter()).ConvertFrom("1cm")
37.795275590551178 {Double}
Double: 37.795275590551178
所以,在1cm
我37.795275590551178px
WPF像素。
我的问题是我如何从px
转换回cm
?
如WPF我们处理DeviceIndependentUnits(DIU,命名,传统的“PX”),该单位不依赖于设备的屏幕分辨率。
实际上在.NET框架(4)中使用的因素, '在' '像素', '厘米' 和 'PT' 分别
// System.Windows.LengthConverter
private static double[] PixelUnitFactors = new double[]
{
1.0,
96.0,
37.795275590551178,
1.3333333333333333
};
因此,我们有
private struct PixelUnitFactor
{
public const double Px = 1.0;
public const double Inch = 96.0;
public const double Cm = 37.7952755905512;
public const double Pt = 1.33333333333333;
}
public double CmToPx(double cm)
{
return cm * PixelUnitFactor.Cm;
}
public double PxToCm(double px)
{
return px/PixelUnitFactor.Cm;
}
这是计算机行业使用英寸的问题。每英寸有96个像素。每英寸有2.54厘米。 37.795275590551178(1厘米)* 2.54 = 95.9999999999997像素(我们将其称为96)。
你总是可以创建一个应用程序级常数37.795275590551178,或者你可以使用英寸,来回转换英寸和厘米......
用于转换PX至厘米,你可以转换到PX英寸到厘米,或者你可以使用上面的常数并除以得到厘米。
96像素/37.795275590551178=2.54cm。
这里是另一个SO张贴关于它: Centimeter to pixel
所以,框架不提供转换它的方式,我需要手动执行它? – serhio 2012-04-19 16:22:49
我很确定有一些程序集提供了这样的方法,但除非你使用它们,否则我认为你必须自己去做。无论如何, – CodeWarrior 2012-04-19 16:25:22
,这一切都取决于屏幕分辨率......所以我迷路了...... – serhio 2012-04-19 16:35:11
我有类似的麻烦,但德WPF使计算调整逻辑像素为物理像素。也许这段代码可以帮助你。
public struct PixelUnitFactor
{
public const double Px = 1.0;
public const double Inch = 96.0;
public const double Cm = 37.795275590551178;
public const double Pt = 1.33333333333333;
}
public struct CmUnitFactor
{
public const double Px = 0.0264583333333333;
public const double Inch = 2.54;
public const double Cm = 1.0;
public const double Pt = 0.035277778;
}
public struct InUnitFactor
{
public const double Px = 0.0104166666666667;
public const double Inch = 1.0;
public const double Cm = 0.3937007874015748;
public const double Pt = 0.013888888888889;
}
public struct PtUnitFactor
{
public const double Px = 0.75;
public const double Inch = 72.0;
public const double Cm = 28.346456693;
public const double Pt = 1.0;
}
public class FormsEvent
{
//FUNCIONES PARA CONVERTIR PIXELS EN CENTÍMETROS, PULGADAS Y PUNTOS
public static double Convertir_PxToCm(double px) { return px/PixelUnitFactor.Cm; }
public static double Convertir_PxToIn(double px) { return px/PixelUnitFactor.Inch; }
public static double Convertir_PxToPt(double px) { return px/PixelUnitFactor.Pt; }
//FUNCIONES PARA CONVERTIR CENTÍMETROS EN PIXELS, PULGADAS Y PUNTOS
public static double Convertir_CmToPx(double cm) { return cm/CmUnitFactor.Px; }
public static double Convertir_CmToIn(double cm) { return cm/CmUnitFactor.Inch; }
public static double Convertir_CmToPt(double cm) { return cm/CmUnitFactor.Pt; }
//FUNCIONES PARA CONVERTIR PULGADAS EN PIXELS, CENTÍMETROS Y PUNTOS
public static double Convertir_InToPx(double inches) { return inches/InUnitFactor.Px; }
public static double Convertir_InToCm(double inches) { return inches/InUnitFactor.Cm; }
public static double Convertir_InToPt(double inches) { return inches/InUnitFactor.Pt; }
//FUNCIONES PARA CONVERTIR PUNTOS EN PIXELS, PULGADAS Y CENTÍMETROS
public static double Convertir_PtToPx(double pt) { return pt/PtUnitFactor.Px; }
public static double Convertir_PtToCm(double pt) { return pt/PtUnitFactor.Cm; }
public static double Convertir_PtToIn(double pt) { return pt/PtUnitFactor.Inch; }
回答人,之前downvote;) – serhio 2012-04-19 15:39:48