📄 dim_ome_format.cpp
字号:
/*****************************************************************************
OME XML file format (Open Microscopy Environment)
UCSB/BioITR property
Copyright (c) 2005 by Dmitry V. Fedorov <www.dimin.net> <dima@dimin.net>
IMPLEMENTATION
Author: Dima V. Fedorov <mailto:dima@dimin.net> <http://www.dimin.net/>
History:
11/21/2005 15:43 - First creation
Ver : 1
*****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "dim_ome_format.h"
#include "dim_ome_format_io.cpp"
//****************************************************************************
// MISC
//****************************************************************************
TDimOmeParams initTDimOmeParams()
{
TDimOmeParams r;
r.i = initTDimImageInfo();
return r;
}
//****************************************************************************
// INTERNAL STRUCTURES
//****************************************************************************
void omeGetImageInfo( TDimFormatHandle *fmtHndl )
{
if (fmtHndl == NULL) return;
if (fmtHndl->internalParams == NULL) return;
TDimOmeParams *omePar = (TDimOmeParams *) fmtHndl->internalParams;
TDimImageInfo *info = &omePar->i;
*info = initTDimImageInfo();
/*
if (fmtHndl->stream == NULL) return;
if (dimSeek(fmtHndl, 0, SEEK_SET) != 0) return;
if ( dimRead( fmtHndl, &ibwPar->bh, 1, sizeof(BinHeader5) ) != sizeof(BinHeader5)) return;
*/
// set image parameters
info->width = 1;
info->height = 1;
info->samples = 1;
info->number_pages = 1;
info->imageMode = DIM_GRAYSCALE;
// by now we'll normalize all data
info->depth = 8;
info->pixelType = DIM_TAG_BYTE;
//-------------------------------------------------
// init palette
//-------------------------------------------------
info->lut.count = 0;
for (int i=0; i<256; i++) info->lut.rgba[i] = dimRGB(i, i, i);
}
void omeWriteOmeHeader( TDimFormatHandle *fmtHndl )
{
if (fmtHndl == NULL) return;
if (fmtHndl->internalParams == NULL) return;
if (fmtHndl->stream == NULL) return;
std::string str;
// write header
str="";
str += "<?xml version = \"1.0\" encoding = \"UTF-8\"?>\n";
str += "\n";
str += "<!--\n";
str += "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
str += "# Generated by:\n";
str += "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
str += "-->\n";
str += "\n";
str += "<OME xmlns = \"http://www.openmicroscopy.org/XMLschemas/OME/FC/ome.xsd\"\n";
str += " xmlns:STD = \"http://www.openmicroscopy.org/XMLschemas/STD/RC2/STD.xsd\"\n";
str += " xmlns:Bin = \"http://www.openmicroscopy.org/XMLschemas/BinaryFile/RC1/BinaryFile.xsd\"\n";
str += " xmlns:xsi = \"http://www.w3.org/2001/XMLSchema-instance\"\n";
str += " xsi:schemaLocation = \"http://www.openmicroscopy.org/XMLschemas/OME/FC/ome.xsd http://www.openmicroscopy.org/XMLschemas/OME/FC/ome.xsd http://www.openmicroscopy.org/XMLschemas/STD/RC2/STD.xsd http://www.openmicroscopy.org/XMLschemas/STD/RC2/STD.xsd\">\n";
str += "\n";
dimWrite( fmtHndl, (void*) str.c_str(), 1, str.size() );
}
void omeWriteOmeEnd( TDimFormatHandle *fmtHndl )
{
if (fmtHndl == NULL) return;
if (fmtHndl->internalParams == NULL) return;
if (fmtHndl->stream == NULL) return;
std::string str = "</OME>\n";
dimWrite( fmtHndl, (void*) str.c_str(), 1, str.size() );
}
void omeWriteImageEnd( TDimFormatHandle *fmtHndl )
{
if (fmtHndl == NULL) return;
if (fmtHndl->internalParams == NULL) return;
if (fmtHndl->stream == NULL) return;
std::string str = "";
str += " </Pixels>\n";
str += " </Image>\n";
dimWrite( fmtHndl, (void*) str.c_str(), 1, str.size() );
}
//****************************************************************************
// FORMAT DEMANDED FUNTIONS
//****************************************************************************
//----------------------------------------------------------------------------
// PARAMETERS, INITS
//----------------------------------------------------------------------------
DIM_INT dimOmeValidateFormatProc (DIM_MAGIC_STREAM *magic, DIM_UINT length)
{
if (length < DIM_OME_MAGIC_SIZE) return -1;
//if (memcmp( magic, ibwMagicWin, DIM_IBW_MAGIC_SIZE ) == 0) return 0;
//if (memcmp( magic, ibwMagicMac, DIM_IBW_MAGIC_SIZE ) == 0) return 0;
return -1;
}
TDimFormatHandle dimOmeAquireFormatProc( void )
{
TDimFormatHandle fp = initTDimFormatHandle();
return fp;
}
void dimOmeReleaseFormatProc (TDimFormatHandle *fmtHndl)
{
if (fmtHndl == NULL) return;
dimOmeCloseImageProc ( fmtHndl );
}
//----------------------------------------------------------------------------
// OPEN/CLOSE
//----------------------------------------------------------------------------
void dimOmeCloseImageProc (TDimFormatHandle *fmtHndl)
{
if (fmtHndl == NULL) return;
if (fmtHndl->io_mode == DIM_IO_WRITE)
{
omeWriteImageEnd ( fmtHndl );
omeWriteOmeEnd ( fmtHndl );
}
else
{
clearMetaTags( &fmtHndl->metaData );
}
dimClose ( fmtHndl );
if (fmtHndl->internalParams != NULL)
{
TDimOmeParams *omePar = (TDimOmeParams *) fmtHndl->internalParams;
delete [] omePar;
}
fmtHndl->internalParams = NULL;
}
DIM_UINT dimOmeOpenImageProc (TDimFormatHandle *fmtHndl, DIM_ImageIOModes io_mode)
{
if (fmtHndl == NULL) return 1;
if (fmtHndl->internalParams != NULL) dimOmeCloseImageProc (fmtHndl);
fmtHndl->internalParams = (void *) new TDimOmeParams [1];
TDimOmeParams *omePar = (TDimOmeParams *) fmtHndl->internalParams;
*omePar = initTDimOmeParams();
if (io_mode == DIM_IO_READ)
{
return 1;
if ( isCustomReading ( fmtHndl ) != TRUE )
fmtHndl->stream = fopen( fmtHndl->fileName, "rb" );
if (fmtHndl->stream == NULL) return 1;
omeGetImageInfo( fmtHndl );
}
else
{
if ( isCustomWriting ( fmtHndl ) != TRUE )
fmtHndl->stream = fopen( fmtHndl->fileName, "wb" );
if (fmtHndl->stream == NULL) return 1;
// now write image headers
omeWriteOmeHeader( fmtHndl );
}
return 0;
}
//----------------------------------------------------------------------------
// INFO for OPEN image
//----------------------------------------------------------------------------
DIM_UINT dimOmeGetNumPagesProc ( TDimFormatHandle *fmtHndl )
{
if (fmtHndl == NULL) return 0;
if (fmtHndl->internalParams == NULL) return 0;
TDimOmeParams *omePar = (TDimOmeParams *) fmtHndl->internalParams;
return omePar->i.number_pages;
}
TDimImageInfo dimOmeGetImageInfoProc ( TDimFormatHandle *fmtHndl, DIM_UINT page_num )
{
TDimImageInfo ii = initTDimImageInfo();
if (fmtHndl == NULL) return ii;
TDimOmeParams *omePar = (TDimOmeParams *) fmtHndl->internalParams;
return omePar->i;
page_num;
}
//----------------------------------------------------------------------------
// METADATA
//----------------------------------------------------------------------------
DIM_UINT dimOmeReadMetaDataProc (TDimFormatHandle *fmtHndl, DIM_UINT page, int group, int tag, int type)
{
if (fmtHndl == NULL) return 1;
//return read_ome_metadata (fmtHndl, group, tag, type);
return 0;
page;
}
char* dimOmeReadMetaDataAsTextProc ( TDimFormatHandle *fmtHndl )
{
if (fmtHndl == NULL) return NULL;
//return read_text_ome_metadata ( fmtHndl );
return 0;
}
DIM_UINT dimOmeAddMetaDataProc (TDimFormatHandle *fmtHndl)
{
fmtHndl=fmtHndl;
return 1;
}
//----------------------------------------------------------------------------
// READ/WRITE
//----------------------------------------------------------------------------
DIM_UINT dimOmeReadImageProc ( TDimFormatHandle *fmtHndl, DIM_UINT page )
{
if (fmtHndl == NULL) return 1;
if (fmtHndl->stream == NULL) return 1;
fmtHndl->pageNumber = page;
//return read_ome_image( fmtHndl );
return 0;
}
DIM_UINT dimOmeWriteImageProc ( TDimFormatHandle *fmtHndl )
{
return write_ome_image( fmtHndl );
}
//****************************************************************************
//
// EXPORTED FUNCTION
//
//****************************************************************************
TDimFormatItem dimOmeItems[1] = {
{
"OME", // short name, no spaces
"Open Microscopy Environment XML", // Long format name
"ome", // pipe "|" separated supported extension list
0, //canRead; // 0 - NO, 1 - YES
1, //canWrite; // 0 - NO, 1 - YES
0, //canReadMeta; // 0 - NO, 1 - YES
1, //canWriteMeta; // 0 - NO, 1 - YES
1, //canWriteMultiPage; // 0 - NO, 1 - YES
//TDivFormatConstrains constrains ( w, h, pages, minsampl, maxsampl, minbitsampl, maxbitsampl, noLut )
{ 0, 0, 0, 1, 0, 0, 0, 1 }
}
};
TDimFormatHeader dimOmeHeader = {
sizeof(TDimFormatHeader),
"1.0.0",
"OME CODEC",
"OME CODEC",
12, // 0 or more, specify number of bytes needed to identify the file
{1, 1, dimOmeItems}, //dimJpegSupported,
dimOmeValidateFormatProc,
// begin
dimOmeAquireFormatProc, //TDimAquireFormatProc
// end
dimOmeReleaseFormatProc, //TDimReleaseFormatProc
// params
NULL, //TDimAquireIntParamsProc
NULL, //TDimLoadFormatParamsProc
NULL, //TDimStoreFormatParamsProc
// image begin
dimOmeOpenImageProc, //TDimOpenImageProc
dimOmeCloseImageProc, //TDimCloseImageProc
// info
dimOmeGetNumPagesProc, //TDimGetNumPagesProc
dimOmeGetImageInfoProc, //TDimGetImageInfoProc
// read/write
dimOmeReadImageProc, //TDimReadImageProc
dimOmeWriteImageProc, //TDimWriteImageProc
NULL, //TDimReadImageTileProc
NULL, //TDimWriteImageTileProc
NULL, //TDimReadImageLineProc
NULL, //TDimWriteImageLineProc
NULL, //TDimReadImageThumbProc
NULL, //TDimWriteImageThumbProc
NULL, //dimJpegReadImagePreviewProc, //TDimReadImagePreviewProc
// meta data
dimOmeReadMetaDataProc, //TDimReadMetaDataProc
dimOmeAddMetaDataProc, //TDimAddMetaDataProc
dimOmeReadMetaDataAsTextProc, //TDimReadMetaDataAsTextProc
NULL,
NULL,
NULL,
""
};
extern "C" {
TDimFormatHeader* dimOmeGetFormatHeader(void)
{
return &dimOmeHeader;
}
} // extern C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -