Random Thoughts And Coding
NegativeScreen
NegativeScreen est une application permettant d’inverser les couleurs de votre écran, afin par exemple, de ne pas se faire éblouir dans la pénombre.
Ce programme a été conçu pour faire son travail tout en gardant une fluidité d’animation maximale.
Les performances de l’ordinateur ne sont que très peu affectées.
Différents mode d’inversion sont proposés, dont des modes “intelligents”, permettant d’inverser le noir et le blanc tout en conservant des couleurs (presque) identiques.
Utilisation
Dès le lancement, l’inversion des couleurs s’active.
NegativeScreen ne possède qu’une interface graphique minimale sous la forme d’une icône associée à un menu contextuel, dans la zone de notification.
Le simple click active ou désactive l’inversion, tandis qu’un click droit fait apparaitre un menu contenant plus d’options.
En plus de ces commandes, NegativeScreen est aussi controlable uniquement en utilisant des touches de raccourcis.
Raccourcis par défaut
- Win+Alt+H Termine l’application (Halt, en anglais)
- Win+Alt+N Contrôle l’activation/désactivation du mode Nuit
- Win+Alt+F1-à-F11: change le mode d’inversion:
- F1: inversion standard
- F2: inversion intelligente 1 – transformation optimale en théorie (mais couleurs pures désaturées)
- F3: inversion intelligente 2 – haute saturation, couleurs pures bonnes
- F4: inversion intelligente 3 – ensemble désaturé, jaunes et bleus mauvais, en fait plutot relaxant et assez agréable
- F5: inversion intelligente 4 – haute saturation, jaunes et bleus mauvais, assez lisible
- F6: inversion intelligente 5 – pas tellement lisible, bonne couleurs. (couleurs CMJ un peu désaturées, toujours plus saturées que la normale)
- F7: sepia negatif
- F8: noir et blanc negatif
- F9: rouge negatif
- F10: rouge
- F11: noir et blanc
Configuration
La version 2.0 introduit un fichier de configuration, permettant de configurer pratiquement toutes les fonctions de NegativeScreen.
Il est par exemple possible de choisir des raccourcis claviers personnalisés, ou même d’ajouter de nouveaux effets en plus de l’inversion de couleur !
Notez que cela nécessite des connaissances sur les matrices de couleurs (color matrices)…
Il est possible que j’ajoute un moyen d’en générer plus facilement dans une version future…
Si le fichier de configuration est manquant (negativescreen.conf), vous pouvez utiliser le menu “Edit Configuration” qui régénérera automatiquement la configuration par défaut.
Si quelque chose tourne mal après avoir édité le fichier (un mauvais raccourci clavier faisant crasher le programme…) vous pouvez simplement supprimer le fichier de configuration, la configuration interne par défaut sera utilisée.
Version pour Windows XP
Malheureusement, l’API Magnification utilisé par cette application n’existe pas sur Windows XP.
J’ai donc le regret d’annoncer qu’il n’y aura pas de version compatible Windows XP de NegativeScreen.
Téléchargements
NegativeScreen est distribué gratuitement, ainsi que son code source, sous licence GPL.
- Dernière version binaire (directement utilisable)
- Ancienne version (non configurable, mais marche avec Windows Vista)
ChangeLog
Version 2.2, 2013-02-17 ------------------------ - [fixed] avoid crash if a hot key cannot be registered - [added] new ActiveOnStartup configuration option Version 2.1, 2012-12-22 ------------------------ - [fixed] crash on Windows 8 due to inter-threads calls (this was not a problem on Windows 7) - [added] new MainLoopRefreshTime configuration option Version 2.0, 2012-12-14 ------------------------ Major update: - reworked entirely - better performances - smooth transitions - graphic interface (minimal) - configuration file: - fine grained configuration - custom hotkeys - custom color effects Version 1.12, 2012-12-14 ------------------------ - [fixed] crash on Windows 8 Version 1.11, 2012-06-26 ------------------------ - [added] new red and negative red filters bound on F9 and F10 Version 1.10, 2012-05-15 ------------------------ - [fixed] infinite flickering on Vista (introduced in 1.8) Version 1.9, 2012-04-16 ------------------------ - [fixed] stupid bug if the Windows taskbar is vertical Version 1.8, 2012-03-22 ------------------------ - [fixed] execution is no longer prevented if aero is disabled (previous bug corrected) however, the performances will still be horrible Version 1.7, 2012-03-21 ------------------------ - [fixed] works as expected when using custom DPI settings Version 1.6, 2012-02-27 ------------------------ - [fixed] crash on X86 on launch - [fixed] prevent execution if aero is disabled (prevent undesirable behaviours: black screens, 100% CPU usage...) Version 1.5, 2012-02-16 ------------------------ - [fixed] (internal) ColorMatrix implementation - [added] new feature: choice between 9 inversion modes (smart mode, etc... see readme for details) Version 1.4, 2012-02-09 ------------------------ - [fixed] does not crash anymore on Windows Vista Version 1.3, 2012-02-01 ------------------------ - [fixed] multi-screen should finally work! after a lot of tests and coding, I re-thought completely the architecture - [knownbug] in some screen configurations, if the primary screen if smaller than the other screen, the second larger screen has a black border at its bottom. It could be a bug in the Windows API... Version 1.2, 2011-09-18 ------------------------ - [fixed] multi-screen support (again) : bug with main screen on the right Version 1.1, 2011-09-13 ------------------------ - [fixed] multi-screen support - [fixed] when halted while paused, the application never stopped Version 1.0, 2011-09-06 ------------------------ - Initial release
Vous pouvez retrouver ici l’article technique sur la réalisation de ce projet.
A better terminal color theme for Putty
about 6 months ago - 2 comments
Putty is a great terminal emulator for Windows, but its default color theme is pretty bad, especially for the blue colors, which are illegible: The good news is, someone already created a nice web tool to create a terminal theme, and to export it to several formats, including for Putty. Unfortunately, I had to edit…
Visual Studio snippet for a view model property, using the SetProperty() method
about 8 months ago - No comments
I spent my 3 months summer internship coding a Windows 8 application, and even though there now is a basic implementation of the INotifyPropertyChanged interface provided by Microsoft (BindableBase), I can tell you creating a view model for each view you need is very time consuming and boring, and not nearly as quick as I…
Changer l’image de fond de l’écran de login Windows 7
about 8 months ago - No comments
Une petite note à moi même qui pourra toujours être utile à d’autres… Il existe un petit logiciel très simple permettant de modifier l’image de fond de l’écran de login de Windows 7, et il m’arrive souvent de chercher plus longtemps que je n’aurais aimé avant de le retrouver, quand l’envie me prend de personnaliser…
How to find all implementations of IEnumerable not implementing ICollection
about 9 months ago - No comments
Following my last post on benchmarking madness, here is a short one about finding .net classes or interfaces based on given criteria. While writing my last post, I found myself having a hard time searching for classes implementing IEnumerable<T> without also implementing ICollection<T>. Indeed, beside String, there is not so many… This information is almost…
Benchmarking madness: IEnumerable
about 9 months ago - 1 comment
What is the best way to know if an IEnumerable<T> contains at least one element? I mean, what is the most optimized way to know this information? Maybe the first thing that came to my mind was to do some .Count() > 0 check, but if you think of it, the Count() extension method would…
How to dump the Android Shazam tag list database to a readable file
about 10 months ago - 4 comments
As the title says, I wanted to export my Shazam tag list from my Android phone to some format I could actually do something with. I found no working solution online, so here is mine… First, you need to get your hand on the database file. My phone is rooted and run a ssh server,…
How to dynamically add properties to an existing object – dynamic keyword trick
about 12 months ago - No comments
Les développeurs sont fainéants, c’est l’une de leurs nombreuses qualités… To Wrap or not to wrap Je travaille sur une bibliothèque .net pour une api REST, dont un des objets modèle contient une propriété stockant l’url d’une image. Mon but est de sauvegarder cette image localement, puis d’ajouter le chemin local à l’objet, et enfin…
Firefox tip of the day: open twitter profile with the Awesome Bar
about 1 year ago - No comments
Introduction Problème : je veux accéder au profil d’un utilisateur twitter le plus rapidement possible depuis mon navigateur, en utilisant la notation courante @pseudo. J’ai cherché quelque temps une solution existante sans succès, et trouvant que cela faisait une bonne idée de projet, j’ai décidé de créer la mienne. N’ayant pas de meilleur idée, je…
Windows Gadgets
about 1 year ago - No comments
Ce post existe principalement à titre de pense bête, pour me faire gagner un peu de temps lors de mon prochain formatage de Windows, quand j’aurai besoin de réinstaller tous les gadgets Windows que j’apprécie et dont j’ai maintenant du mal à me passer. Retrouver le bon site de téléchargement me prend trop de temps…
When comes the night : screen colors inversion
about 1 year ago - No comments
Rien de tel qu’un écran affichant une page blanche ou claire, pour s’éclater les yeux lors de l’utilisation de son ordinateur dans la pénombre. Sans parler des insectes attirés à 100 mètres lorsque vous essayez d’aérer les 28.5°C de votre chambre… Pour atténuer un peu le problème, il existe une solution très simple en…




