Как программно изменить разрешение экрана

Learn how to change display settings (resolution, bit count, etc.) using C# and DirectX SDK

I wrote this article in Arabic too. Check out the Arabic version here. 

Introduction 

It is common to change the screen resolution when working with some applications. In addition, games automatically change the screen resolution (bounds) and color system (bit count) to accommodate performance issues.

Overview

This lesson focuses on how to change the screen resolution and color system programmatically via DirectX. It starts with an overview about how Windows satisfies user’s need through the Display Settings window. Then, it digs into discussing how to retrieve these settings and to change these programmatically in the .NET environment.

Background

In Windows, you can change display settings from Display Settings window where you can change screen resolution and color system. Figure 1 shows the Display Settings window.

Display Settings

Figure 1. Display Settings Dialog

However, your screen might support more than these settings. For instance, it could support 8 bit color system which you cannot see in the colors list.

To list all modes that are supported by your screen, you can click Advanced Settings, then List All Modes button to display all modes supported and change to the desired mode. Figure 2 shows the List All Modes dialog.

Display List All Modes

Figure 2. Listing All Display Modes Supported

What is a mode? A mode is a combination of four settings, resolution (width and height,) orientation (rotation,) bit count (color system,) and frequency (refresh rate.)

Accessing the DirectX Library

DirectX is the technology of choice when working with multimedia of any type. Here in this lesson, we will focus on how to use DirectX to retrieve screen settings and to change them in the .NET environment.

DirectX consists of many libraries of which every library is specialized in some processing. The library we are interested in is dx3j.dll (Direct 1.0 Type Library) which resides in the System32 folder. You can reference this library in your project by adding it from the Add Reference dialog from the COM tab. Because it is a COM component, you end up creating an interop assembly (DIRECTLIB.dll) for accessing the library. Figure 3 shows the Add Reference dialog.

Figure 3. Adding Direct 1.0 Type Library to References

Figure 3. Adding Direct 1.0 Type Library to References

Because there is no such compatibility between .NET and unmanaged code, you cannot call COM components directly. Instead, you may create a RCW (Runtime Callable Wrapper) assembly that acts as a proxy to the COM component. RCWs also called Interop Assemblies are created automatically when you try to reference a COM component in Visual Studio .NET. However, if you want to have more control over the creation process, you can create your RCW via the tool tlbimp.exe. This tool allows you to control the RCW at a granular level. For instance, it allows you to sign the RCW, change its name and version, and to control the marshalling process of the unmanaged types. It is worth mentioning that ActiveX COM components are created with the tool aximp.exe not tlbimp.exe.

Retrieving Current Display Settings

After referencing the required DirectX library, you can now dig into the details of programmatically retrieving and changing display settings.

You can access display settings from the _dxj_DirectDrawClass that resides in our RCW assembly.

The getDisplayMode() function is used to retrieve current display mode information; it accepts a single output parameter that is of type DDSurfaceDesc which encapsulates the retrieved data.

Like other DirectX structures, DDSurfaceDesc is fairly big. However, here, we are interested in four members:

  • width and height:
    Represent the screen bounds (resolution)
  • rgbBitCount:
    Represents the bit count (color system) of the screen
  • refreshRate:
    Represents the screen refresh rate (monitor flicker)

Now, it is the time for the code retrieves current display mode information:


DIRECTLib._dxj_DirectDrawClass ddraw =
    new DIRECTLib._dxj_DirectDrawClass();



DIRECTLib.DDSurfaceDesc desc =
   new DIRECTLib.DDSurfaceDesc();


ddraw.getDisplayMode(out desc);


Console.WriteLine("{0} by {1}, {2} bit, {3} Hertz",
    desc.width, desc.height,
    desc.rgbBitCount, desc.refreshRate);

Changing Current Display Settings

Changing the current display settings is very easy. All you need is to provide the new settings to the setDisplayMode() function.

The setDisplayMode() function takes five parameters. However, we are interested in the first three parameters:

  • w:
    The screen width
  • h:
    The screen height
  • bpp:
    The bit count (color system)

The following code sets the display bounds to 640 by 480, and sets the bit count to only 8. I think that feeling reminds you of the ancients Windows ME and its ascendants specially before installing the video driver.

