Changeset 9585 for trunk/psModules/src/camera/pmFPA_JPEG.c
- Timestamp:
- Oct 16, 2006, 2:41:05 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/camera/pmFPA_JPEG.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/camera/pmFPA_JPEG.c
r8935 r9585 5 5 * @author EAM, IfA 6 6 * 7 * @version $Revision: 1. 9$ $Name: not supported by cvs2svn $8 * @date $Date: 2006- 09-25 20:23:10$7 * @version $Revision: 1.10 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2006-10-17 00:41:05 $ 9 9 * 10 10 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 124 124 PS_ASSERT_PTR_NON_NULL(file, false); 125 125 126 switch (file->type) { 127 case PM_FPA_FILE_JPEG: { 128 // XXX we need to decide where the scale will come from in the long term 129 psRandom *rng = psRandomAlloc(PS_RANDOM_TAUS, 0); 130 psStats *stats = psImageBackground(readout->image, NULL, 0, 0.25, 0.75, 10000, rng); 131 psFree(rng); 126 if (file->type != PM_FPA_FILE_JPEG) { 127 psError(PS_ERR_UNKNOWN, true, "warning: type mismatch"); 128 return false; 129 } 132 130 133 if (!isfinite(stats->robustMedian) || !isfinite(stats->robustUQ) || !isfinite(stats->robustLQ)) { 134 psError(PS_ERR_UNKNOWN, false, "Unable to measure statistics for image.\n"); 135 psFree(stats); 136 return false; 137 } 138 float delta = stats->robustUQ - stats->robustLQ; // Inter-quartile range 139 float min, max; // Minimum and maximum for stretch 131 // XXX we need to decide where the scale will come from in the long term 132 psRandom *rng = psRandomAlloc(PS_RANDOM_TAUS, 0); 133 psStats *stats = psImageBackground(readout->image, NULL, 0, 0.25, 0.75, 10000, rng); 134 psFree(rng); 140 135 141 psString mode = pmFPAfileNameFromRule (file->extrule, file, view); 142 psString word = pmFPAfileNameFromRule (file->extxtra, file, view); 143 psArray *range = psStringSplitArray (word, ":", false); 136 if (!isfinite(stats->robustMedian) || !isfinite(stats->robustUQ) || !isfinite(stats->robustLQ)) { 137 psError(PS_ERR_UNKNOWN, false, "Unable to measure statistics for image.\n"); 138 psFree(stats); 139 return false; 140 } 141 float delta = stats->robustUQ - stats->robustLQ; // Inter-quartile range 142 float min, max; // Minimum and maximum for stretch 144 143 145 if (!strcasecmp (mode, "RANGE") && range) { 146 float fmin = atof(range->data[0]); 147 float fmax = atof(range->data[1]); 148 min = stats->robustMedian + fmin*delta; 149 max = stats->robustMedian + fmax*delta; 150 } else if (!strcasecmp (mode, "FRACTION")) { 151 float fmin = atof(range->data[0]); 152 float fmax = atof(range->data[1]); 153 min = fmin*stats->robustMedian; 154 max = fmax*stats->robustMedian; 155 } else { 156 min = stats->robustMedian - 3*delta; 157 max = stats->robustMedian + 6*delta; 158 } 159 psFree(mode); 160 psFree(word); 161 psFree(range); 162 psFree(stats); 144 psString mode = pmFPAfileNameFromRule (file->extrule, file, view); 145 psString word = pmFPAfileNameFromRule (file->extxtra, file, view); 146 psArray *range = psStringSplitArray (word, ":", false); 163 147 164 if (!isfinite(min) || !isfinite(max)) { 165 psError(PS_ERR_UNKNOWN, true, "The stretch parameters are not both finite.\n"); 166 return false; 167 } 148 if (!strcasecmp (mode, "RANGE") && range) { 149 float fmin = atof(range->data[0]); 150 float fmax = atof(range->data[1]); 151 min = stats->robustMedian + fmin*delta; 152 max = stats->robustMedian + fmax*delta; 153 } else if (!strcasecmp (mode, "FRACTION")) { 154 float fmin = atof(range->data[0]); 155 float fmax = atof(range->data[1]); 156 min = fmin*stats->robustMedian; 157 max = fmax*stats->robustMedian; 158 } else { 159 min = stats->robustMedian - 3*delta; 160 max = stats->robustMedian + 6*delta; 161 } 162 psFree(mode); 163 psFree(word); 164 psFree(range); 165 psFree(stats); 168 166 169 psString name = pmFPAfileNameFromRule (file->filerule, file, view); 170 psString mapname = pmFPAfileNameFromRule (file->filextra, file, view); 171 psImageJpegColormap *map = psImageJpegColormapSet (NULL, mapname); 172 psFree(mapname); 173 if (!map) { 174 map = psImageJpegColormapSet (NULL, "-greyscale"); 175 } 167 if (!isfinite(min) || !isfinite(max)) { 168 psError(PS_ERR_UNKNOWN, true, "The stretch parameters are not both finite.\n"); 169 return false; 170 } 176 171 177 psImageJpeg (map, readout->image, name, min, max); 178 psFree(name); 179 psFree(map); 172 psString name = pmFPAfileNameFromRule (file->filerule, file, view); 173 psString mapname = pmFPAfileNameFromRule (file->filextra, file, view); 174 psImageJpegColormap *map = psImageJpegColormapSet (NULL, mapname); 175 psFree(mapname); 176 if (!map) { 177 map = psImageJpegColormapSet (NULL, "-greyscale"); 178 } 180 179 181 return true; 182 } 183 default: 184 fprintf (stderr, "warning: type mismatch\n"); 185 break; 186 } 187 return false; 180 psImageJpeg (map, readout->image, name, min, max); 181 psFree(name); 182 psFree(map); 183 184 return true; 188 185 }
Note:
See TracChangeset
for help on using the changeset viewer.
