diff options
author | scuri <scuri> | 2009-09-10 17:33:34 +0000 |
---|---|---|
committer | scuri <scuri> | 2009-09-10 17:33:34 +0000 |
commit | 5335c91f4a10081ef8b04a6d47403c0efc064647 (patch) | |
tree | 742e83f8cfbf52e0d82c1e07f733ca4a5212b535 | |
parent | 67475cb6aa3af3a0c65351562c22f25814a45fcb (diff) |
# Fixed: RAW format initialization.
-rw-r--r-- | html/en/rep_guide.html | 4 | ||||
-rw-r--r-- | include/im_format_all.h | 2 | ||||
-rw-r--r-- | include/im_format_raw.h | 8 | ||||
-rw-r--r-- | src/im_fileraw.cpp | 38 | ||||
-rw-r--r-- | src/im_format_raw.cpp | 20 |
5 files changed, 44 insertions, 28 deletions
diff --git a/html/en/rep_guide.html b/html/en/rep_guide.html index 144c11f..5c70790 100644 --- a/html/en/rep_guide.html +++ b/html/en/rep_guide.html @@ -35,9 +35,9 @@ void* buffer = malloc(size);</pre> <pre>float value; if (is_packed) -value = idata[y*width*depth + x*depth + d] + value = idata[y*width*depth + x*depth + d] else -value = idata[d*width*height + y*width + x]</pre> + value = idata[d*width*height + y*width + x]</pre> </div> <div align="left"> diff --git a/include/im_format_all.h b/include/im_format_all.h index 3a7cbb6..bb43816 100644 --- a/include/im_format_all.h +++ b/include/im_format_all.h @@ -477,7 +477,7 @@ void imFormatRegisterTGA(void); Description (string) Comments: - In fact ASCII is an expansion... + In fact ASCII is an expansion, not a compression, because the file will be larger than binary data. \endverbatim * \ingroup format */ void imFormatRegisterPNM(void); diff --git a/include/im_format_raw.h b/include/im_format_raw.h index fdb07f8..80a8203 100644 --- a/include/im_format_raw.h +++ b/include/im_format_raw.h @@ -22,8 +22,9 @@ extern "C" { * \par * Internal Implementation. * \par - * Supports RAW binary images. You must know image parameters a priori. \n - * You must set the IM_INT attributes "Width", "Height", "ColorMode", "DataType" before the imFileReadImageInfo/imFileWriteImageInfo functions. + * Supports RAW binary images. This is a unstructured and uncompressed binary data. + * It is NOT a Camera RAW file generated in many professional digital cameras. \n + * You must know image parameters a priori and must set the IM_INT attributes "Width", "Height", "ColorMode", "DataType" before the imFileReadImageInfo/imFileWriteImageInfo functions. * \par * The data must be in binary form, but can start in an arbitrary offset from the begining of the file, use attribute "StartOffset". * The default is at 0 offset. @@ -54,8 +55,9 @@ extern "C" { ImageCount[1], StartOffset[0], SwitchType[FALSE], ByteOrder[IM_LITTLEENDIAN], Padding[0] IM_INT (1) \endverbatim * \ingroup format */ -imFileFormatBase* imFormatInitRAW(void); +imFormat* imFormatInitRAW(void); +void imFormatFinishRAW(void); #if defined(__cplusplus) } diff --git a/src/im_fileraw.cpp b/src/im_fileraw.cpp index 530b6c9..91be826 100644 --- a/src/im_fileraw.cpp +++ b/src/im_fileraw.cpp @@ -2,7 +2,7 @@ * \brief RAW File Format Open/New Functions * * See Copyright Notice in im_lib.h - * $Id: im_fileraw.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $ + * $Id: im_fileraw.cpp,v 1.3 2009/09/10 17:33:35 scuri Exp $ */ #include "im.h" @@ -21,44 +21,46 @@ imFile* imFileOpenRaw(const char* file_name, int *error) { assert(file_name); - imFileFormatBase* iformat = imFormatInitRAW(); - *error = iformat->Open(file_name); + imFormat* iformat = imFormatInitRAW(); + imFileFormatBase* ifileformat = iformat->Create(); + *error = ifileformat->Open(file_name); if (*error) { - delete iformat; + delete ifileformat; return NULL; } - imFileClear(iformat); + imFileClear(ifileformat); - iformat->attrib_table = new imAttribTable(599); + ifileformat->attrib_table = new imAttribTable(599); - iformat->counter = imCounterBegin(file_name); + ifileformat->counter = imCounterBegin(file_name); - return iformat; + return ifileformat; } imFile* imFileNewRaw(const char* file_name, int *error) { assert(file_name); - imFileFormatBase* iformat = imFormatInitRAW(); - *error = iformat->New(file_name); + imFormat* iformat = imFormatInitRAW(); + imFileFormatBase* ifileformat = iformat->Create(); + *error = ifileformat->New(file_name); if (*error) { - delete iformat; + delete ifileformat; return NULL; } - imFileClear(iformat); + imFileClear(ifileformat); - iformat->is_new = 1; - iformat->image_count = 0; - iformat->compression[0] = 0; + ifileformat->is_new = 1; + ifileformat->image_count = 0; + ifileformat->compression[0] = 0; - iformat->attrib_table = new imAttribTable(101); + ifileformat->attrib_table = new imAttribTable(101); - iformat->counter = imCounterBegin(file_name); + ifileformat->counter = imCounterBegin(file_name); - return iformat; + return ifileformat; } diff --git a/src/im_format_raw.cpp b/src/im_format_raw.cpp index 5f8d2e5..6a6a7fd 100644 --- a/src/im_format_raw.cpp +++ b/src/im_format_raw.cpp @@ -2,7 +2,7 @@ * \brief RAW File Format * * See Copyright Notice in im_lib.h - * $Id: im_format_raw.cpp,v 1.3 2009/07/10 18:39:37 scuri Exp $ + * $Id: im_format_raw.cpp,v 1.4 2009/09/10 17:33:35 scuri Exp $ */ #include "im_format.h" @@ -58,11 +58,23 @@ public: int CanWrite(const char* compression, int color_mode, int data_type) const; }; +static imFormat* raw_format = NULL; -imFileFormatBase* imFormatInitRAW(void) +void imFormatFinishRAW(void) { - imFormatRAW iformat; - return iformat.Create(); + if (raw_format) + { + delete raw_format; + raw_format = NULL; + } +} + +imFormat* imFormatInitRAW(void) +{ + if (!raw_format) + raw_format = new imFormatRAW(); + + return raw_format; } int imFileFormatRAW::Open(const char* file_name) |