?(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