Windows 10 Sklaierung von Apps und Fenster, deaktivieren

FJK

Erfahrenes Mitglied
Hallo zusammen,

ich bin grade auf ein blödes Windows Problem gestoßen...
Mein Monitor hat eine hohe Auflösung, daher ist unter der Anzeige-Einstellung des Windows 10 Betriebssystem eine Skalierung für Apps, Fenster und co. von 200% angegeben.
Das ist auch alles erstmal vernünftig...
Wenn ich jetzt jedoch ein Programm schreibe mit einer grafischen Ausgabe in der ich Bilder darstellen möchte, kann ich diese Bilder nicht in der nativen Auflösung plotten, da Windows diese mir nun vergrößert darstellt.
Ich kann nun auch nicht die Bilder im Programm intern verkleinern, da mir dann Informationen verloren gehen.
Ich habe dieses Problem zum Beispiel unter c++ mittels OpenCV oder auch in C#.
Für das Programmieren verwende ich Visual Studio 2015 express.
Kann ich in meinen Programm irgendwie die Betriebssystem bedingte Vergrößerung für einzelne Fenster Code mäßig deaktivieren und den Betriebssystem mitteilen das dieses nicht die Auflösung des Fenstern verändern darf?
Ich habe auch schon gesucht, leider finde ich keine Informationen dazu.

bin für jede Hilfe dankbar
Das Skalieren Betriebssystembedingt dauerhaft auszuschalten wäre keine Lösung, da dann die einzelnen Steuerelemente aller Programme nicht mehr wirklich bedient werden können.
 
Zuletzt bearbeitet:

cwriter

Erfahrenes Mitglied
Dafür kannst du das Manifest benutzen:
https://msdn.microsoft.com/en-us/library/windows/desktop/ff684173(v=vs.85).aspx

Allerdings sollten bei den meisten Frameworks mit Bildausgabe die DPI-Einstellungen respektiert werden, d.h. ein Bild sollte immer in der maximal möglichen Auflösung gerendert werden.

Es gibt auch noch das hier: https://msdn.microsoft.com/en-us/library/windows/desktop/mt748629(v=vs.85).aspx

Aber das sind beides relativ schlimme Hacks. Wenn man ein Programm selber schreibt, nimmt einem Normalerweise(TM) das Framework die Arbeit ab. Im Falle von Qt kann man bspw. ein eigenes Widget definieren und kann sich darin austoben, seine Awareness also selbst setzen.
OpenCV ist dahingehend halt auch nicht wirklich als Darstellungsprogramm gedacht, die Darstellungen sind ja eher zum Debuggen da.

Genaueres kann ich erst sagen, wenn das benutzte Framework bekannt ist.

Gruss
cwriter
 
  • Gefällt mir
Reaktionen: FJK

FJK

Erfahrenes Mitglied
Hallo cwriter,

danke für den Hinweis mittels der dpi. Die originalen Bilder auf der Festplatte besitzen eine dpi vom 300. Die Bilder im Programm dann eine dpi von 96. Es gibt hier zwar ein Attribut der OpenCV Klasse Mat, jedoch kann man dies scheinbar nur lesen.
Ich verwende Visual Studio 2015 express in einer Konsolenanwendung für 64 Bit Systeme. Die OpenCV Version ist die 3.1.0. Als Betriebssystem ist Windows 10 pro.

Also das die Ausgaben von OpenCV recht Performance schwach ist und einen noch so guten Algorithmus ausbremst ist mir auch schon aufgefallen.
Was schlägst du hier vor für die Ausgabe, Qt?
 

cwriter

Erfahrenes Mitglied
Es gibt hier zwar ein Attribut der OpenCV Klasse Mat, jedoch kann man dies scheinbar nur lesen.
Du kannst mit den OpenCV-Windowbefehlen wie https://docs.opencv.org/2.4/modules/highgui/doc/user_interface.html#namedwindow zuerst ein Fenster mit einer Toolbar erstellen und das dann skalieren lassen. Aber wie gesagt ist nichts davon so wirklich für den Produktiveinsatz gedacht.
Aber wenn du wirklich nur OpenCV-Fenster benutzt, ist das Manifest wohl am effizientesten.

Also das die Ausgaben von OpenCV recht Performance schwach ist und einen noch so guten Algorithmus ausbremst ist mir auch schon aufgefallen.
Was schlägst du hier vor für die Ausgabe, Qt?
Naja, Ausgabe ist immer das Langsamste. Kein Framework ist da besonders schnell. Ich weiss ja nicht, was du machen willst, wenn du wenig bis keine Nutzereingabe erwartest, ist jedes GUI-Framework Overkill. Am meisten Speedup bekommst du durch Weglassen der Ausgabe, und sonst halt durch Parallelisierung.

Gruss
cwriter
 
  • Gefällt mir
Reaktionen: FJK

FJK

Erfahrenes Mitglied
Also die Flags für "namedWindow" machen keinen unterschied, an die hatte ich gestern auch schon gedacht ;)
 

cwriter

Erfahrenes Mitglied
Also auch die Qt-Flags bringen keinen unterschied.
Ok, aber dann hast du kein Qt-Backend installiert (i.e. du hast die modernere Darstellungsart gar nicht). Guckst du hier: https://wiki.qt.io/How_to_setup_Qt_and_openCV_on_Windows

was meinst du mit "Manifest"?
Naja, die Manifestdatei?
Googlen würde helfen, aber es geht auch direkter:
Unter Projekteigenschaften->Manifest Tool->Input and Output->DPI Awareness kannst du die Optionen durchprobieren. Ich würde mal Per-Monitor-DPI-Aware nehmen. (Auf deutsch könnte alles ein bisschen anders heissen, daher Screenshot).

upload_2018-2-25_19-17-36.png

Damit (= DPI-Aware != None) sollte es eigentlich nicht mehr skalieren (im Guten wie im Schlechten...).

Gruss
cwriter
 
  • Gefällt mir
Reaktionen: FJK