99 lines
2.7 KiB
C++
Executable File
99 lines
2.7 KiB
C++
Executable File
/** \file
|
|
* \brief File Format Access
|
|
*
|
|
* See Copyright Notice in im_lib.h
|
|
*/
|
|
|
|
#include "im_file.h"
|
|
#include "im_attrib.h"
|
|
|
|
#ifndef __IM_FORMAT_H
|
|
#define __IM_FORMAT_H
|
|
|
|
|
|
class imFormat;
|
|
|
|
/** \brief Image File Format Virtual Base Class (SDK Use Only)
|
|
*
|
|
* \par
|
|
* Virtual Base class for file formats. All file formats inherit from this class.
|
|
* \ingroup filesdk */
|
|
class imFileFormatBase: public _imFile
|
|
{
|
|
public:
|
|
const imFormat* iformat;
|
|
|
|
imFileFormatBase(const imFormat* _iformat): iformat(_iformat) {}
|
|
virtual ~imFileFormatBase() {}
|
|
|
|
imAttribTable* AttribTable() {return (imAttribTable*)this->attributes_table;}
|
|
|
|
/* Pure Virtual Methods. Every driver must implement all the following methods. */
|
|
|
|
virtual int Open(const char* file_name) = 0; // Must initialize compression and image_count
|
|
virtual int New(const char* file_name) = 0;
|
|
virtual void Close() = 0;
|
|
virtual void* Handle(int index) = 0;
|
|
virtual int ReadImageInfo(int index) = 0; // Should update compression
|
|
virtual int ReadImageData(void* data) = 0;
|
|
virtual int WriteImageInfo() = 0; // Should update compression
|
|
virtual int WriteImageData(void* data) = 0; // Must update image_count
|
|
};
|
|
|
|
/** \brief Image File Format Descriptor Class (SDK Use Only)
|
|
*
|
|
* \par
|
|
* All file formats must define these informations. They are stored by \ref imFormatRegister.
|
|
* \ingroup filesdk */
|
|
class imFormat
|
|
{
|
|
public:
|
|
const char* format;
|
|
const char* desc;
|
|
const char* ext;
|
|
const char** comp;
|
|
const char* extra;
|
|
int comp_count,
|
|
can_sequence;
|
|
|
|
virtual imFileFormatBase* Create() const = 0;
|
|
virtual int CanWrite(const char* compression, int color_mode, int data_type) const = 0;
|
|
|
|
imFormat(const char* _format, const char* _desc, const char* _ext,
|
|
const char** _comp, int _comp_count, int _can_sequence)
|
|
:format(_format), desc(_desc), ext(_ext), comp(_comp), extra(""),
|
|
comp_count(_comp_count), can_sequence(_can_sequence)
|
|
{}
|
|
virtual ~imFormat() {}
|
|
};
|
|
|
|
extern "C"
|
|
{
|
|
|
|
/* Internal Use only */
|
|
|
|
/* Opens a file with the respective format driver
|
|
* Uses the file extension to speed up the search for the format driver.
|
|
* Used by "im_file.cpp" only. */
|
|
imFileFormatBase* imFileFormatBaseOpen(const char* file_name, int *error);
|
|
|
|
/* Opens a file with the given format
|
|
* Used by "im_file.cpp" only. */
|
|
imFileFormatBase* imFileFormatBaseOpenAs(const char* file_name, const char* format, int *error);
|
|
|
|
/* Creates a file using the given format driver.
|
|
* Used by "im_file.cpp" only. */
|
|
imFileFormatBase* imFileFormatBaseNew(const char* file_name, const char* format, int *error);
|
|
|
|
|
|
/* File Format SDK */
|
|
|
|
/** Register a format driver.
|
|
* \ingroup filesdk */
|
|
void imFormatRegister(imFormat* iformat);
|
|
|
|
|
|
}
|
|
|
|
#endif
|