DIRECTLib._dxj_DirectDrawClass ddraw =
    new DIRECTLib._dxj_DirectDrawClass();



ddraw.setDisplayMode(640, 480, 8, 0, 0);


Console.ReadLine();

Notice that closing your application rolls everything back to its original state.
It is worth mentioning that, trying to change the display settings to a mode that is not supported by the display throws NotImplementedException. Despite this, you can enumerate all display modes by the enumDisplayModes() function.

The Last Word

You can use this technique to change the display settings at the beginning of the application and let the runtime return it back for you when closing the application. For instance, you could add the code to the Main() function and everything will be returned back after the last line of Main() completes.

Posted in COM Interop Tagged: .NET, CodeProject, COM, CSharp, DirectX, Interoperability

Mohammad Elsheimy is a developer, trainer, and technical writer. He is a MCP, MCTS (WinForms), MCPD (Windows Apps), MCSA (SQL Server), MCSE (Data Analytics), and MCT expertized in .NET Framework technologies, data management and analytics. He is also a Project Management Professional (PMP) and a Quranic Readings Institute (Al-Azhar) graduate specialized in Quranic readings, Islamic legislation, and the Arabic language.

I wrote this article in Arabic too. Check out the Arabic version here. 

Introduction 

It is common to change the screen resolution when working with some applications. In addition, games automatically change the screen resolution (bounds) and color system (bit count) to accommodate performance issues.

Overview

This lesson focuses on how to change the screen resolution and color system programmatically via DirectX. It starts with an overview about how Windows satisfies user’s need through the Display Settings window. Then, it digs into discussing how to retrieve these settings and to change these programmatically in the .NET environment.

Background

In Windows, you can change display settings from Display Settings window where you can change screen resolution and color system. Figure 1 shows the Display Settings window.

Display Settings

Figure 1. Display Settings Dialog

However, your screen might support more than these settings. For instance, it could support 8 bit color system which you cannot see in the colors list.

To list all modes that are supported by your screen, you can click Advanced Settings, then List All Modes button to display all modes supported and change to the desired mode. Figure 2 shows the List All Modes dialog.

Display List All Modes

Figure 2. Listing All Display Modes Supported

What is a mode? A mode is a combination of four settings, resolution (width and height,) orientation (rotation,) bit count (color system,) and frequency (refresh rate.)

Accessing the DirectX Library

DirectX is the technology of choice when working with multimedia of any type. Here in this lesson, we will focus on how to use DirectX to retrieve screen settings and to change them in the .NET environment.

DirectX consists of many libraries of which every library is specialized in some processing. The library we are interested in is dx3j.dll (Direct 1.0 Type Library) which resides in the System32 folder. You can reference this library in your project by adding it from the Add Reference dialog from the COM tab. Because it is a COM component, you end up creating an interop assembly (DIRECTLIB.dll) for accessing the library. Figure 3 shows the Add Reference dialog.

Figure 3. Adding Direct 1.0 Type Library to References

Figure 3. Adding Direct 1.0 Type Library to References

Because there is no such compatibility between .NET and unmanaged code, you cannot call COM components directly. Instead, you may create a RCW (Runtime Callable Wrapper) assembly that acts as a proxy to the COM component. RCWs also called Interop Assemblies are created automatically when you try to reference a COM component in Visual Studio .NET. However, if you want to have more control over the creation process, you can create your RCW via the tool tlbimp.exe. This tool allows you to control the RCW at a granular level. For instance, it allows you to sign the RCW, change its name and version, and to control the marshalling process of the unmanaged types. It is worth mentioning that ActiveX COM components are created with the tool aximp.exe not tlbimp.exe.

Retrieving Current Display Settings

After referencing the required DirectX library, you can now dig into the details of programmatically retrieving and changing display settings.

You can access display settings from the _dxj_DirectDrawClass that resides in our RCW assembly.

The getDisplayMode() function is used to retrieve current display mode information; it accepts a single output parameter that is of type DDSurfaceDesc which encapsulates the retrieved data.

Like other DirectX structures, DDSurfaceDesc is fairly big. However, here, we are interested in four members:

  • width and height:
    Represent the screen bounds (resolution)
  • rgbBitCount:
    Represents the bit count (color system) of the screen
  • refreshRate:
    Represents the screen refresh rate (monitor flicker)

