demogama.sml

  Download

More scripts: Raster

Syntax Highlighing:

comments, key words, predefined symbols, class members & methods, functions & classes
            
# DemoGama.sml
#
# SML script to demonstrate gamma adjustment of gradient raster
#
# displays a grey scale gradient and applies gamma adjustment to top portion
#
# Buttons:
# 1. "Test Image"		create and display test image
# 2. "Adjust Gamma"	apply gamma adjustment to top portion of test image
# 3. "Undo"				undo gamma adjustment
# 4. "Exit"				exit script
# 
# Notes:
# 1. Works best in 24 bit mode - else the grey scale transitions will not be smooth
#
#
# AUTHOR: 			David Wilson
# 						MicroImages, Inc.
# REQUESTED BY:	
# CREATION DATE: 	Dec. 5, 1996
# REVISION LIST: 	March 10, 1997, Added to standard display window
#
#
# procedure and function definitions
#
# none used
#
# global data
#
class DISP h1;
# variables to keep track of open status of rasters
numeric r1IsOpen = false;
numeric r2IsOpen = false;
# 
# START OF SCRIPT
# 
clear();	# clear the console
# open a display window - add standard tools - set up buttons and title
h1 = DispOpen( 800, 640, 0, 0);
DispAddStandardTools(h1);
DispAddButtons(h1, "Test Image", "Adjust Gamma", "Undo", "Exit" );
# set up exitCondition - allows us to break out of while loop
numeric exitCondition = false;
while ( exitCondition == false ) {
	string button$ = DispWaitForButtonPress(h1);
	DispResetButtons(h1);
	if (button$ == "Test Image") {
		raster R1, R2;
		CreateTempRaster(R1, 40, 255, "8-bit unsigned");
		CreateTempRaster(R2, 40, 255, "8-bit unsigned");
		r1IsOpen = true;
		r2IsOpen = true;
		numeric line, col;
		for line = 1 to NumLins(R1) {
			for col = 1 to NumCols(R1) {
				R1[line, col] = col;
				R2[line, col] = col;
				}
			}
		CloseRaster(R1);	# must close it to flush buffers before displaying it
		DispAddRasterVar(h1, R1);	# this also opens R1
		DispRedrawFull(h1);
		}
	if (button$ == "Adjust Gamma") {
		numeric newGamma = PopupNum("Input Gamma Value", 1.00, .1, 10.0, 2);
		numeric gMax = GlobalMax( R1 );
		numeric gMin = GlobalMin( R1 );
		numeric gRange = gMax - gMin;
		numeric oneOverGamma = 1 / newGamma;
		numeric inV, inScale, norm, outV;
		for line = 1 to NumLins(R1) / 2 {
			for col = 1 to NumCols(R1) {
				inV = R1[line, col];
				inScale = ( inV - gMin ) / gRange;
				norm = pow( oneOverGamma, inScale );			# pow(x,y) is y to x power!
				outV = ( inV * ( norm - inScale ) + inV );
				R1[line, col] = outV;
				}
			}
		CloseRaster(R1);	# must close it to flush buffers before displaying it
		DispRedraw(h1);
		}
	if (button$ == "Undo") {
		R1 = R2;
		CloseRaster(R1);	# must close it to flush buffers before displaying it
		DispRedraw(h1);
		}
	if (button$ == "Exit") {
		exitCondition = true;
		}
	} # end of main loop
# do clean up
if ( r1IsOpen ) { DeleteTempRaster( R1 ); }
if ( r2IsOpen ) { DeleteTempRaster( R2 ); }
DispClose( h1 );
# 
# END OF SCRIPT
#