📄 dim_stk_format_io.cpp
字号:
}
freeTiffTagBuf( (DIM_UCHAR **) &buf );
}
}
//UIC1Tag - 33628
//If this tag exists and is of type LONG, then at the indicated offset
//there is a series of N pairs consisting of an ID code of size LONG and a
//variable-sized (ID-dependent) block of data. The possible tags and their
//values are defined in the "Tag ID Codes" section below. These values are
//used internally by the Meta Imaging Series applications, and may not be
//useful to other applications. To replicate the behavior of MetaMorph,
//this table should be read and its values stored after the table
//indicated by UIC4Tag is read.
// NOTE: difference form tag UIC4 is that this one contains exactly N pairs
// and long organization of data... We're not reading tag UIC4 at all at the moment
void stkReadStringEntry(long offset, TDimTiffParams *tiffParams, char **string)
{
//TDimStkInfo *stkInfo = &tiffParams->stkInfo;
TIFF *tif = tiffParams->dimTiff;
if (offset <= 0) return;
long size;
readTiffBufNoAlloc (tif, offset, sizeof( DIM_LONG ), DIM_TAG_LONG, (DIM_UCHAR *) &size);
*string = (char *) _TIFFmalloc( size+1 );
(*string)[size] = '\0';
readTiffBufNoAlloc (tif, offset+sizeof( DIM_LONG ), size, DIM_TAG_LONG, (DIM_UCHAR *) (*string));
}
void stkParseIDEntry(long *pair, long offset, TDimTiffParams *tiffParams)
{
TDimStkInfo *stkInfo = &tiffParams->stkInfo;
//TDimTiffIFD *ifd = &tiffParams->ifds.ifds[0];
TIFF *tif = tiffParams->dimTiff;
if (pair[0] == DIM_STK_AutoScale)
stkInfo->metaData.AutoScale = pair[1];
if (pair[0] == DIM_STK_MinScale)
stkInfo->metaData.MinScale = pair[1];
if (pair[0] == DIM_STK_MaxScale)
stkInfo->metaData.MaxScale = pair[1];
if (pair[0] == DIM_STK_SpatialCalibration)
stkInfo->metaData.SpatialCalibration = pair[1];
if (pair[0] == DIM_STK_XCalibration)
readTiffBufNoAlloc (tif, pair[1], 2*sizeof( DIM_LONG ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.XCalibration);
if (pair[0] == DIM_STK_YCalibration)
readTiffBufNoAlloc (tif, pair[1], 2*sizeof( DIM_LONG ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.YCalibration);
if (pair[0] == DIM_STK_CalibrationUnits)
stkReadStringEntry(pair[1], tiffParams, (char **) &stkInfo->metaData.CalibrationUnits);
if (pair[0] == DIM_STK_Name)
stkReadStringEntry(pair[1], tiffParams, (char **) &stkInfo->metaData.Name);
if (pair[0] == DIM_STK_ThreshState)
stkInfo->metaData.ThreshState = pair[1];
if (pair[0] == DIM_STK_ThreshStateRed)
stkInfo->metaData.ThreshStateRed = pair[1];
if (pair[0] == DIM_STK_ThreshStateGreen)
stkInfo->metaData.ThreshStateGreen = pair[1];
if (pair[0] == DIM_STK_ThreshStateBlue)
stkInfo->metaData.ThreshStateBlue = pair[1];
if (pair[0] == DIM_STK_ThreshStateLo)
stkInfo->metaData.ThreshStateLo = pair[1];
if (pair[0] == DIM_STK_ThreshStateHi)
stkInfo->metaData.ThreshStateHi = pair[1];
if (pair[0] == DIM_STK_Zoom)
stkInfo->metaData.Zoom = pair[1];
if (pair[0] == DIM_STK_CreateTime)
readTiffBufNoAlloc (tif, pair[1], 2*sizeof( DIM_LONG ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.CreateTime);
if (pair[0] == DIM_STK_LastSavedTime)
readTiffBufNoAlloc (tif, pair[1], 2*sizeof( DIM_LONG ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.LastSavedTime);
if (pair[0] == DIM_STK_currentBuffer)
stkInfo->metaData.currentBuffer = pair[1];
if (pair[0] == DIM_STK_grayFit)
stkInfo->metaData.grayFit = pair[1];
if (pair[0] == DIM_STK_grayPointCount)
stkInfo->metaData.grayPointCount = pair[1];
if (pair[0] == DIM_STK_grayX)
readTiffBufNoAlloc (tif, pair[1], 2*sizeof( DIM_LONG ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.grayX);
if (pair[0] == DIM_STK_grayY)
readTiffBufNoAlloc (tif, pair[1], 2*sizeof( DIM_LONG ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.grayY);
if (pair[0] == DIM_STK_grayMin)
readTiffBufNoAlloc (tif, pair[1], 2*sizeof( DIM_LONG ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.grayMin);
if (pair[0] == DIM_STK_grayMax)
readTiffBufNoAlloc (tif, pair[1], 2*sizeof( DIM_LONG ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.grayMax);
if (pair[0] == DIM_STK_grayUnitName)
stkReadStringEntry(pair[1], tiffParams, (char **) &stkInfo->metaData.grayUnitName);
if (pair[0] == DIM_STK_StandardLUT)
stkInfo->metaData.StandardLUT = pair[1];
if (pair[0] == DIM_STK_AutoScaleLoInfo)
readTiffBufNoAlloc (tif, pair[1], 2*sizeof( DIM_LONG ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.AutoScaleLoInfo);
if (pair[0] == DIM_STK_AutoScaleHiInfo)
readTiffBufNoAlloc (tif, pair[1], 2*sizeof( DIM_LONG ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.AutoScaleHiInfo);
if (pair[0] == DIM_STK_Gamma)
readTiffBufNoAlloc (tif, pair[1], sizeof( DIM_LONG ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.Gamma);
if (pair[0] == DIM_STK_GammaRed)
readTiffBufNoAlloc (tif, pair[1], sizeof( DIM_LONG ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.GammaRed);
if (pair[0] == DIM_STK_GammaGreen)
readTiffBufNoAlloc (tif, pair[1], sizeof( DIM_LONG ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.GammaGreen);
if (pair[0] == DIM_STK_GammaBlue)
readTiffBufNoAlloc (tif, pair[1], sizeof( DIM_LONG ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.GammaBlue);
}
void stkParseUIC1Tag( TDimTiffParams *tiffParams )
{
if (tiffParams == NULL) return;
if (tiffParams->dimTiff == NULL) return;
if (tiffParams->subType != tstStk) return;
TDimTiffIFD *ifd = &tiffParams->ifds.ifds[0];
TIFF *tif = tiffParams->dimTiff;
int tag = 33628;
if (isTagPresentInFirstIFD( &tiffParams->ifds, tag ) != TRUE) return;
long i, offset;
long N = tiffParams->stkInfo.metaData.N;
long pair[2];
offset = getTiffTagOffset(tif, ifd, tag);
if (offset == -1) return;
long num_ids = getTiffTagCount(tif, ifd, tag);
long id_offset = offset;
// now read and parce ID table
for (i=0; i<num_ids; i++)
{
readTiffBufNoAlloc( tif, id_offset, 2*sizeof( DIM_LONG ), DIM_TAG_LONG, (DIM_UCHAR *) pair);
stkParseIDEntry(pair, id_offset, tiffParams);
id_offset += 2*sizeof( DIM_LONG );
}
}
void stkParseUICTags( TDimTiffParams *tiffParams )
{
if (tiffParams == NULL) return;
if (tiffParams->dimTiff == NULL) return;
if (tiffParams->subType != tstStk) return;
stkParseUIC2Tag( tiffParams );
stkParseUIC3Tag( tiffParams );
stkParseUIC1Tag( tiffParams );
}
//----------------------------------------------------------------------------
// STK INFO
//----------------------------------------------------------------------------
void initRational(TDimStkRational *r, long N)
{
int i;
if (r == NULL) return;
for (i=0; i<N; i++) {
r[i].num = 0;
r[i].den = 1;
}
}
void initLong(long *r, long N)
{
int i;
if (r == NULL) return;
for (i=0; i<N; i++) r[i] = 0;
}
void stkAllocMetaInfo( TDimStkInfo *stkInfo, DIM_LONG N )
{
if (stkInfo == NULL) return;
if (N <= 0) return;
stkInfo->metaData.N = N;
stkInfo->metaData.StagePositionX = (TDimStkRational *) _TIFFmalloc( N*sizeof(TDimStkRational) );
initRational(stkInfo->metaData.StagePositionX, N );
stkInfo->metaData.StagePositionY = (TDimStkRational *) _TIFFmalloc( N*sizeof(TDimStkRational) );
initRational(stkInfo->metaData.StagePositionY, N );
stkInfo->metaData.CameraChipOffsetX = (TDimStkRational *) _TIFFmalloc( N*sizeof(TDimStkRational) );
initRational(stkInfo->metaData.CameraChipOffsetX, N );
stkInfo->metaData.CameraChipOffsetY = (TDimStkRational *) _TIFFmalloc( N*sizeof(TDimStkRational) );
initRational(stkInfo->metaData.CameraChipOffsetY, N );
stkInfo->metaData.AbsoluteZ = (TDimStkRational *) _TIFFmalloc( N*sizeof(TDimStkRational) );
initRational(stkInfo->metaData.AbsoluteZ, N );
stkInfo->metaData.AbsoluteZValid = (TDimStkRational *) _TIFFmalloc( N*sizeof(TDimStkRational) );
initRational(stkInfo->metaData.AbsoluteZValid, N );
stkInfo->metaData.wavelength = (TDimStkRational *) _TIFFmalloc( N*sizeof(TDimStkRational) );
initRational(stkInfo->metaData.wavelength, N );
stkInfo->metaData.zDistance = (TDimStkRational *) _TIFFmalloc( N*sizeof(TDimStkRational) );
initRational(stkInfo->metaData.zDistance, N );
stkInfo->metaData.creationDate = (DIM_LONG *) _TIFFmalloc( N*sizeof(DIM_LONG) );
initLong(stkInfo->metaData.creationDate, N );
stkInfo->metaData.creationTime = (DIM_LONG *) _TIFFmalloc( N*sizeof(DIM_LONG) );
initLong(stkInfo->metaData.creationTime, N );
stkInfo->metaData.modificationDate = (DIM_LONG *) _TIFFmalloc( N*sizeof(DIM_LONG) );
initLong(stkInfo->metaData.modificationDate, N );
stkInfo->metaData.modificationTime = (DIM_LONG *) _TIFFmalloc( N*sizeof(DIM_LONG) );
initLong(stkInfo->metaData.modificationTime, N );
#if defined(DEBUG) || defined(_DEBUG)
printf("STK: Allocated data for %d pages\n", N);
#endif
}
int stkGetInfo ( TDimTiffParams *tiffParams )
{
if (tiffParams == NULL) return 1;
if (tiffParams->dimTiff == NULL) return 1;
if (tiffParams->ifds.count <= 0) return 1;
stkAllocMetaInfo( &tiffParams->stkInfo, stkGetNumPlanes( tiffParams->dimTiff ) );
stkGetOffsets( tiffParams->dimTiff, tiffParams );
stkParseUICTags( tiffParams );
return 0;
}
void stkInitInfo( TDimStkInfo *stkInfo )
{
if (stkInfo == NULL) return;
stkInfo->strips_per_plane = 0;
stkInfo->strip_offsets = NULL;
stkInfo->strip_bytecounts = NULL;
stkInfo->metaData.CalibrationUnits = NULL;
stkInfo->metaData.Name = NULL;
stkInfo->metaData.grayUnitName = NULL;
stkInfo->metaData.StagePositionX = NULL;
stkInfo->metaData.StagePositionY = NULL;
stkInfo->metaData.CameraChipOffsetX = NULL;
stkInfo->metaData.CameraChipOffsetY = NULL;
stkInfo->metaData.StageLabel = NULL;
stkInfo->metaData.AbsoluteZ = NULL;
stkInfo->metaData.AbsoluteZValid = NULL;
stkInfo->metaData.wavelength = NULL;
stkInfo->metaData.zDistance = NULL;
stkInfo->metaData.creationDate = NULL;
stkInfo->metaData.creationTime = NULL;
stkInfo->metaData.modificationDate = NULL;
stkInfo->metaData.modificationTime = NULL;
stkInfo->metaData.N = 0;
stkInfo->metaData.AutoScale = 0;
stkInfo->metaData.MinScale = 0;
stkInfo->metaData.MaxScale = 0;
stkInfo->metaData.SpatialCalibration = 0;
stkInfo->metaData.XCalibration[0] = 0;
stkInfo->metaData.XCalibration[1] = 1;
stkInfo->metaData.YCalibration[0] = 0;
stkInfo->metaData.YCalibration[1] = 1;
stkInfo->metaData.ThreshState = 0;
stkInfo->metaData.ThreshStateRed = 0;
stkInfo->metaData.ThreshStateGreen = 0;
stkInfo->metaData.ThreshStateBlue = 0;
stkInfo->metaData.ThreshStateLo = 0;
stkInfo->metaData.ThreshStateHi = 0;
stkInfo->metaData.Zoom = 0;
stkInfo->metaData.CreateTime[0] = 0;
stkInfo->metaData.CreateTime[1] = 1;
stkInfo->metaData.LastSavedTime[0] = 0;
stkInfo->metaData.LastSavedTime[1] = 1;
stkInfo->metaData.currentBuffer = 0;
stkInfo->metaData.grayFit = 0;
stkInfo->metaData.grayPointCount = 0;
stkInfo->metaData.grayX[0] = 0;
stkInfo->metaData.grayX[1] = 1;
stkInfo->metaData.grayY[0] = 0;
stkInfo->metaData.grayY[1] = 1;
stkInfo->metaData.grayMin[0] = 0;
stkInfo->metaData.grayMin[1] = 1;
stkInfo->metaData.grayMax[0] = 0;
stkInfo->metaData.grayMax[1] = 1;
stkInfo->metaData.StandardLUT = 0;
stkInfo->metaData.OverlayMask = 0;
stkInfo->metaData.OverlayCompress = 0;
stkInfo->metaData.Overlay = 0;
stkInfo->metaData.SpecialOverlayMask = 0;
stkInfo->metaData.SpecialOverlayCompress = 0;
stkInfo->metaData.SpecialOverlay = 0;
stkInfo->metaData.ImageProperty = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -