2025-11-27 16:46:48 +09:00

174 lines
5.5 KiB
C++

// ==========================================================================
// Class Specification : COXJPEGFile
// ==========================================================================
// Header file : OXJPGFle.h
// Version: 9.3
// This software along with its related components, documentation and files ("The Libraries")
// is © 1994-2007 The Code Project (1612916 Ontario Limited) and use of The Libraries is
// governed by a software license agreement ("Agreement"). Copies of the Agreement are
// available at The Code Project (www.codeproject.com), as part of the package you downloaded
// to obtain this file, or directly from our office. For a copy of the license governing
// this software, you may contact us at legalaffairs@codeproject.com, or by calling 416-849-8900.
// //////////////////////////////////////////////////////////////////////////
// Properties:
// NO Abstract class (does not have any objects)
// YES Derived from CObject
// NO Is a Cwnd.
// NO Two stage creation (constructor & Create())
// NO Has a message map
// NO Needs a resource (template)
// NO Persistent objects (saveable on disk)
// YES Uses exceptions
// //////////////////////////////////////////////////////////////////////////
// Desciption :
// This class encapsulates the reading and writing of JPG files
// Remark:
//
// Prerequisites (necessary conditions):
//
/////////////////////////////////////////////////////////////////////////////
#ifndef __JPEGFILE_H__
#define __JPEGFILE_H__
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include "OXDllExt.h"
extern "C"
{
#define JPEG_CJPEG_DJPEG /* define proper options in jconfig.h */
#define JPEG_INTERNAL_OPTIONS /* cjpeg.c,djpeg.c need to see xxx_SUPPORTED */
#include "jinclude.h"
#include "jpeglib.h"
#include "jerror.h" /* get library error codes too */
#include "cderror.h" /* get application-specific error codes */
}
class OX_CLASS_DECL COXJPEGFile : public CObject
{
friend class COXJPEGCompressor;
friend class COXJPEGDecompressor;
// Data Members
public:
protected:
CFile* m_pJPEGFile;
CString m_sFullPath;
BOOL m_bTotalReset;
private:
// Member Functions
public:
COXJPEGFile();
// --- In :
// --- Out :
// --- Returns :
// --- Effect : Contructor of object
COXJPEGFile(CString sFullPath);
// --- In : sFullPath : the full path subdirs + name + extender of the JPEG file
// --- Out :
// --- Returns :
// --- Effect : Contructor of object
// File will not be opened yet
COXJPEGFile(CFile* pJPEGFile);
// --- In : pJPEGFile : a pointer to a CFile(JPEG). must already be open
// Must have the right access mode
// --- Out :
// --- Returns :
// --- Effect : Contructor of object
// Could be used to pass a CMemFile as parameter
void SetTotalReset(BOOL bTotal);
// --- In : bTotal : if TRUE, the jpgfile object will reset all its internal members
// like the file pointer.
// --- Out :
// --- Returns :
// --- Effect : This functionalty is added to prevent or enforce the object to reset itself
// completely. When the object is used with an opened CFile*, sometimes
// it is not desired that the object clears this CFile* to NULL. E.g. This is
// the case when this CFile* is a CMemFile* which contents vary but not its
// pointer. Normally this object was intended to be constructed each time
// you need it and then good programming practice dictates that it clears
// all internals before destruction.
CString GetFullFilePath();
// --- In :
// --- Out :
// --- Returns : Gets the full path.
// --- Effect :
#ifdef _DEBUG
virtual void Dump(CDumpContext&) const;
virtual void AssertValid() const;
#endif //_DEBUG
virtual ~COXJPEGFile();
// --- In :
// --- Out :
// --- Returns :
// --- Effect : Destructor of object
protected:
// Compression to JPG
static void init_destination (j_compress_ptr cinfo);
static jpeg_boolean empty_output_buffer (j_compress_ptr cinfo);
static void term_destination(j_compress_ptr cinfo);
void InitJPGDestination(j_compress_ptr cinfo, CFile* pOut);
virtual BOOL InitWrite(j_compress_ptr cinfo, BOOL bExtra = FALSE);
virtual BOOL StartOutput(j_compress_ptr cinfo);
virtual BOOL FinishOutput(j_compress_ptr cinfo);
virtual BOOL PutPixelRows(j_compress_ptr cinfo, JSAMPARRAY Buf, JDIMENSION rowsSupplied);
// Decompression from JPG
static void init_source (j_decompress_ptr cinfo);
static jpeg_boolean fill_input_buffer (j_decompress_ptr cinfo);
static void skip_input_data(j_decompress_ptr cinfo, long num_bytes);
static void term_source(j_decompress_ptr cinfo);
void InitJPGSource(j_decompress_ptr cinfo, CFile* pInfile);
virtual BOOL InitRead(j_decompress_ptr cinfo);
virtual BOOL StartInput(j_decompress_ptr cinfo);
virtual BOOL FinishInput(j_decompress_ptr cinfo);
virtual JDIMENSION GetPixelRows(j_decompress_ptr cinfo, JSAMPARRAY scanlines, JDIMENSION max_lines);
// Translation from one JPG flavor to another
virtual jvirt_barray_ptr* ReadCoefficients(j_decompress_ptr srcinfo);
virtual void CopyCriticalParams(j_decompress_ptr srcinfo, j_compress_ptr dstinfo);
virtual void WriteCoefficients(j_compress_ptr dstinfo, jvirt_barray_ptr* coef_arrays);
// General helper methods
size_t ReadData(void* pBuffer, size_t length);
size_t WriteData(const void* pBuffer, size_t length);
// can throw file exceptions
virtual void OpenFile(UINT nOpenFlags);
virtual void AbortFile();
virtual void CloseFile();
private:
};
#endif //__JPEGFILE_H__