Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
mgl:functionreferencegammatable [2008/11/18 22:34]
127.0.0.1 external edit
mgl:functionreferencegammatable [2009/06/11 01:21] (current)
Line 1: Line 1:
 +====== Gamma tables ======
 +
 +===== mglSetGammaTable:​ Sets the display card gamma table =====
 +
 +**purpose:​** Set the gamma table \\ **usage:** There are a number of ways of calling this function explained below.
 +
 +Setting a redMin, redMax, redGamma, greenMin, etc.
 +
 +  mglSetGammaTable(0,​1,​0.8,​0,​1,​0.9,​0,​1,​0.75);​
 +
 +or with a vector of length 9:
 +
 +  mglSetGammaTable([0 1 0.8 0 1 0.9 0 1 0.75]);
 +
 +or set with a single table for all there colors. Note that the table values go from 0 to 1 (i.e. 0 is the darkest value and 1 is the brightest value). If you have a 10 bit gamma table (most cards do--see section on monitor calibration for a list), then the intermediate values will be interpreted with 10 bits of resolution.
 +
 +  gammaTable = ((0:​1/​255:​1).^0.8)';​
 +  mglSetGammaTable(gammaTable);​
 +
 +or set all three colors with differnet tables
 +
 +  redGammaTable = (0:​1/​255:​1).^0.8;​
 +  greenGammaTable = (0:​1/​255:​1).^0.9;​
 +  blueGammaTable = (0:​1/​255:​1).^0.75;​
 +  mglSetGammaTable(redGammaTable,​greenGammaTable,​blueGammaTable);​
 +
 +can also be called with an nx3 table
 +
 +  gammaTable(:,​1) = (0:​1/​255:​1).^0.8;​
 +  gammaTable(:,​2) = (0:​1/​255:​1).^0.9;​
 +  gammaTable(:,​3) = (0:​1/​255:​1).^0.75;​
 +  mglSetGammaTable(gammaTable);​
 +
 +can also be called with the structure returned by mglGetGammaTable
 +
 +  mglSetGammaTable(mglGetGammaTable);​
 +
 +Note that the gamma table will be restored to the original after mglClose.
 +
 +**Timing**. The setting of the gamma table is done by the OS in a way that seems to be asynchronous with mglFlush. For instance, the following code gives unexpected results:
 +
 +<code matlab>
 +  mglOpen(1);
 +  mglClearScreen(1);​ % set back buffer to white
 +  mglWaitSecs(2);​
 +
 +  % now set the gamma table to all black, this should insure that nothing will be displayed
 +  mglSetGammaTable(zeros(1,​256)); ​
 +  mglFlush; ​
 +  % now the flush will bring the value 255, set by the mglClearScreen above,
 +  % to the front buffer, but because the gamma table is set to black,
 +  % nothing should be displayed
 +
 +  mglWaitSecs(2);​
 +  mglClose;
 +</​code>​
 +This should keep the screen black, but on my machine, the screen temporarily flashes white. Presumably this is because the mglSetGammaTable happens after the mglFlush. It is recommended that you change the gamma while there is nothing displayed on the screen and wait for at least one screen refresh before assuming that the gamma table has actually changed.
 +
 +===== mglGetGammaTable:​ Gets the current gamma table =====
 +
 +**purpose:​** returns what the gamma table is set to **usage:** table = mglGetGammaTable()
 +
 +  mglOpen;
 +  gammaTable = mglGetGammaTable
 +