2010-04-02 4 views
3

Я хочу получить соотношение сторон монитора как две цифры: ширина и высота. Например, 4 и 3, 5 и 4, 16 и 9.Получить соотношение сторон монитора

Я написал код для этой задачи. Может быть, это более простой способ сделать это? Например, некоторые библиотеки функция = \

/// <summary> 
/// Aspect ratio. 
/// </summary> 
public struct AspectRatio 
{ 
    int _height; 
    /// <summary> 
    /// Height. 
    /// </summary> 
    public int Height 
    { 
     get 
     { 
      return _height; 
     } 
    } 

    int _width; 
    /// <summary> 
    /// Width. 
    /// </summary> 
    public int Width 
    { 
     get 
     { 
      return _width; 
     } 
    } 

    /// <summary> 
    /// Ctor. 
    /// </summary> 
    /// <param name="height">Height of aspect ratio.</param> 
    /// <param name="width">Width of aspect ratio.</param> 
    public AspectRatio(int height, int width) 
    { 
     _height = height; 
     _width = width; 
    } 
} 



public sealed class Aux 
{ 
    /// <summary> 
    /// Get aspect ratio. 
    /// </summary> 
    /// <returns>Aspect ratio.</returns> 
    public static AspectRatio GetAspectRatio() 
    { 
     int deskHeight = Screen.PrimaryScreen.Bounds.Height; 
     int deskWidth = Screen.PrimaryScreen.Bounds.Width; 

     int gcd = GCD(deskWidth, deskHeight); 

     return new AspectRatio(deskHeight/gcd, deskWidth/gcd); 
    } 

    /// <summary> 
    /// Greatest Common Denominator (GCD). Euclidean algorithm. 
    /// </summary> 
    /// <param name="a">Width.</param> 
    /// <param name="b">Height.</param> 
    /// <returns>GCD.</returns> 
    static int GCD(int a, int b) 
    { 
     return b == 0 ? a : GCD(b, a % b); 
    } 

}

ответ

1
  1. Используйте Screen класс, чтобы получить высоту/ширину.
  2. Разделите, чтобы получить GCD
  3. Рассчитать коэффициент.

Смотреть следующий код:

private void button1_Click(object sender, EventArgs e) 
{ 
    int nGCD = GetGreatestCommonDivisor(Screen.PrimaryScreen.Bounds.Height, Screen.PrimaryScreen.Bounds.Width); 
    string str = string.Format("{0}:{1}", Screen.PrimaryScreen.Bounds.Height/nGCD, Screen.PrimaryScreen.Bounds.Width/nGCD); 
    MessageBox.Show(str); 
} 

static int GetGreatestCommonDivisor(int a, int b) 
{ 
    return b == 0 ? a : GetGreatestCommonDivisor(b, a % b); 
} 
+0

Как я и думал, функции библиотеки нет. Спасибо за ответ в любом случае;) –

+0

Мое разрешение экрана 1813x1024, и я не уверен, почему он вернул «1024: 1813»? –

+0

My Разрешение экрана: 1366 * 768, но оно возвращается 384: 683! что я могу сделать – user3290286

0

Я не думаю, что есть функция библиотеки, чтобы сделать это, но этот код выглядит хорошо. Очень похоже на ответ в этой должности, связанной делать то же самое в Javascript: Javascript Aspect Ratio

+0

-1: Я не согласен с 'thought', что это невозможно. –

Смежные вопросы