Any procedure to get max_value and min_value for both x and y axis of ROI and put them into one row of a table?

I am measuring the width and height of ROI in two-wave XY graphs. What I do is just copy & paste the min_values and max_values for both axis-ranges after expending the ROI. It is really painful to simply repeat thousands times. I am wondering whether anyone could kindly provide a procedure so that the four axis-range values of ROI can be exported into the same row of a table which can be calculated easily.
Any help is appreciated.
I think what you want to do can be done using the
GetMarquee
operation. Unfortunately, this operation works best on 1D graphs. I've done a quick hack to adapt it for 2D images. Paste the following in your procedure window, select an area with the mouse on your 2D image (the "marquee"), then right-click and choose "Print Image ROI".


Menu "GraphMarquee"
	"Print Image ROI"
End

Function PrintImageROI()
// 1. get the marquee in point units (axis units directly accessible only for 1D graphs!)
// sanity test: let there be exactly one image
	String TopGraphImages = ImageNameList("",";")
	if( ItemsInList(TopGraphImages) != 1 )
		Print "There is either no image or more than one on the graph"
		return -1
	endif
	GetMarquee
// sanity test: was there a marquee at all?
	if (V_flag == 0)
		Print "There is no marquee"
		return -1
	endif
	Variable mpL = V_left, mpR = V_right, mpT = V_top, mpB = V_bottom
//	print "marquee in points (left, top, right, bottom) =", mpL, mpT, mpR, mpB

// 2. get the plot area in point units
	GetWindow kwTopWin, psize
	Variable ppL = V_left, ppR = V_right, ppT = V_top, ppB = V_bottom
//	print "plot area in points (left, top, right, bottom) =", ppL, ppT, ppR, ppB

// 3. get the axis limits
// get limits of axes that image is displayed against
	String theImage = StringFromList(0, TopGraphImages)
	String XAxis = StringByKey( "XAXIS", ImageInfo("", theImage, 0) )
	String YAxis = StringByKey( "YAXIS", ImageInfo("", theImage, 0) )
	String XAxisLimits = StringFromList(2, StringByKey( "SETAXISCMD", axisinfo("", XAxis) ), " " )
	String YAxisLimits = StringFromList(2, StringByKey( "SETAXISCMD", axisinfo("", YAxis) ), " " )
// order left/right correctly, remember whether a swap occurred
	Variable axMin = str2num( StringFromList(0, XAxisLimits, ",") ), axMax = str2num( StringFromList(1, XAxisLimits, ",") ), swap
	Variable paL = min(axMin, axMax), paR = max(axMin, axMax), xSwap = (paL != axMin)
// order top/bottom correctly, remember whether a swap occurred
	axMin = str2num( StringFromList(0, YAxisLimits, ",") ); axMax = str2num( StringFromList(1, YAxisLimits, ",") )
	Variable paT = max(axMin, axMax), paB = min(axMin, axMax), ySwap = (paB != axMin)
//	print "plot area in axis units (left, top, right, bottom) =", paL, paT, paR, paB; print xSwap, ySwap

// 4. express the marquee coordinates in axis units
	Variable maL = paL + (mpL - ppL) * (paR - paL)/(ppR - ppL), maR = paL + (mpR - ppL) * (paR - paL)/(ppR - ppL), swap
	if( xSwap )
		swap = maL; maL = maR; maR = swap
	endif
	Variable maT = paT + (mpT - ppT) * (paB - paT)/(ppB - ppT), maB = paT + (mpB - ppT) * (paB - paT)/(ppB - ppT)
	if( ySwap )
		swap = maT; maT = maB; maB = swap
	endif
	print "marquee in axis units (left, top, right, bottom) =", maL, maT, maR, maB
End


Is that what you wanted?

Oh, on rereading this, I see you are doing 1D (XY) graphs. I was confused by your use of the word "ROI" which for me is associated with 2D graphs. Igor calls this a "Marquee" instead of a "ROI". You can probably use the example code in the help topic for
GetMarquee
directly. Just type
DisplayHelpTopic "GetMarquee"
on the command line...

-Wolfgang
My code snippet above is overly complicated and does not work with auto-scaled image axes. Actually,
GetMarquee()
works perfectly fine for images, as was pointed out to me by Nasser. Only, the sample code for
GetMarquee()
needs to be slightly adapted since usually, images are displayed vs. the top axis rather than the bottom axis. An axis-insensitive version for images would then be:

Menu "GraphMarquee"
	"Print Marquee Coordinates", PrintMarqueeCoords()
End

Function PrintMarqueeCoords()
	GetMarquee
	if (V_flag == 0)
		Print "There is no marquee"
	else
		// the following three lines are valid for images only
		String topImageInfo = ImageInfo("", StringFromList(0, ImageNameList("",";")), 0)
		String xAxisName = StringByKey( "XAXIS", topImageInfo)
		String yAxisName = StringByKey( "YAXIS", topImageInfo)
		// alternatively, if you know the axes are top and left, use 
		// xAxisName = "top"; yAxisName="left"
		// or use the following form, which selects the axes corresponding to chronologically first object displayed on the top graph
		// yAxisName = StringFromList(0, AxisList(""))
		// xAxisName = StringFromList(1, AxisList(""))

		GetMarquee $xAxisName, $yAxisName
		printf "marquee left in %s axis terms: %g\r", xAxisName, V_left
		printf "marquee right in %s axis terms: %g\r", xAxisName, V_right
		printf "marquee top in %s axis terms: %g\r", yAxisName, V_top
		printf "marquee bottom in %s axis terms: %g\r", yAxisName, V_bottom
	endif
End

Wolfgang