Определите, относится ли исходное разрешение к указанному соотношению сторон - PullRequest
0 голосов
/ 17 мая 2018

Я хотел бы определить, принадлежит ли исходное разрешение к указанному соотношению сторон, в C # или VB.NET.

В настоящее время я написал следующее:

/// --------------------------------------------------------------------------
/// <summary>
/// Determine whether the source resolution belongs to the specified aspect ratio.
/// </summary>
/// --------------------------------------------------------------------------
/// <param name="resolution">
/// The source resolution.
/// </param>
/// 
/// <param name="aspectRatio">
/// The aspect ratio.
/// </param>
/// --------------------------------------------------------------------------
/// <returns>
/// <see langword="true"/> if the source resolution belongs to the specified aspect ratio; 
/// otherwise, <see langword="false"/>.
/// </returns>
/// ----------------------------------------------------------------------------------------------------
public static bool ResolutionIsOfAspectRatio(Size resolution, Point aspectRatio) {

    return (resolution.Width % aspectRatio.X == 0) && 
           (resolution.Height % aspectRatio.Y == 0);

}

VB.NET:

Public Shared Function ResolutionIsOfAspectRatio(resolution As Size, 
                                                 aspectRatio As Point) As Boolean

    Return ((resolution.Width Mod aspectRatio.X) AndAlso 
            (resolution.Height Mod aspectRatio.Y)) = 0

End Function

Пример использования:

Size resolution = new Size(1920, 1080);
Point aspectRatio = new Point(16, 9);

bool result = ResolutionIsOfAspectRatio(resolution, aspectRatio);

Console.WriteLine(result);

Я просто хочу убедиться, что я не упускаю ничего из концепции соотношения сторон, что может привести к неожиданным результатам при использовании функции Iписал.

Тогда мой вопрос: этот алгоритм подходит для всех случаев? Если нет, какие модификации я должен сделать, чтобы выполнить эту операцию должным образом.

РЕДАКТИРОВАТЬ: я заметил, чтоАлгоритм совершенно неверный, он принимает 640x480 в качестве 16: 9.Я не читал достаточно об основах, как рассчитать это.

1 Ответ

0 голосов
/ 17 мая 2018

Ошибка в вашем расчете.Простое изменение каждого значения отдельно не проверяет соотношение сторон.

Например,

Size res = new Size(1920, 1080);
Point aspect = new Point(16, 9);  //1080%9==0 valid and true
bool result = (res.Width % aspect.X == 0) &&(res.Height % aspect.Y == 0);

- правда, но

Point aspect = new Point(16, 10); //1080%10==0 invalid and true!

также верно.

Правильный способ расчета -

bool result = res.Width / aspect.X == res.Height / aspect.Y; //1920/16 == 1080/9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...