Now, it is the time for the code retrieves current display mode information:


DIRECTLib._dxj_DirectDrawClass ddraw =
    new DIRECTLib._dxj_DirectDrawClass();



DIRECTLib.DDSurfaceDesc desc =
   new DIRECTLib.DDSurfaceDesc();


ddraw.getDisplayMode(out desc);


Console.WriteLine("{0} by {1}, {2} bit, {3} Hertz",
    desc.width, desc.height,
    desc.rgbBitCount, desc.refreshRate);

Changing Current Display Settings

Changing the current display settings is very easy. All you need is to provide the new settings to the setDisplayMode() function.

The setDisplayMode() function takes five parameters. However, we are interested in the first three parameters:

  • w:
    The screen width
  • h:
    The screen height
  • bpp:
    The bit count (color system)

The following code sets the display bounds to 640 by 480, and sets the bit count to only 8. I think that feeling reminds you of the ancients Windows ME and its ascendants specially before installing the video driver.

DIRECTLib._dxj_DirectDrawClass ddraw =
    new DIRECTLib._dxj_DirectDrawClass();



ddraw.setDisplayMode(640, 480, 8, 0, 0);


Console.ReadLine();

Notice that closing your application rolls everything back to its original state.
It is worth mentioning that, trying to change the display settings to a mode that is not supported by the display throws NotImplementedException. Despite this, you can enumerate all display modes by the enumDisplayModes() function.

The Last Word

You can use this technique to change the display settings at the beginning of the application and let the runtime return it back for you when closing the application. For instance, you could add the code to the Main() function and everything will be returned back after the last line of Main() completes.

Posted in COM Interop Tagged: .NET, CodeProject, COM, CSharp, DirectX, Interoperability

Mohammad Elsheimy is a developer, trainer, and technical writer. He is a MCP, MCTS (WinForms), MCPD (Windows Apps), MCSA (SQL Server), MCSE (Data Analytics), and MCT expertized in .NET Framework technologies, data management and analytics. He is also a Project Management Professional (PMP) and a Quranic Readings Institute (Al-Azhar) graduate specialized in Quranic readings, Islamic legislation, and the Arabic language.

Иконка разрешения экрана
Часто абсолютно банальные операции на ПК требуют упрощенного управления. Такая необходимость возникает и при изменении разрешения дисплея. Казалось бы, с этим могут справиться и утилиты ОС Windows, но как показывает практика – в некоторых случаях этого недостаточно.

На помощь приходят приложения, позволяющие менять как стандартные свойства — битность и разрешение, так и расширенные – частоту обновления. Некоторые из представленных решений могут изменять различные значения, когда используются горячие клавиши, что гораздо проще в сравнении со стандартными способами. Кроме всего прочего, в одной из программ реализована функция, позволяющая подключать к компьютеру несколько устройств вывода, для каждого из которых предварительно устанавливаются свои значения.

Carroll

При выборе разрешения данные применяются для всех пользователей ПК. Представленный программный продукт позволяет применять разные значения при необходимости. Информация запоминается, чтобы не вводить каждый раз одни и те же цифры. Предоставляется довольно большой список, в котором собрано множество вариантов на ваш выбор. Программа представлена в едином окне и имеет минимальный набор элементов – соответственно своей специализации. Притом, русскоязычная версия этого приложения не так и необходима.

Интерфейс программного продукта Carroll

Скачать Carroll

HotKey Resolution Changer

Основное предназначение программы заключается в изменении разрешения для подключенных мониторов к ПК. Кроме того, можно выбирать битность и герцовку, которые также присутствуют в настраиваемых параметрах этого ПО. Использование горячих клавиш значительно упрощает выбор разных параметров для каждого отдельного устройства. Для сохранения данных, введённых пользователем, присутствуют профили, максимальное количество которых достигает девяти. Приложение находится в трее и потребляет ресурсы системы в минимальном количестве. Версия утилиты не поддерживает русский язык, но предоставляется разработчиком бесплатно.

Интерфейс программного продукта HotKey Resolution Changer

