You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.2 KiB
78 lines
2.2 KiB
//////////////////////////////////////////////////////////////////// |
|
// ImageSCI.cpp |
|
// |
|
// Copyright 2007 cDc@seacave |
|
// Distributed under the Boost Software License, Version 1.0 |
|
// (See http://www.boost.org/LICENSE_1_0.txt) |
|
|
|
#include "Common.h" |
|
#include "ImageSCI.h" |
|
|
|
using namespace SEACAVE; |
|
|
|
|
|
// D E F I N E S /////////////////////////////////////////////////// |
|
|
|
#define IMAGE_SCI_TYPE 0x494353 //"SCI" = 3 bytes |
|
#define IMAGE_SCI_VERSION 1 //1 byte |
|
#define IMAGE_SCI_HEADER ((DWORD)((((DWORD)IMAGE_SCI_VERSION)<<24)|(DWORD)IMAGE_SCI_TYPE)) //"SCI"+ver = 4 bytes |
|
|
|
|
|
// S T R U C T S /////////////////////////////////////////////////// |
|
|
|
typedef struct SCIINFOHEADER_TYPE { |
|
uint32_t dwHeader; |
|
uint16_t shWidth; |
|
uint16_t shHeight; |
|
uint8_t byFormat; |
|
uint8_t byLevels; |
|
uint8_t byReserved1; |
|
uint8_t byReserved2; |
|
} SCIINFOHEADER; |
|
|
|
|
|
CImageSCI::CImageSCI() |
|
{ |
|
} // Constructor |
|
|
|
CImageSCI::~CImageSCI() |
|
{ |
|
} // Destructor |
|
/*----------------------------------------------------------------*/ |
|
|
|
|
|
HRESULT CImageSCI::ReadHeader() |
|
{ |
|
// read header |
|
((ISTREAM*)m_pStream)->setPos(0); |
|
SCIINFOHEADER sciInfo; |
|
m_pStream->read(&sciInfo, sizeof(SCIINFOHEADER)); |
|
if (sciInfo.dwHeader != IMAGE_SCI_HEADER) { |
|
LOG(LT_IMAGE, "error: invalid SCI image"); |
|
return _INVALIDFILE; |
|
} |
|
m_width = sciInfo.shWidth; |
|
m_height = sciInfo.shHeight; |
|
m_numLevels = sciInfo.byLevels; |
|
m_level = 0; |
|
m_format = (PIXELFORMAT)sciInfo.byFormat; |
|
m_stride = GetStride(m_format); |
|
m_lineWidth = GetDataSizes(0, m_dataWidth, m_dataHeight); |
|
return _OK; |
|
} // ReadHeader |
|
/*----------------------------------------------------------------*/ |
|
|
|
|
|
HRESULT CImageSCI::WriteHeader(PIXELFORMAT imageFormat, Size width, Size height, BYTE numLevels) |
|
{ |
|
// write header |
|
CImage::WriteHeader(imageFormat, width, height, numLevels); |
|
((OSTREAM*)m_pStream)->setPos(0); |
|
const SCIINFOHEADER sciInfo = {IMAGE_SCI_HEADER, (uint16_t)m_width, (uint16_t)m_height, (uint8_t)m_format, m_numLevels, 0, 0}; |
|
if (sizeof(SCIINFOHEADER) != m_pStream->write(&sciInfo, sizeof(SCIINFOHEADER))) { |
|
LOG(LT_IMAGE, "error: failed writing the SCI image"); |
|
return _INVALIDFILE; |
|
} |
|
return _OK; |
|
} // WriteHeader |
|
/*----------------------------------------------------------------*/
|
|
|