Получить размер пикселя во время выполнения в C # [дубликат]

Порядок, в котором указаны взаимозависимые связанные библиотеки, неверен.

Порядок, в котором связаны библиотеки, имеет значение, если библиотеки зависят друг от друга. В общем случае, если библиотека A зависит от библиотеки B, тогда libA ДОЛЖЕН появляться перед libB в флагах компоновщика.

Например:

// B.h
#ifndef B_H
#define B_H

struct B {
    B(int);
    int x;
};

#endif

// B.cpp
#include "B.h"
B::B(int xx) : x(xx) {}

// A.h
#include "B.h"

struct A {
    A(int x);
    B b;
};

// A.cpp
#include "A.h"

A::A(int x) : b(x) {}

// main.cpp
#include "A.h"

int main() {
    A a(5);
    return 0;
};

Создайте библиотеки:

$ g++ -c A.cpp
$ g++ -c B.cpp
$ ar rvs libA.a A.o 
ar: creating libA.a
a - A.o
$ ar rvs libB.a B.o 
ar: creating libB.a
a - B.o

Скомпилируйте:

$ g++ main.cpp -L. -lB -lA
./libA.a(A.o): In function `A::A(int)':
A.cpp:(.text+0x1c): undefined reference to `B::B(int)'
collect2: error: ld returned 1 exit status
$ g++ main.cpp -L. -lA -lB
$ ./a.out

Чтобы повторить снова, порядок имеет значение!

9
задан Henk Holterman 12 August 2013 в 16:03
поделиться

4 ответа

По моему мнению, лучшим решением является извлечение этой информации из [ED] монитора

. Как получить собственное разрешение ответа: Как получить NATIVE разрешение подключенного монитора из файла EDID через VB6.0?

Я сделал небольшой javascript, который получает разрешение из 8 байтов, начиная с 54.

var dtd = 0;
var edid =  new Uint8Array(8);
var i = 0;

edid[i++] = 0x0E;
edid[i++] = 0x1F;
edid[i++] = 0x00;
edid[i++] = 0x80;
edid[i++] = 0x51;
edid[i++] = 0x00;
edid[i++] = 0x1B;
edid[i++] = 0x30;

var horizontalRes = ((edid[dtd+4] >> 4) << 8) | edid[dtd+2] ;
var verticalRes = ((edid[dtd+7] >> 4) << 8) | edid[dtd+5];
console.log(horizontalRes+", "+verticalRes);

, и вот версия C #:

    static Point ExtractResolution(byte [] edid)
    {
        const int dtd = 54;
        var horizontalRes = ((edid[dtd + 4] >> 4) << 8) | edid[dtd + 2];
        var verticalRes = ((edid[dtd + 7] >> 4) << 8) | edid[dtd + 5];
        return new Point(horizontalRes, verticalRes);
    }
3
ответ дан Community 24 August 2018 в 00:06
поделиться

В WinForms вы можете использовать один из

var someScreen = Screen.AllScreens[i];
var mainScreen = Screen.PrimaryScreen;

, а экран имеет границы (брутто) и прямоугольник WorkingArea (net).

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

3
ответ дан Henk Holterman 24 August 2018 в 00:06
поделиться

Попробуйте что-то вроде этого: -

GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width
GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height

Чтобы получить текущее разрешение экрана, вы можете использовать: -

Rectangle resolution = Screen.PrimaryScreen.Bounds;

Теперь для изменения разрешения.

Проверьте эту ссылку .

Screen screen = Screen.PrimaryScreen;
int S_width=screen.Bounds.Width;
int S_height=screen.Bounds.Height;
3
ответ дан Rahul Tripathi 24 August 2018 в 00:06
поделиться

Как правило, максимальное разрешение является основным разрешением для ЖК-дисплеев. Однако это не всегда так. Если мы можем использовать там, получить Max Resolutions должно быть достаточно.

Максимальное разрешение может быть получено с помощью:

    [DllImport("user32.dll")]
    private static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DeviceMode devMode);

    /// <summary>
    /// Gets the max resolution + refresh rate supported by specific display
    /// </summary>
    /// <param name="deviceName">Device name(System.Windows.Forms.Screen.DeviceName)</param>
    /// <param name="dispWidth">Width of the display</param>
    /// <param name="dispHeight">Height of the display</param>
    /// <param name="refreshRate">Refresh rate of the display</param>
    /// <returns></returns>
    public static void GetMaxResolutionWithRefreshRate(string deviceName, out int dispWidth, out int dispHeight, out int refreshRate)
    {
        dispWidth = dispHeight = refreshRate = 0;
        DeviceMode deviceMode = new DeviceMode();
        for (int i = 0; Win32.EnumDisplaySettings(deviceName, i, ref deviceMode) != 0; i++)
        {
            if (deviceMode.dmPelsWidth > dispWidth || (deviceMode.dmPelsWidth == dispWidth && deviceMode.dmPelsHeight >= dispHeight && deviceMode.dmDisplayFrequency >= refreshRate))
            {
                dispWidth = deviceMode.dmPelsWidth;
                dispHeight = deviceMode.dmPelsHeight;
                refreshRate = deviceMode.dmDisplayFrequency;
            }
        }
    }

public static void GetMaxResolutionWithRefreshRate(out int dispWidth, out int dispHeight, out int refreshRate)
    {
        GetMaxResolutionWithRefreshRate(null, out dispWidth, out dispHeight, out refreshRate);
    }
3
ответ дан Ronak Agrawal 24 August 2018 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: