⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dim_ome_format.cpp

📁 Digital Notebook Source Code v1.1.0 [
💻 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 + -