Скачать HotKey Resolution Changer

MultiRes

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

Управление программой MultiRes

Скачать MultiRes

Рассмотренное ПО пригодится для выполнения задач с изменением свойств экрана. Задействование горячих клавиш при этом будет удобно в повседневной работе с несколькими дисплеями.

Еще статьи по данной теме:

Помогла ли Вам статья?

В свое время вставала задача программно изменить разрешение экрана монитора в windows.

Для изменения разрешения экрана есть специальная функция WIN32 API с именем ChangeDisplaySettings в неё необходимо передать указатель на структуру типа DEVMODE, где указывается желаемое разрешение. Естественно, что Ваш монитор и видеокарта должны это разрешение поддерживать.

Естественно, хорошим тоном будет предварительное сохранение предыдущих настроек экрана и возврат после окончания работы программы (или той части программы, где изменяется разрешение) .

// Screen.cpp : Defines the entry point for the console application.
//
#include “stdafx.h”
#include “windows.h”
void main(){
DEVMODE dm;
memset(&dm,0,sizeof(DEVMODE));
dm.dmSize=sizeof(DEVMODE);
dm.dmPelsWidth=800;
dm.dmPelsHeight=600;    dm.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT|DM_DISPLAYFREQUENCY;    ChangeDisplaySettings(&dm,CDS_UPDATEREGISTRY);
}

form.top=screen.height/2-form.height/2
form.left=screen.width/2-form.width/2

// Еще один вариант получения информации о мониторе

procedure TForm1.Button1Click(Sender: TObject);
Var    TC,BPP,CP,VR,x:  integer; x2:real;
begin
BPP:=GetDeviceCaps(Form1.Canvas.Handle,BITSPIXEL);
CP:=GetDeviceCaps(Form1.Canvas.Handle,PLANES);
x2:=intpower(2,BPP);
x2:=intpower(x2,CP); TC:=round(x2);
Label1.Caption:=’Бит на пиксел: ‘+IntToStr(BPP);
if (TC<3) then  Label2.Caption:=’Монохромный дисплей ‘ else
Label2.Caption:=’Число цветов: ‘+IntToStr(TC);
end;

//
VR:=GetDeviceCaps(Form1.Canvas.Handle,VREFRESH);

// непосредственно.. Изменить разрешение монитора
procedure Display( X, Y : Word );
var
dm : TDEVMODE;
begin
ZeroMemory( @dm, sizeof( TDEVMODE ) );
dm.dmSize := sizeof ( TDEVMODE );
dm.dmPelsWidth := X;
dm.dmPelsHeight := Y;
dm.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
ChangeDisplaySettings( dm, 0 );
end;
// установить разрешение монитора

procedure SetScreen(BPP: byte; width, height, FR: integer);
var
D: TDevMode;
h: HWND;
begin
h:=0;
D.dmDeviceName:=’DISPLAY’;
D.dmBitsPerPel:=BPP;
D.dmDisplayFrequency:=FR;
D.dmPelsWidth:=Width;
D.dmPelsHeight:=Height;
D.dmFields:=DM_BITSPERPEL+DM_PELSWIDTH+DM_PELSHEIGHT+DM_DISPLAYFREQUENCY;
D.dmSize:=SizeOf(D);
if ChangeDisplaySettings(D,CDS_TEST)=DISP_CHANGE_SUCCESSFUL then
ChangeDisplaySettings(D,CDS_UPDATEREGISTRY)
else
MessageBox(h,’Этот режим не поддерживается видеокартой.’,
‘Ошибка изменения режима!’, MB_ICONWarning);
end;

Вызывается так: SetScreen(глубина цвета, разрешение по горизонтали, разрешение по вертикали, частота в герцах);
Например:
SetScreen(16,800,600,80); {16 бит цвет, 800х600, 80Гц.}

* Найдено на форумах, опробовано и сведено воедино давненько. Просьба отписаться, если работает. :)

Метки: api, win32, программирование


Опубликовано
Воскресенье, Октябрь 5, 2008 в 16:19 в следующих категориях: Без рубрики.
Вы можете подписаться на комментарии к этому сообщению через RSS 2.0.

Вы можете добавить комментарий, или trackback со своего сайта.

