package ij.io; import java.io.*; import ij.*; import ij.process.*; import ij.measure.*; /** Saves an image described by an ImageProcessor object as a tab-delimited text file. */ public class TextEncoder { private ImageProcessor ip; private Calibration cal; private int precision; /** Constructs a TextEncoder from an ImageProcessor and optional Calibration. */ public TextEncoder (ImageProcessor ip, Calibration cal, int precision) { this.ip = ip; this.cal = cal; this.precision = precision; } /** Saves the image as a tab-delimited text file. */ public void write(DataOutputStream out) throws IOException { PrintWriter pw = new PrintWriter(out); boolean calibrated = cal!=null && cal.calibrated(); if (calibrated) ip.setCalibrationTable(cal.getCTable()); else ip.setCalibrationTable(null); boolean intData = !calibrated && ((ip instanceof ByteProcessor) || (ip instanceof ShortProcessor)); int width = ip.getWidth(); int height = ip.getHeight(); int inc = height/20; if (inc<1) inc = 1; //IJ.showStatus("Exporting as text..."); double value; for (int y=0; y<height; y++) { for (int x=0; x<width; x++) { value = ip.getPixelValue(x,y); if (intData) pw.print((int)value); else pw.print(IJ.d2s(value, precision)); if (x!=(width-1)) pw.print("\t"); } pw.println(); if (y%inc==0) IJ.showProgress((double)y/height); } pw.close(); IJ.showProgress(1.0); //IJ.showStatus(""); } }