/* gcc -o xbright xbright.c -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 -lXext -lXxf86vm -lm */ #include #include #include #include #include #include #define GAMMA_COMPONENTS 3 #define GAMMA_RESOLUTION 256 #define MAX_RAMP 65535 Display *dpy; unsigned short ramp_in[GAMMA_COMPONENTS][GAMMA_RESOLUTION]; int main(int argc, char *argv[]) { unsigned short ramp_out[GAMMA_COMPONENTS][GAMMA_RESOLUTION]; int x, y; double gamma; int min, max; --argc; if (argc == 0) { gamma = 1.0; min = 0; max = MAX_RAMP; } else if (argc != 3) { fprintf(stderr, "%s gamma black white\n", argv[0]); exit(-1); } else { gamma = strtod(argv[1], NULL); min = strtol(argv[2], NULL, 0); max = strtol(argv[3], NULL, 0); } printf("gamma = %f\nblack = %d\nwhite = %d\n", gamma, min, max); dpy = XOpenDisplay(NULL); if (!XF86VidModeGetGammaRamp(dpy, DefaultScreen(dpy), GAMMA_RESOLUTION, ramp_in[0], ramp_in[1], ramp_in[2])) return 1; gamma = 1.0 / gamma; for (x = 0; x < GAMMA_COMPONENTS; x++) for (y = 0; y < GAMMA_RESOLUTION; y++) ramp_out[x][y] = min + pow((y/255.0), gamma) * (max-min); if (!XF86VidModeSetGammaRamp(dpy, DefaultScreen(dpy), GAMMA_RESOLUTION, ramp_out[0], ramp_out[1], ramp_out[2])) return 1; return 0; }