ultimatepp/bazaar/plugin/gdal/frmts/fit/fit.cpp
cxl 23ff1e7e82 .gdal moved to bazaar
git-svn-id: svn://ultimatepp.org/upp/trunk@9273 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2015-12-07 13:36:24 +00:00

197 lines
7 KiB
C++

/******************************************************************************
* $Id: fit.cpp 14048 2008-03-20 18:47:21Z rouault $
*
* Project: FIT Driver
* Purpose: Implement FIT Support - not using the SGI iflFIT library.
* Author: Philip Nemec, nemec@keyholecorp.com
*
******************************************************************************
* Copyright (c) 2001, Keyhole, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
****************************************************************************/
#include <limits.h>
#include "fit.h"
CPL_CVSID("$Id: fit.cpp 14048 2008-03-20 18:47:21Z rouault $");
GDALDataType fitDataType(int dtype) {
switch (dtype) {
case 1: // iflBit /* single-bit */
fprintf(stderr,
"GDAL unsupported data type (single-bit) in fitDataType\n");
return GDT_Unknown;
case 2: // iflUChar /* unsigned character (byte) */
return GDT_Byte;
case 4: // iflChar /* signed character (byte) */
fprintf(stderr,
"GDAL unsupported data type (signed char) in fitDataType\n");
return GDT_Unknown;
// return Byte;
case 8: // iflUShort /* unsigned short integer (nominally 16 bits) */
return GDT_UInt16;
case 16: // iflShort /* signed short integer */
return GDT_Int16;
case 32: // iflUInt /* unsigned integer (nominally 32 bits) */
// case 32: // iflULong /* deprecated, same as iflUInt */
return GDT_UInt32;
break;
case 64: // iflInt /* integer */
// case 64: // iflLong /* deprecated, same as iflULong */
return GDT_Int32;
case 128: // iflFloat /* floating point */
return GDT_Float32;
case 256: // iflDouble /* double precision floating point */
return GDT_Float64;
default:
CPLError(CE_Failure, CPLE_NotSupported,
"FIT - unknown data type %i in fitDataType", dtype);
return GDT_Unknown;
} // switch
}
int fitGetDataType(GDALDataType eDataType) {
switch (eDataType) {
case GDT_Byte:
return 2; // iflUChar - unsigned character (byte)
case GDT_UInt16:
return 8; // iflUShort - unsigned short integer (nominally 16 bits)
case GDT_Int16:
return 16; // iflShort - signed short integer
case GDT_UInt32:
return 32; // iflUInt - unsigned integer (nominally 32 bits)
case GDT_Int32:
return 64; // iflInt - integer
case GDT_Float32:
return 128; // iflFloat - floating point
case GDT_Float64:
return 256; // iflDouble - double precision floating point
default:
CPLError(CE_Failure, CPLE_NotSupported,
"FIT - unsupported GDALDataType %i in fitGetDataType",
eDataType);
return 0;
} // switch
}
#define UNSUPPORTED_COMBO() \
CPLError(CE_Failure, CPLE_NotSupported, \
"FIT write - unsupported combination (band 1 = %s " \
"and %i bands) - ignoring color model", \
GDALGetColorInterpretationName(colorInterp), nBands); \
return 0
int fitGetColorModel(GDALColorInterp colorInterp, int nBands) {
// XXX - shoould check colorInterp for all bands, not just first one
switch(colorInterp) {
case GCI_GrayIndex:
switch (nBands) {
case 1:
return 2; // iflLuminance - luminance
case 2:
return 13; // iflLuminanceAlpha - Luminance plus alpha
default:
UNSUPPORTED_COMBO();
} // switch
case GCI_PaletteIndex:
CPLError(CE_Failure, CPLE_NotSupported,
"FIT write - unsupported ColorInterp PaletteIndex\n");
return 0;
case GCI_RedBand:
switch (nBands) {
case 3:
return 3; // iflRGB - full color (Red, Green, Blue triplets)
case 4:
return 5; // iflRGBA - full color with transparency (alpha channel)
default:
UNSUPPORTED_COMBO();
} // switch
case GCI_BlueBand:
switch (nBands) {
case 3:
return 9; // iflBGR - full color (ordered Blue, Green, Red)
default:
UNSUPPORTED_COMBO();
} // switch
case GCI_AlphaBand:
switch (nBands) {
case 4:
return 10; // iflABGR - Alpha, Blue, Green, Red (SGI frame buffers)
default:
UNSUPPORTED_COMBO();
} // switch
case GCI_HueBand:
switch (nBands) {
case 3:
return 6; // iflHSV - Hue, Saturation, Value
default:
UNSUPPORTED_COMBO();
} // switch
case GCI_CyanBand:
switch (nBands) {
case 3:
return 7; // iflCMY - Cyan, Magenta, Yellow
case 4:
return 8; // iflCMYK - Cyan, Magenta, Yellow, Black
default:
UNSUPPORTED_COMBO();
} // switch
case GCI_GreenBand:
case GCI_SaturationBand:
case GCI_LightnessBand:
case GCI_MagentaBand:
case GCI_YellowBand:
case GCI_BlackBand:
CPLError(CE_Failure, CPLE_NotSupported,
"FIT write - unsupported combination (band 1 = %s) "
"- ignoring color model",
GDALGetColorInterpretationName(colorInterp));
return 0;
default:
CPLDebug("FIT write", "unrecognized colorInterp %i - deriving from "
"number of bands (%i)", colorInterp, nBands);
switch (nBands) {
case 1:
return 2; // iflLuminance - luminance
case 2:
return 13; // iflLuminanceAlpha - Luminance plus alpha
case 3:
return 3; // iflRGB - full color (Red, Green, Blue triplets)
case 4:
return 5; // iflRGBA - full color with transparency (alpha channel)
} // switch
CPLError(CE_Failure, CPLE_NotSupported,
"FIT write - unrecognized colorInterp %i and "
"unrecognized number of bands (%i)", colorInterp, nBands);
return 0;
} // switch
}