Автор будет признателен, если Вы поделитесь ссылкой на статью, которая Вам помогла:

BB-код (для вставки на форум)

html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)

ссылка (для отправки по почте)

-9 / 0 / 0

Регистрация: 16.06.2017

Сообщений: 180

1

Как программно изменить разрешение экрана?

26.07.2017, 12:29. Показов 2004. Ответов 7


Помогите!

Есть допустим 5 кнопок
Первая подписана как «800×600»
Вторая «1024×768»
Третья «1152×864»
Четвертая «1280×720»
Пятая «1280×768»

При нажатие на кнопку, меняется разрешение экрана

Это не помогает, при изменение разрешение, код перестаёт работать
https://www.cyberforum.ru/post2356301.html

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



220 / 173 / 73

Регистрация: 05.11.2015

Сообщений: 525

26.07.2017, 13:24

2

Moxer, для примера проект (там правда сделал только 2 разрешения)
Которое было у меня по умолчанию и 1024Х768



1



Модератор

Эксперт .NET

3861 / 3184 / 479

Регистрация: 27.01.2014

Сообщений: 5,809

26.07.2017, 19:24

3

Moxer, код в первом топике работает, но после его выполнения необходимо вызвать API для применения изменений в реесте БЕЗ ПЕРЕЗАПУСКА. Тоже есть на форуме. Поищите.



1



-9 / 0 / 0

Регистрация: 16.06.2017

Сообщений: 180

26.07.2017, 20:40

 [ТС]

4

bd13 у вас проект плохо работает, вы его очень криво перенесли тут уж легче код показать
не возможно ничего найти, код видно, но множество ошибок, из за того что не все файлы открыты



0



bd_13

220 / 173 / 73

Регистрация: 05.11.2015

Сообщений: 525

27.07.2017, 08:33

5

Moxer, Я к сожалению, не вижу какие у вас там ошибки, и чего Вы хотели найти и не смогли,но вот код:
Проект абсолютно рабочий.

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Imports System.Collections.Generic
 
 
Public Class Form1
 
 
    Private h As Integer
 
    Private w As Integer
 
    Public Sub New()
        MyBase.New()
        InitializeComponent()
        Me.h = Screen.PrimaryScreen.Bounds.Height
        Me.w = Screen.PrimaryScreen.Bounds.Width
        Button2.Text = Me.w & "X" & Me.h
 
    End Sub
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim n As MyTactics.blogspot.com.NewResolution = New MyTactics.blogspot.com.NewResolution(1024, 768)
    End Sub
 
 
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim n As MyTactics.blogspot.com.NewResolution = New MyTactics.blogspot.com.NewResolution(Me.w, Me.h)
 
    End Sub
End Class

не забудьте про то чо необходимо «подцепить» библиотеку — MyTactics.blogspot.com.dll



2



220 / 173 / 73

Регистрация: 05.11.2015

Сообщений: 525

27.07.2017, 10:14

6

вот сама библиотека



1



Модератор

Эксперт .NET

3861 / 3184 / 479

Регистрация: 27.01.2014

Сообщений: 5,809

30.07.2017, 18:39

7

bd_13, да, но неудобен тем, что библиотеку таскать с собой надо.
Повторюсь, при смене разрешения через реестр, нужно программно применить, через те же API, изменения в реестре без перезапуска… Памирыч давал пример где-то на форуме… Поищите.



1



220 / 173 / 73

Регистрация: 05.11.2015

Сообщений: 525

31.07.2017, 08:57

8

Yury Komar, Да, я видел пример!
Но не было оговорено в теме, какими средствами менять разрешения. Я нашел вот такой вот способ. И он так же имеет место быть! А создатель темы пусть сам определяет, что ему и как) и какой пример ему больше подходит!!!



1



Большинство обычных компьютерных мониторов (как и телевизоров) поддерживает частоту обновления кадров 60 Гц. Этого достаточно для обеспечения приемлемой плавности движения, но не во всех случаях. В компьютерных играх, где дискретизация ухудшает динамичный игровой процесс, используются мониторы с вдвое большим показателем – 120 Гц и даже выше. Означает ли это, что обычные мониторы жёстко ограничены стандартным значением частоты смены кадров? Отнюдь, и сегодня вы узнаете, как преодолеть этот барьер.

