home products news downloads documentation support gallery online maps resellers search
TNTmips Downloads Menu

HOME

CONTACT US

CURRENT RELEASE
  TNT 2013

DEVELOPMENT VERSION
  TNT 2014

TNTmips Pro
PRIOR RELEASES
  TNT 2012

FREE SOFTWARE
  TNTmips Free
  TNTatlas
  TNTsdk

MORE DOWNLOADS
  HASP Key Driver
  Screen Recorder
  TNT Language Kits
  Sample Geodata
  TNT Scripts

DOCUMENTATION
  TNTmips Tutorials
  Tutorial Datasets
  Technical Guides
  Scripts
  Quick Guides

MORE INFO
  Download FAQs
  FTP
  Download Managers
  Find Reseller

SITE MAP


PipelineFilterLookup.sml


# PipelineFilterLookup.sml

# Sample standalone script to demonstrate a simple image pipeline
# application: applying contrast to a grayscale raster.

# If the input raster does not have a contrast table, the script computes
# a standard contrast table for a copy of the raster, then applies this table.
# A default linear contrast table is also computed for the output raster, which
# has lossless JPEG2000 compression applied.  

# 21 December 2007
# Randy Smith, MicroImages, Inc.

# Requires Version 2007:73 or later of the TNT products.

numeric err;			# error code returned
class RVC_RASTER RastIn, RastOut;		# class instances for input and output rasters

# error checking procedure
proc ReportError(numeric linenum, numeric err) {
	printf("FAILED -line: %d, error: %d\n", linenum - 1, err);
	PopupError(err); 
	}

# procedure to compute standard contrast table for copy of input raster that has no contrast table
proc computeCon(class CONTRAST con, class RVC_RASTER Rast) {
	class RVC_OBJECT tempFile;
	class RVC_RASTER tempRast;

	# copy source raster to temporary file, then close source raster
	tempFile.MakeTempFile(1);
	Rast.CopyTo(tempFile, tempRast);
	Rast.Close();

	# open temporary raster and compute standard contrast table for it
	tempRast.OpenAttached("Write");
	con.ComputeStandard(tempRast, "normalize");
	Rast = tempRast;			# reassign temporary raster to original raster variable
	tempRast.Close();			# close temporary raster
	}

#######################################  Main program  ####################################
clear();

# set context so script does not exit on error, allowing manual
# handling of errors (primarily used with CONTRAST class method
# to read a contrast table, which returns an error if no table exists).
_context.AbortOnError = 0;


# CHOOSE INPUT RASTER
GetInputRaster(RastIn);

# check to ensure that selected raster is grayscale
if (RastIn.$Info.Type == "binary" or
	RastIn.$Info.Type == "16-bit color RGB" or
	RastIn.$Info.Type == "16-bit color BGR" or
	RastIn.$Info.Type == "24-bit color RGB" or
	RastIn.$Info.Type == "24-bit color BGR") 
	{
	print("Binary and composite rasters cannot be used as input for this script.  Exiting now.");
	Exit();
	}

# get last-used contrast table from the input raster; if none, call procedure to
# make a temporary copy of the raster and compute a standard contrast table for it
class CONTRAST riContrast;
err = riContrast.Read(RastIn);
if ( err < 0 ) {
	computeCon(riContrast, RastIn);
	print("Input raster has no contrast table, setting up normalized contrast.");
	}
else
	printf("Input contrast type: %s\n", riContrast.Type); 


# CHOOSE OUTPUT RASTER
# DlgGetObject creates only an ObjItem for the output; the new raster will then be created
# by the TARGET_RVC with the desired compression.  The ObjectPath of the ObjItem is not
# valid until the output raster is actually created by the pipeline.
class RVC_OBJITEM rastOutObjItem;
DlgGetObject("Choose new raster for output", "Raster", rastOutObjItem, "NewOnly");


# PIPELINE SOURCE
# set input raster as pipeline source using its ObjItem
class IMAGE_PIPELINE_SOURCE_RVC source_rvc( RastIn.GetObjItem() );
err = source_rvc.Initialize();
if ( err < 0)
	ReportError(_context.CurrentLineNum, err);
else
	print("Source raster initialized.");


# PIPELINE FILTER
# set filter to apply a lookup table read from the raster's contrast table
class IMAGE_PIPELINE_FILTER_LOOKUP filter_lookup (source_rvc);
err = filter_lookup.SetContrastParm(riContrast);	# set contrast for filter
if ( err < 0) ReportError(_context.CurrentLineNum, err);
 
err = filter_lookup.Initialize();
if ( err < 0) 
	ReportError(_context.CurrentLineNum, err);
else
	print("Lookup filter initialized.");


# PIPELINE TARGET
# set output raster as pipeline target using its ObjItem
class IMAGE_PIPELINE_TARGET_RVC target_rvc(filter_lookup, rastOutObjItem);
target_rvc.SetCompression("JP2", 0);
err = target_rvc.Initialize();
if ( err < 0) 
	ReportError(_context.CurrentLineNum, err);
else
	print("Pipeline target initialized.");


# EXECUTE the pipeline process
target_rvc.Process();


# open the output raster to compute and save a default linear contrast table for it
# to prevent it from being "recontrasted" in the Display process.
rastOutObjItem = target_rvc.GetObjItem();		# get the real ObjItem of the raster created by the pipeline
err = RastOut.Open(rastOutObjItem, "Write");	# use the ObjItem to open the raster
if ( err < 0) ReportError(_context.CurrentLineNum, err);
print("Computing contrast table for output raster.");
 
class CONTRAST roContrast;		# compute standard linear contrast table  
err = roContrast.ComputeStandard(RastOut, "linear", "LINEAR", "Linear contrast");
if ( err < 0) ReportError(_context.CurrentLineNum, err);

RastOut.Close();		# close the output raster

print("Done.");





 


Back Home ©MicroImages, Inc. 2013 Published in the United States of America
11th Floor - Sharp Tower, 206 South 13th Street, Lincoln NE 68508-2010   USA
Business & Sales: (402)477-9554  Support: (402)477-9562  Fax: (402)477-9559
Business info@microimages.com  Support support@microimages.com  Web webmaster@microimages.com

25 March 2009

page update: 26 May 11