about 4 months ago
Merci pour ce superbe utilitaire.
Suggestion: ajouter un changement automatique du sens pour ClearType.
En effet, lorsqu’on inverse les couleurs (RGB->BGR), le texte se retrouve avec un lissage d’escalier inverse et on perd vraiment en lisibilité.
Je crois que les modifications globales du réglage de ClearType nécessitent un droit administrateur, malheureusement (à vérifier toutefois).
Quelques infos ici:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd183433%28v=vs.85%29.aspx
about 4 months ago
Oui, ClearType n’est pas génial avec l’inversion “intelligente”…
J’avais déja noté ce problème, mais sans vraiment chercher de solution rapport à KISS, et aussi par flemme je l’avoue.
Merci pour le lien, je vais regarder si je peux faire quelque chose.
about 4 months ago
Bon, après avoir fait quelques tests, c’est un peu n’importe quoi la gestion du lissage des polices sur Windows, pas moyen de faire ça simplement…
Chaque application gère la chose à sa manière, et d’après mes tests, la lisibilité n’est pas forcément améliorée en désactivant ClearType et/ou le lissage des polices.
Bien que le halo rouge diminue ou disparaisse suivant les cas, ClearType améliore vraiment la forme des caractères, et on perd en lisibilité lorsqu’il est désactivé.
about 4 months ago
Sur mon PC, si je me contente d’inverser le sens RGBBGR, le résultat devient bon en écran négatif.
Bonne nouvelle: ça ne nécessite pas de pouvoir administrateur.
Mon code qui fonctionne bien:
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SystemParametersInfo(uint uiAction, uint uiParam, ref bool pvParam, uint fWinIni);
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SystemParametersInfo(uint uiAction, uint uiParam, ref uint pvParam, uint fWinIni); // T = any type
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SystemParametersInfo(uint uiAction, uint uiParam, uint pvParam, uint fWinIni); // T = any type
readonly uint SPI_GETFONTSMOOTHING = 0x4A;
readonly uint SPI_SETFONTSMOOTHINGORIENTATION = 0×2013;
readonly uint SPI_GETFONTSMOOTHINGORIENTATION = 0×2012;
readonly uint FE_FONTSMOOTHINGORIENTATIONBGR = 0×0000;
readonly uint FE_FONTSMOOTHINGORIENTATIONRGB = 0×0001;
readonly uint SPIF_SENDCHANGE = 2;
readonly uint SPIF_UPDATEINIFILE = 1;
public ChangeLeSensDeClearType()
{
bool ClearTypeIsActivated = false;
bool retval = SystemParametersInfo(SPI_GETFONTSMOOTHING, 0, ref ClearTypeIsActivated, 0);
uint Orientation = 0;
retval = SystemParametersInfo(SPI_GETFONTSMOOTHINGORIENTATION, 0, ref Orientation, 0);
uint NouvelleOrientation = Orientation == FE_FONTSMOOTHINGORIENTATIONRGB ? FE_FONTSMOOTHINGORIENTATIONBGR : FE_FONTSMOOTHINGORIENTATIONRGB;
retval = SystemParametersInfo(SPI_SETFONTSMOOTHINGORIENTATION, 0, NouvelleOrientation, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE);
}
J’espère que ça pourra aider.
about 4 months ago
correction:
SPIF_UPDATEINIFILE n’est pas nécessaire, apparemment (il est même plutôt nuisible car il sauvegarde l’état, ce qui n’est pas souhaitable).
about 4 months ago
Ah je n’avais pas pensé à tester le changement d’orientation !
Mais je dois dire que je ne vois pas de changement flagrant…
Le halo rouge change juste de sens, mais est toujours autant présent.
http://arcanesanctum.net/other/3%20rgb.png vs http://arcanesanctum.net/other/4%20bgr.png
La meilleure chose à faire serait probablement de désactiver complétement ClearType, mais comme je disais plus haut, les caractères sont alors “abimés”.
Il est aussi possible de désactiver le lissage des polices (Font Smoothing), qui est une chose différente de ClearType, et c’est d’ailleurs avec ça que j’ai obtenu les meilleurs résultats (plus de frange colorée du tout. Par contre, les polices sont un peu pixellisées).
Le problème c’est que comme chaque application, voir chaque controle au sein d’une application, gère le lissage différemment, il est quasiment impossible d’obtenir un résultat correcte partout…
about 4 months ago
Sur mon PC, la différence est nette. Par contre, il arrive que des applications n’affichent pas tout de suite la différence, ou partiellement (Visual Studio est un des pires pour ça, d’ailleurs on le voit bien sur vos captures: des zones dans une orientation ou d’autres zones à l’inverse, dans la même fenêtre). J’ai l’impression qu’il y a une question de cache qui n’est pas effacé lors du changement d’orientation. À vérifier après un redémarrage ou après une déconnexion.
J’ai essayé de mettre en mode “gris” (avec SystemParametersInfo(SPI_SETFONTSMOOTHINGTYPE, 0, FE_FONTSMOOTHINGCLEARTYPE, SPIF_SENDCHANGE /*| SPIF_UPDATEINIFILE*/); ),
mais il n’y a eu aucun changement immédiat.
Toutefois, il serait peut-être intéressant d’avoir une commande dans le menu de NegativeScreen “Toggle ClearType orientation”. Ça serait déjà du temps de gagné par rapport à devoir aller dans le panneau de configuration (sans compter que celui-ci nécessite un droit administrateur pour valider le changement).
about 4 months ago
Je devrais me relire trois fois: je voulais écrire
FE_FONTSMOOTHINGSTANDARD
about 4 months ago
Dans mes précédents tests, je n’ai pas réussi à faire fonctionner l’appel avec SETFONTSMOOTHINGTYPE. La fonction retourne false et GetLastError() m’indique que “Value does not fall within the expected range.”…
Conçernant l’ajout du changement de l’orientation de ClearType dans NegativeScreen, je ne pense pas l’implémenter.
Je n’ai personnellement pas constaté de changement flagrant, et je n’y vois que des inconvénients par rapport à ce que cela apporterait. (cela n’est utile que pour certains effets, et si l’appli crash, on reste bloqué dans le mode actuel)
about 4 months ago
Je comprends ça, et puis les programmes en font un peu à leur tête pour ce qui est de respecter les règles de Windows.
Par exemple pour que FireFox prenne en compte le changement d’orientation, il a fallu que désactive puis réactive son accélération matérielle. Rien à faire pour Visual Studio (sauf peut-être redémarrer Windows).
En tout cas, merci pour vos réponses et vos efforts. Et surtout pour ce superbe logiciel qui sauve les yeux !
Une bonne année !
about 4 months ago
Merci à toi, c’est toujours agréable de voir que NegativeScreen est utile à quelqu’un.
Bonne année également !
about 1 year ago
Merci pour cette excellente application qui permet enfin une utilisation agréable de son PC la nuit.
Il y a juste un petit bug lorsque la barre des tâches Windows se trouve sur la gauche de l’écran. Dans ce cas, j’obtiens (de gauche à droite) la barre des tâches, puis le natif de la barre des tâches et finalement le bureau. Le pointeur de la souris est aussi décalé. Il faut viser à gauche des boutons de l’on souhaite cliquer (de l’épaisseur de la barre des tâches).
A+
about 1 year ago
Merci d’avoir signalé le problème, c’est réglé.
about 1 year ago
à propos de XP, voir la mise à jour de la page…
about 1 year ago
Concernant le parametrage des raccourcis, c’est prevu dans une version future…
Peux tu préciser quel type de bug tu as sur XP ?
about 1 year ago
salut ta version compilée bug sur mon XP
about 1 year ago
excellent, merciii
une petite version avec l’avantage de choisir son propre raccourci clavier serait un must
a bientot