dandy72 Ответов: 3

Создать изображение, которое выглядит, как Windows настройки дисплея экран


Всем привет,

Кто-нибудь когда-нибудь смотрел на программное воссоздание макета монитора, как показано в диалоговом окне настройки дисплея в Windows? Я говорю об экране, который показывает все ваши мониторы, и о том, как они расположены друг относительно друга. В Windows 10 вы попадаете туда, щелкнув правой кнопкой мыши на рабочем столе и выбрав пункт настройки дисплея. В Windows 7 вы щелкаете правой кнопкой мыши на рабочем столе и выбираете Разрешение экрана.

В наши дни люди могут иметь сложные макеты, и знание того, какую конфигурацию они используют, может пригодиться в некоторых случаях. Хотя тривиально получить все * значения*, описывающие макет, путем итерации по системе.Окна.Формы.Экраны.Все экраны (в частности, экран.Границы), визуализация этих чисел может быть довольно сложной, особенно когда у вас есть более 2 мониторов, и вы добавляете отрицательные координаты поверх этого.

Мой вопрос: Кто-нибудь когда-нибудь пытался использовать эти значения для визуализации изображения из них? Очевидно, я бы не хотел чего-то такого, что было бы 1:1; маленький эскиз-это все, что мне нужно. Бонус, если он может отображать координаты в верхнем левом / нижнем правом углах каждого монитора и идентифицировать их по имени (экран.DeviceName), и, возможно, даже показать, на какой стороне каждого монитора закреплена панель задач (что можно сделать через экран.Границы против экрана.Рабочая зона).

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

Что я уже пробовал:

Все это в системе.Окна.Формы.Экраны.Все экраны...Я просто не знаю, с чего начать, чтобы визуализировать все прямоугольники и превратить конечные результаты в изображение.

3 Ответов

Рейтинг:
2

OriginalGriff

Цитата:
У меня просто нет терпения сесть с ручкой и бумагой и точно выяснить, как визуализировать все элементы с помощью GDI
Тогда я подозреваю, что этого приложения не будет: если вы не можете потрудиться сделать эту работу, почему вы думаете, что мы хотим сделать это за вас?

Если вы хотите, чтобы кто-то написал ваш код, вы должны заплатить - я предлагаю вам пойти в Freelancer.com и спросите там.

Но знайте: вы получаете то, за что платите. Плати гроши, получай обезьян.

Идея "развития" заключается в том, что это слово предполагает: "систематическое использование научно-технических знаний для достижения конкретных целей или требований." BusinessDictionary.com[^]
Это не то же самое, что "быстро гуглите и сдавайтесь, если я не могу найти точно правильный код".
Так что либо заплатите кому-нибудь за это, либо научитесь писать сами. Мы здесь не для того, чтобы делать это за вас.


Рейтинг:
18

F-ES Sitecore

Надеюсь, это поможет вам начать работу

static void Main(string[] args)
{
    // 120 x 120 thumbnail
    Bitmap image = new Bitmap(120, 120);

    Graphics g = Graphics.FromImage(image);
    g.Clear(Color.White);

    Pen p = new Pen(Color.Black, 3);

    // Primary display
    g.DrawLine(p, PrimaryDisplayEnabled(image), PrimaryDisplayDisabled(image));

    // Secondary display
    g.DrawLine(p, SecondaryDisplayEnabled(image), SecondaryDisplayDisabled(image));

    // Orientation
    g.DrawLine(p, OrientationLandscape(image), OrientationPortrait(image));

    // Resolution
    g.DrawEllipse(p, Resolution(image));

    image.Save(@"c:\temp\test.png", System.Drawing.Imaging.ImageFormat.Png);
}

private static Point PrimaryDisplayEnabled(Bitmap image)
{
    return new Point(image.Width - 110, image.Height - 110);
}

private static Point PrimaryDisplayDisabled(Bitmap image)
{
    return new Point(image.Width - 110, image.Height - 20);
}

private static Point SecondaryDisplayEnabled(Bitmap image)
{
    return new Point(image.Width - 110, image.Height - 110);
}

private static Point SecondaryDisplayDisabled(Bitmap image)
{
    return new Point((image.Width / 12) * 5 , image.Height - 20);
}

private static Point OrientationLandscape(Bitmap image)
{
    return new Point((image.Width / 12) * 5, (image.Width / 12) * 10);
}

private static Point OrientationPortrait(Bitmap image)
{
    return new Point((int)(image.Width * 1.5) - (image.Height + 10), 10);
}

private static Rectangle Resolution(Bitmap image)
{
    return new Rectangle((image.Width / 2) + 5, 10, image.Height / 3, 90);
}


dandy72

Это должно помочь мне начать работу, спасибо за это. Я читал книги Петцольда десятилетия назад и помню главы, посвященные такого рода вещам, и оказалось, что пользовательский рисунок с примитивами GDI-это то, чего мне посчастливилось (?) избегать так долго. Мне просто нужно сесть как-нибудь вечером и разобраться в математике. Это то, чего я пытался избежать-может быть, просто может быть, кто-то уже сделал это и опубликовал то, что, вероятно, составляет одну функцию. Это не может быть трудно, вы просто должны пройти через это один раз. Это не домашнее задание : -) это просто недостаточно приоритетно для меня, чтобы попробовать с нуля, не спрашивая сначала.

Я ценю ваш ответ, он определенно будет полезен. Как только я найду время, чтобы разобраться в этом, я буду счастлив поделиться результатами здесь.

dandy72

Просто нашел немного времени, чтобы попробовать...

Хотя я признаю юмор, это было более полезно, чем вы, вероятно, думаете. Это все еще именно так то, что мне нужно было для начала.

F-ES Sitecore

Рад, что вы, по крайней мере, увидели шутку :D Я действительно чувствовал себя очень плохо, когда вы опубликовали свой первоначальный комментарий :)

dandy72

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

В нынешнем виде код уже написан и выглядит *великолепно* (по крайней мере, я так думаю), но мне все еще нужно проверить, что происходит при работе с отрицательными координатами, которые, как я знаю, необходимо учитывать. Прямо сейчас что-то, вероятно, рухнет или, по крайней мере, очень сильно пострадает.

Рейтинг:
1

Dave Kreskowiak

Цитата:
Мой вопрос: кто-нибудь когда-нибудь пытался использовать эти значения для рендеринга изображения из них? Очевидно, я бы не хотел чего-то такого, что было бы 1:1; маленький эскиз-это все, что мне нужно. Бонус, если он может отображать координаты в верхнем левом / нижнем правом углах каждого монитора и идентифицировать их по имени (экран.DeviceName), и, возможно, даже показать, на какой стороне каждого монитора закреплена панель задач (что можно сделать через экран.Границы против экрана.Рабочая зона).

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