Утилита Custom Resolution Utility

Custom Resolution Utility – что это за программа

Если производитель матрицы заявляет о поддержке частоты обновления кадров на уровне 60 Гц, это означает, что если вы захотите воспользоваться программами, тестирующими параметры монитора, можете быть уверенными, что именно этот показатель будет на уровне. В противном случае производителю не избежать судебных исков, инициированных потребителями.

На практике это означает, что на любом мониторе, в технических характеристиках которого говорится о частоте обновления экрана, равной 60 Гц, реализована возможность работать с несколько большей частотой. Поскольку процесс производства матрицы технологически достаточно сложный, лучше обезопасить себя от возможных неприятных последствий, изначально заложив некоторую погрешность относительно частоты обновления экрана. И, конечно же, в большую сторону.

Разная частота обновления экрана

Другими словами, любой монитор технически способен поддерживать частоту обновления больше паспортной, причём упомянутый запас составляет примерно 25%. И если это 60 Гц, то фактически монитор способен поддерживать порядка 75 Гц. Можно ли заставить монитор работать на такой частоте?

Оказывается – да. Любителям оверклокинга и плавного просмотра динамичных сцен это понравится, поскольку реализуется такая возможность чисто программным способом. Например, утилитой Custom Resolution Utility. Кроме поднятия частоты обновления экрана, программа умеет настраивать разрешение вашего монитора, но здесь уже не выходя за пределы паспортных технических характеристик.

Custom Resolution Utility поддерживает практически все модели видеоадаптеров ATI/AMD, NVIDIA и в состоянии правильно работать с отдельными моделями видеокарт от Intel. Правда, есть ограничения со стороны ОС – утилита не будет функционировать в компьютерах с Windows XP, с версиями от Vista и выше проблем возникнуть не должно.

Настройка Custom Resolution Utility

Любые манипуляции с разрешением чреваты тем, что монитор потухнет и вы не сможете вернуть настройки обратно простым способом. Чтобы избежать такого сценария, желательно перед установкой утилиты Custom Resolution Utility скачать, инсталлировать и запустить любую программу, предоставляющую возможность у. Неплохие рекомендации у TeamViewer, но можно использовать любое ПО данного класса, выдаваемое по запросу в Google в топ-10.

Более простой способ вернуть прежние настройки, если что-то пойдёт не так – перезагрузить Windows в безопасном режиме.

ВНИМАНИЕ. Нужно понимать, что программным способом вывести из строя дисплей невозможно, однако любые манипуляции с монитором вы будете производить на свой страх и риск – разработчик Custom Resolution Utility снимает с себя ответственность за ваши действия.

Итак, порядок действий по инсталляции и первичной настройке Custom Resolution Utility:

В результате проделанных действий экран должен сначала погаснуть, а потом перейти в тот режим, который вы задали. Если он окажется не под силу видеокарте, монитор останется чёрным, и вернуть прежние настройки можно будет обходным путём – через удалённый доступ, в режиме восстановления или безопасном режиме.

А теперь о том, что прописать в параметре Timing (Тайминг). Здесь, нажав на стрелку, вы получите достаточно длинный список из доступных режимов:

  • Manual – дефолтное значение, предоставляющее возможность задания параметров синхронизации вручную;
  • Automatic — LCD standart – режим, позволяющий установить стандартные характеристики синхронизации, соответствующие жидкокристаллическим мониторам, а также современным моделям ТВ высокой четкости;
  • режим «Automatic — LCD native» следует выбирать, если требуется установить стандартные временные характеристики для увеличенной или нестандартной частоты обновления, обычно используется при повышении частоты сверх номинальной;
  • «Automatic — LCD reduced» – режим, позволяющий манипулировать временными параметрами синхронизации для уменьшения количества пикселей, чтобы добиться увеличение частоты смены кадров;
  • режим «Automatic — CRT standard» выбирают для старых ЭЛТ мониторов.

Параметр «Timing» в Custom Resolution Utility

