4

私は持っています

?(New System.Windows.LengthConverter()).ConvertFrom("1cm")
37.795275590551178 {Double}
    Double: 37.795275590551178

だから、1cm私は37.795275590551178pxWPFピクセルを持っています。

私の問題は、どのようにからに変換pxするcmかです。

4

3 に答える 3

18

WPFの場合と同様に、DeviceIndependentUnits(DIU、名前は通常「px」)を扱います。この単位は、デバイスや画面の解像度に依存しません。

実際には、.NET Framework(4)で使用される要素で、それぞれ「px」、「in」、「cm」、「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;
}
于 2012-04-19T17:08:03.203 に答える
4

これは、インチを使用するコンピュータ業界の問題です。1インチあたり96ピクセルあります。1インチあたり2.54cmあります。37.795275590551178(1 cm)* 2.54 = 95.9999999999997ピクセル(96と呼びます)。

37.795275590551178のアプリケーションレベル定数をいつでも作成できます。または、インチを使用して、インチとセンチメートルを前後に変換することもできます。

pxをcmに変換するには、pxをinchからcmに変換するか、上記の定数を使用してそれで割ってセンチメートルを取得します。

96ピクセル/37.795275590551178=2.54cm。

これについての別のSO投稿があります: センチメートルからピクセル

于 2012-04-19T16:17:03.033 に答える
2

同様の問題が発生しましたが、deWPFは論理ピクセルを物理ピクセルに調整するための計算を行います。たぶん、このコードはあなたを助けることができます。

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; }
于 2017-07-13T22:30:07.037 に答える