Refresh rate не нужно пытаться установить на максимум, просчитанный по нашей методике: она усреднённая, так что не гарантирует, что можно повышать частоту именно на 25%. Рекомендуется увеличивать значение этого параметра на 1-3 пункта, после чего жать ОК и наблюдать результаты. Если всё хорошо, можно приступать к следующей итерации, пока не достигнете потолка для данной модели монитора.

Как пользоваться утилитой Custom Resolution Utility

Мы уже отмечали, что слишком большое значение Refresh rate может привести к тому, что видеокарта не сможет отправлять данные на монитор с такой частотой, в результате чего он останется чёрным. Но даже если вы подобрали максимальное значение, при котором изображение видно, это не означает, что вы добились желаемого: работу графической подсистемы необходимо протестировать, поскольку при завышенной частоте возможно появление артефактов, и тогда Refresh rate нужно будет уменьшать.

Переход к параметрам в Windows 10

Раздел «Система» в Windows 10

В принципе описанный выше алгоритм, как поменять разрешение и частоту обновления с помощью Custom Resolution Utility, достаточен для того, чтобы внесённые изменения заработали после запуска restart.exe или её 64-битной версии. Функция этих двух микропрограмм единственная – перезапустить драйвер видеоадаптера, и обычно так и происходит. Теперь, когда вы зайдёте в панель управления видеокартой стандартными средствами Windows, вы увидите, что в списке доступных разрешений и частот обновления экрана появились новые значения – те, которое вы вводили во время наращивания Refresh rate. Они будут доступны до момента переустановки операционной системы, после чего всю процедуру нужно будет повторять заново.

Кнопка «Дополнительные параметры дисплея»

Новая частота обновления экрана

Желательно протестировать работу графической подсистемы после внесённых изменений с помощью стороннего софта или даже в режиме онлайн, например, на сайте TestUFO.

Добавление поддержки AMD FreeSync

В главном окне утилиты Custom Resolution Utility внизу имеется раздел Extension Block. Если он пустой, нужно кликнуть кнопку Add, если нет, то выберите режим CEA-861 и нажмите Edit. Откроется новое окно, в котором в нижнем блоке (Data Blocks) нужно нажать кнопку Add и в появившемся списке выбрать значение FreeSync range. Затем нужно выбрать значение частоты развертки в диапазоне 50-60 Гц и нажать ОК. Затем – перезапустить драйвер видеокарты любым из описанных способов. Если графическая подсистема будет работать стабильно, можно попытаться повысить герцовку монитора и продолжать итерации до получения оптимального значения.

Кнопка «Add» в разделе Extension Block

Добавление AMD FreeSync

Включение HDR на мониторах без поддержки этого режима

Процедура аналогична включению FreeSync – снова идём в Data Blocks, жмём Add, но в появившемся списке выбираем пункт HDR static metadata. После нажатия ОК необходимо в окне HDR Static Metadata выбрать пункт Traditional gamma — HDR. Впрочем, режим High Dynamic Range может и не включиться – всё зависит от конкретной модели монитора. Отметим, что данная функция не имеет никакого отношения к железу – она эмулирует работу HDR, и разница со стандартным изображением будет не всегда заметной.

Параметр «HDR static metadata» в Custom Resolution Utility

Параметр «Traditional gamma - HDR» в Custom Resolution Utility

Заключение

Для обычных пользователей повышение герцовки монитора вряд ли жизненно необходимо. Да и заметить разницу получится не у всех, особенно если повышение небольшое, в пределах 5-10 Гц. А вот увеличение на 20-25 Гц может уменьшить рассинхронизацию, особенно в динамичных играх – при просмотре обычного видео разница в частоте обновления кадров не столь важна, поскольку для человеческого глаза уже 25 Гц – это общемировой стандарт. Впрочем, восприимчивость глаза существенно выше – до 100 Гц, но на небольших экранах требуемая плавность достигается на невысоких значениях частоты. В играх ситуация несколько иная – там все кадры резкие, к тому же игрок управляет процессом, происходящим в кадре, поэтому здесь частота должна быть выше обычной.

Понравилась статья? Поделить с друзьями:
  • Как программно изменить размер формы 1с
  • Как программно изменить размер кнопки
  • Как программно изменить порядок колонок 1с
  • Как программно изменить положение колонки 1с
  • Как программно изменить пароль пользователя 1с