mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@690 385bec56-5757-e545-9c3a-d8741f4650f1
638 lines
29 KiB
C++
638 lines
29 KiB
C++
/*---------------------------------------------------------------------------
|
||
Project: ImageDb
|
||
File: JpegMpLoader.h
|
||
|
||
SDカードにあるJPEG/MPファイルを読み込み、デコードした結果を返します。
|
||
---------------------------------------------------------------------------*/
|
||
#ifndef JPEG_MP_LOADER_H_
|
||
#define JPEG_MP_LOADER_H_
|
||
|
||
|
||
#include <nn/types.h>
|
||
#include <nn/util.h>
|
||
#include <nn/jpeg.h>
|
||
#include "../Core/ImageDbResult.h"
|
||
|
||
|
||
namespace imgdb {
|
||
|
||
|
||
/*!--------------------------------------------------------------------------*
|
||
@brief JPEG/MPベース読み込みクラス
|
||
*---------------------------------------------------------------------------*/
|
||
#pragma pack(push, 4)
|
||
class JpegMpBaseLoader
|
||
{
|
||
public:
|
||
/*!----------------------------------------------------------------------
|
||
@brief コンストラクタ
|
||
-----------------------------------------------------------------------*/
|
||
JpegMpBaseLoader();
|
||
|
||
/*!----------------------------------------------------------------------
|
||
@brief デストラクタ
|
||
-----------------------------------------------------------------------*/
|
||
virtual ~JpegMpBaseLoader();
|
||
|
||
|
||
/*=======================================================================
|
||
Load()を呼び出す前に設定しておく情報
|
||
=======================================================================*/
|
||
/*!----------------------------------------------------------------------
|
||
@brief 展開したユーザーメーカーノートを格納するバッファを取得する
|
||
@return バッファ
|
||
-----------------------------------------------------------------------*/
|
||
void* GetUserMakerNoteBuffer() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief 展開したユーザーメーカーノートを格納するバッファのサイズを取得する
|
||
@return バッファサイズ(バイト単位)
|
||
-----------------------------------------------------------------------*/
|
||
std::size_t GetUserMakerNoteBufferSize() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief 展開したユーザーメーカーノートを格納するバッファを設定する
|
||
@param[in] pBuf バッファ
|
||
@param[in] nSize バッファサイズ(バイト単位)
|
||
@details
|
||
バッファのアドレスは4バイトにアライメントされている必要があります。
|
||
-----------------------------------------------------------------------*/
|
||
void SetUserMakerNoteBuffer(void* pBuf, std::size_t nSize);
|
||
|
||
|
||
/*=======================================================================
|
||
Load()呼び出し成功後に取得できる情報
|
||
=======================================================================*/
|
||
/*!----------------------------------------------------------------------
|
||
@brief デコードした撮影日時情報を取得する
|
||
@param[out] rDateTime 撮影日時
|
||
@return デコードに成功していない場合はfalse
|
||
-----------------------------------------------------------------------*/
|
||
bool GetDateTime(nn::fnd::DateTime& rDateTime) const;
|
||
|
||
/*-----------------------------------------------------------------------
|
||
アプリケーション用のメーカーノート
|
||
-----------------------------------------------------------------------*/
|
||
/*!----------------------------------------------------------------------
|
||
@brief アプリケーション用のメーカーノートのデータサイズを取得する
|
||
@return データサイズ(バイト単位)
|
||
@details
|
||
デコードにより取り出したメーカーノートの実際のデータサイズです。
|
||
データ自体はSetUserMakerNoteBuffer()で指定したバッファに書き込まれています。
|
||
バッファが設定されていない、設定されていたがバッファサイズが不足して
|
||
取り出されなかった場合はゼロを返します。
|
||
-----------------------------------------------------------------------*/
|
||
std::size_t GetUserMakerNoteDataSize() const;
|
||
|
||
/*-----------------------------------------------------------------------
|
||
システムメーカーノート
|
||
-----------------------------------------------------------------------*/
|
||
/*!----------------------------------------------------------------------
|
||
@brief システムメーカーノートが存在するかチェックする
|
||
@return 存在する場合はtrue
|
||
-----------------------------------------------------------------------*/
|
||
bool IsExistSysMakerNote() const;
|
||
|
||
/*!----------------------------------------------------------------------
|
||
@brief システムメーカーノートのデータサイズを取得する
|
||
@return データサイズ(バイト単位)
|
||
-----------------------------------------------------------------------*/
|
||
static std::size_t GetSysMakerNoteDataSize();
|
||
/*!----------------------------------------------------------------------
|
||
@brief システムメーカーノートを取得する
|
||
@return システムメーカーノート
|
||
-----------------------------------------------------------------------*/
|
||
const void* GetSysMakerNoteData() const;
|
||
|
||
/*-----------------------------------------------------------------------
|
||
タイトルユニークID
|
||
-----------------------------------------------------------------------*/
|
||
/*!----------------------------------------------------------------------
|
||
@brief タイトルユニークIDを取得する
|
||
@return タイトルユニークID
|
||
@details
|
||
タイトルユニークIDとはアプリケーションが持つ20bitのユニークIDです。
|
||
-----------------------------------------------------------------------*/
|
||
u32 GetTitleUniqueId() const;
|
||
|
||
/*-----------------------------------------------------------------------
|
||
属性
|
||
-----------------------------------------------------------------------*/
|
||
/*!----------------------------------------------------------------------
|
||
@brief スクリーンショットフラグを取得する
|
||
@retval true スクリーンショットのデータ
|
||
@retval false スクリーンショット以外のデータ
|
||
-----------------------------------------------------------------------*/
|
||
bool GetScreenshotFlag() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief 焦点調整範囲表示フラグを取得する
|
||
@return 焦点調整範囲表示フラグ
|
||
-----------------------------------------------------------------------*/
|
||
bool GetAdjustablePictureFlag() const;
|
||
|
||
/*!----------------------------------------------------------------------
|
||
@brief 顔が含まれている写真かチェックする
|
||
@return 顔が含まれているならtrue
|
||
-----------------------------------------------------------------------*/
|
||
bool IsExistFace() const;
|
||
|
||
/*-----------------------------------------------------------------------
|
||
本体ID
|
||
-----------------------------------------------------------------------*/
|
||
/*!----------------------------------------------------------------------
|
||
@brief 撮影した本体IDが有効かチェックする
|
||
@return 有効な場合はtrue
|
||
-----------------------------------------------------------------------*/
|
||
bool IsValidShotBodyId() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief 撮影した本体IDを取得する
|
||
@return 撮影した本体ID
|
||
@details
|
||
無効な場合の戻り値は不定です。
|
||
-----------------------------------------------------------------------*/
|
||
u32 GetShotBodyId() const;
|
||
|
||
/*!----------------------------------------------------------------------
|
||
@brief 送信した本体IDが有効かチェックする
|
||
@return 有効な場合はtrue
|
||
-----------------------------------------------------------------------*/
|
||
bool IsValidSendBodyId() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief 送信した本体IDを取得する
|
||
@return 送信した本体ID
|
||
@details
|
||
無効な場合の戻り値は不定です。
|
||
-----------------------------------------------------------------------*/
|
||
u32 GetSendBodyId() const;
|
||
|
||
/*!----------------------------------------------------------------------
|
||
@brief 受信した本体IDが有効かチェックする
|
||
@return 有効な場合はtrue
|
||
-----------------------------------------------------------------------*/
|
||
bool IsValidReceiveBodyId() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief 受信した本体IDを取得する
|
||
@return 受信した本体ID
|
||
@details
|
||
無効な場合の戻り値は不定です。
|
||
-----------------------------------------------------------------------*/
|
||
u32 GetReceiveBodyId() const;
|
||
|
||
/*!----------------------------------------------------------------------
|
||
@brief 最後に編集した本体IDが有効かチェックする
|
||
@return 有効な場合はtrue
|
||
-----------------------------------------------------------------------*/
|
||
bool IsValidEditorBodyId() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief 最後に編集した本体IDを取得する
|
||
@return 最後に編集した本体ID
|
||
@details
|
||
無効な場合の戻り値は不定です。
|
||
-----------------------------------------------------------------------*/
|
||
u32 GetEditorBodyId() const;
|
||
|
||
|
||
/*=======================================================================
|
||
その他
|
||
=======================================================================*/
|
||
/*!----------------------------------------------------------------------
|
||
@brief 画像のサイズを求める
|
||
@param[in] nWidth 画像の幅(ピクセル単位)
|
||
@param[in] nHeight 画像の高さ(ピクセル単位)
|
||
@param[in] eFormat 画像のピクセルフォーマット
|
||
@return 画像サイズ(バイト単位)
|
||
-----------------------------------------------------------------------*/
|
||
static std::size_t ComputeImageSize(
|
||
int nWidth, int nHeight, nn::jpeg::CTR::PixelFormat eFormat);
|
||
|
||
protected:
|
||
void SetDateTime(const nn::fnd::DateTime& rDateTime);
|
||
void ResetDateTime();
|
||
|
||
bool SetSysMakerNoteData(const void* pNote, std::size_t nSize);
|
||
|
||
void SetUserMakerNoteDataSize(std::size_t nSize);
|
||
|
||
void SetScreenshotFlag(bool bFlag);
|
||
void SetAdjustablePictureFlag(bool bFlag);
|
||
|
||
void SetShotBodyId(u32 nBodyId);
|
||
void ResetShotBodyId();
|
||
|
||
void SetSendBodyId(u32 nBodyId);
|
||
void ResetSendBodyId();
|
||
|
||
void SetReceiveBodyId(u32 nBodyId);
|
||
void ResetReceiveBodyId();
|
||
|
||
void SetEditorBodyId(u32 nBodyId);
|
||
void ResetEditorBodyId();
|
||
|
||
private:
|
||
bool GetHandleFlag(int nHandleType) const;
|
||
void SetHandleFlag(int nHandleType, bool bFlag);
|
||
|
||
bool IsValidBodyId(int nIdType) const;
|
||
u32 GetBodyId(int nIdType) const;
|
||
void SetBodyId(int nIdType, u32 nBodyId);
|
||
void ResetBodyId(int nIdType);
|
||
|
||
private:
|
||
void* m_pUserMakerNoteBuf;
|
||
std::size_t m_pUserMakerNoteBufSize;
|
||
nn::fnd::DateTime m_nDateTime;
|
||
bool m_bValidDateTime;
|
||
NN_PADDING3;
|
||
std::size_t m_nUserMakerNoteDataSize;
|
||
void* m_pSysMakerNoteData;
|
||
};
|
||
#pragma pack(pop)
|
||
|
||
|
||
/*!--------------------------------------------------------------------------*
|
||
@brief JPEG読み込みクラス
|
||
@details
|
||
JPEGを読み込むには最低限以下の関数を呼び出す必要があります。<BR>
|
||
SetFilePath()<BR>
|
||
SetBuffer()<BR>
|
||
SetFormat()<BR>
|
||
Load()
|
||
*---------------------------------------------------------------------------*/
|
||
class JpegLoader : public JpegMpBaseLoader, private nn::util::NonCopyable<JpegLoader>
|
||
{
|
||
public:
|
||
//! 展開画像のピクセルフォーマットのデフォルト値
|
||
static const nn::jpeg::CTR::PixelFormat c_eDefaultRawFormat = nn::jpeg::CTR::PIXEL_FORMAT_CTR_RGB565;
|
||
//! サムネイル読み込みモードのデフォルト値
|
||
static const bool c_nDefaultThumbnailMode = false;
|
||
//! 展開した画像を格納するバッファの幅のデフォルト値
|
||
static const int c_nDefaultOutputWidth = 0;
|
||
|
||
public:
|
||
/*!----------------------------------------------------------------------
|
||
@brief コンストラクタ
|
||
-----------------------------------------------------------------------*/
|
||
JpegLoader();
|
||
|
||
/*!----------------------------------------------------------------------
|
||
@brief デストラクタ
|
||
-----------------------------------------------------------------------*/
|
||
virtual ~JpegLoader();
|
||
|
||
/*!----------------------------------------------------------------------
|
||
@brief JPEGファイルを読み込む
|
||
@return 結果
|
||
@details
|
||
現在の設定されている内容でJPEG画像を読み込んで展開します。<BR>
|
||
呼び出し前に各種設定を行っておいてください。<BR>
|
||
設定が不正だった場合はResultErrorInvalidParamが返ってきます。<BR>
|
||
本関数を呼び出すと内部で一時的に最大で 400KB 程のメモリが消費されます。
|
||
-----------------------------------------------------------------------*/
|
||
Result Load();
|
||
|
||
|
||
/*=======================================================================
|
||
Load()を呼び出す前に設定しておく情報
|
||
=======================================================================*/
|
||
/*!----------------------------------------------------------------------
|
||
@brief 読み込むJPEGファイルのパスを取得する
|
||
@return ファイルパス
|
||
-----------------------------------------------------------------------*/
|
||
const wchar_t* GetFilePath() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief 読み込むJPEGファイルのパスを設定する
|
||
@param[in] pPath ファイルパス
|
||
-----------------------------------------------------------------------*/
|
||
void SetFilePath(const wchar_t* pPath);
|
||
|
||
|
||
/*!----------------------------------------------------------------------
|
||
@brief 展開画像のピクセルフォーマットを取得する
|
||
@return ピクセルフォーマット
|
||
-----------------------------------------------------------------------*/
|
||
nn::jpeg::CTR::PixelFormat GetFormat() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief 展開画像のピクセルフォーマットを設定する
|
||
@param[in] eFormat ピクセルフォーマット
|
||
-----------------------------------------------------------------------*/
|
||
void SetFormat(nn::jpeg::CTR::PixelFormat eFormat);
|
||
|
||
|
||
/*!----------------------------------------------------------------------
|
||
@brief 展開した画像を格納するバッファの幅を取得する
|
||
@return 幅(ピクセル単位)
|
||
-----------------------------------------------------------------------*/
|
||
int GetOutputWidth();
|
||
/*!----------------------------------------------------------------------
|
||
@brief 展開した画像を格納するバッファの幅を設定する
|
||
@param[in] nWidth 幅(ピクセル単位)
|
||
@details
|
||
この幅はデコードのバッファの横幅を指定するもので、この値を指定すること
|
||
で、例えば64×64の画像を256×256のバッファの左上に展開するといったこと
|
||
が可能になります。この値が画像の幅よりも小さい場合は、ビッチリと詰まっ
|
||
た状態で画像がデコードされます。
|
||
-----------------------------------------------------------------------*/
|
||
void SetOutputWidth(int nWidth);
|
||
|
||
|
||
/*!----------------------------------------------------------------------
|
||
@brief サムネイル読み込みモードか調べる
|
||
@retval true サムネイル読み込みモード
|
||
@retval false 画像読み込みモード
|
||
-----------------------------------------------------------------------*/
|
||
bool IsThumbnailMode() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief サムネイル読み込みモードを設定する
|
||
@param[in] bThumbMode サムネイル読み込みモード
|
||
@details
|
||
bThumbModeにtrueを指定すると、Load()時にサムネイル画像が読み込まれます。
|
||
-----------------------------------------------------------------------*/
|
||
void SetThumbnailMode(bool bThumbMode);
|
||
|
||
|
||
/*!----------------------------------------------------------------------
|
||
@brief 展開した画像を格納するバッファを取得する
|
||
@return バッファ
|
||
-----------------------------------------------------------------------*/
|
||
void* GetBuffer() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief 展開した画像を格納するバッファのサイズを取得する
|
||
@return バッファサイズ(バイト単位)
|
||
-----------------------------------------------------------------------*/
|
||
std::size_t GetBufferSize() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief 展開した画像を格納するバッファを設定する
|
||
@param[in] pBuf バッファ
|
||
@param[in] nSize バッファサイズ(バイト単位)
|
||
@details
|
||
バッファのアドレスは4バイトにアライメントされている必要があります。
|
||
-----------------------------------------------------------------------*/
|
||
void SetBuffer(void* pBuf, std::size_t nSize);
|
||
|
||
|
||
/*=======================================================================
|
||
Load()を呼び出す成功後に取得できる情報
|
||
=======================================================================*/
|
||
/*!----------------------------------------------------------------------
|
||
@brief 読み込んだ画像の幅を取得する
|
||
@return 幅(ピクセル単位)
|
||
@details
|
||
縮小デコードが働く場合は縮小後の幅となります。
|
||
-----------------------------------------------------------------------*/
|
||
int GetRawWidth() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief 読み込んだ画像の高さを取得する
|
||
@return 高さ(ピクセル単位)
|
||
@details
|
||
縮小デコードが働く場合は縮小後の高さとなります。
|
||
-----------------------------------------------------------------------*/
|
||
int GetRawHeight() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief 読み込んだ画像のデータサイズを取得する
|
||
@return データサイズ(バイト単位)
|
||
-----------------------------------------------------------------------*/
|
||
std::size_t GetRawDataSize() const;
|
||
|
||
/*!----------------------------------------------------------------------
|
||
@brief 縮小デコードの影響を受けない実画像の幅を取得する
|
||
@return 幅(ピクセル単位)
|
||
-----------------------------------------------------------------------*/
|
||
int GetRealWidth() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief 縮小デコードの影響を受けない実画像の高さを取得する
|
||
@return 高さ(ピクセル単位)
|
||
-----------------------------------------------------------------------*/
|
||
int GetRealHeight() const;
|
||
|
||
private:
|
||
void ResetLoaded();
|
||
bool IsLoaded() const;
|
||
|
||
Result ValidateParam() const;
|
||
|
||
private:
|
||
const wchar_t* m_pFilePath;
|
||
int m_nOutputWidth;
|
||
nn::jpeg::CTR::PixelFormat m_eFormat;
|
||
bool m_bThumbMode;
|
||
NN_PADDING2;
|
||
|
||
void* m_pBuf;
|
||
std::size_t m_nBufSize;
|
||
|
||
int m_nRawWidth;
|
||
int m_nRawHeight;
|
||
std::size_t m_nRawDataSize;
|
||
int m_nRealWidth;
|
||
int m_nRealHeight;
|
||
};
|
||
|
||
|
||
/*!--------------------------------------------------------------------------*
|
||
@brief MP読み込みクラス
|
||
@details
|
||
MPを読み込むには最低限以下の関数を呼び出す必要があります。<BR>
|
||
SetFilePath()<BR>
|
||
SetBuffer()<BR>
|
||
SetFormat()<BR>
|
||
Load()<BR>
|
||
|
||
立体画像として表示する際、通常は GetOffsetH() の値に応じて画像を左右にずら
|
||
して表示してください。
|
||
*---------------------------------------------------------------------------*/
|
||
class MpLoader : public JpegMpBaseLoader, private nn::util::NonCopyable<MpLoader>
|
||
{
|
||
public:
|
||
//! 展開画像のピクセルフォーマットのデフォルト値
|
||
static const nn::jpeg::CTR::PixelFormat c_eDefaultRawFormat = nn::jpeg::CTR::PIXEL_FORMAT_CTR_RGB565;
|
||
//! サムネイル読み込みモードのデフォルト値
|
||
static const bool c_nDefaultThumbnailMode = false;
|
||
//! 展開した画像を格納するバッファの幅のデフォルト値
|
||
static const int c_nDefaultOutputWidth = 0;
|
||
|
||
public:
|
||
/*!----------------------------------------------------------------------
|
||
@brief コンストラクタ
|
||
-----------------------------------------------------------------------*/
|
||
MpLoader();
|
||
/*!----------------------------------------------------------------------
|
||
@brief デストラクタ
|
||
-----------------------------------------------------------------------*/
|
||
virtual ~MpLoader();
|
||
|
||
|
||
/*!----------------------------------------------------------------------
|
||
@brief MPファイルを読み込む
|
||
@return 結果
|
||
@details
|
||
現在の設定されている内容でMP画像を読み込んで展開します。<BR>
|
||
呼び出し前に各種設定を行っておいてください。<BR>
|
||
設定が不正だった場合はResultErrorInvalidParamが返ってきます。<BR>
|
||
本関数を呼び出すと内部で一時的に最大で 400KB 程のメモリが消費されます。
|
||
-----------------------------------------------------------------------*/
|
||
Result Load();
|
||
|
||
|
||
/*=======================================================================
|
||
Load()を呼び出す前に設定しておく情報
|
||
=======================================================================*/
|
||
/*!----------------------------------------------------------------------
|
||
@brief 読み込むMPファイルのパスを取得する
|
||
@return ファイルパス
|
||
-----------------------------------------------------------------------*/
|
||
const wchar_t* GetFilePath() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief 読み込むMPファイルのパスを設定する
|
||
@param[in] pPath ファイルパス
|
||
-----------------------------------------------------------------------*/
|
||
void SetFilePath(const wchar_t* pPath);
|
||
|
||
|
||
/*!----------------------------------------------------------------------
|
||
@brief 展開画像のピクセルフォーマットを取得する
|
||
@return ピクセルフォーマット
|
||
-----------------------------------------------------------------------*/
|
||
nn::jpeg::CTR::PixelFormat GetFormat() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief 展開画像のピクセルフォーマットを設定する
|
||
@param[in] eFormat ピクセルフォーマット
|
||
-----------------------------------------------------------------------*/
|
||
void SetFormat(nn::jpeg::CTR::PixelFormat eFormat);
|
||
|
||
|
||
/*!----------------------------------------------------------------------
|
||
@brief 展開した画像を格納するバッファの幅を取得する
|
||
@return 幅(ピクセル単位)
|
||
-----------------------------------------------------------------------*/
|
||
int GetOutputWidth();
|
||
/*!----------------------------------------------------------------------
|
||
@brief 展開した画像を格納するバッファの幅を設定する
|
||
@param[in] nWidth 幅(ピクセル単位)
|
||
@details
|
||
この幅はデコードのバッファの横幅を指定するもので、この値を指定すること
|
||
で、例えば64×64の画像を256×256のバッファの左上に展開するといったこと
|
||
が可能になります。この値が画像の幅よりも小さい場合は、ビッチリと詰まっ
|
||
た状態で画像がデコードされます。
|
||
-----------------------------------------------------------------------*/
|
||
void SetOutputWidth(int nWidth);
|
||
|
||
|
||
/*!----------------------------------------------------------------------
|
||
@brief サムネイル読み込みモードか調べる
|
||
@retval true サムネイル読み込みモード
|
||
@retval false 画像読み込みモード
|
||
-----------------------------------------------------------------------*/
|
||
bool IsThumbnailMode() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief サムネイル読み込みモードを設定する
|
||
@param[in] bThumbMode サムネイル読み込みモード
|
||
@details
|
||
bThumbModeにtrueを指定すると、Load()時にサムネイル画像が読み込まれます。
|
||
-----------------------------------------------------------------------*/
|
||
void SetThumbnailMode(bool bThumbMode);
|
||
|
||
|
||
/*!----------------------------------------------------------------------
|
||
@brief 展開した左側の画像を格納するバッファを取得する
|
||
@return バッファ
|
||
-----------------------------------------------------------------------*/
|
||
void* GetBufferL();
|
||
/*!----------------------------------------------------------------------
|
||
@brief 展開した右側の画像を格納するバッファを取得する
|
||
@return バッファ
|
||
-----------------------------------------------------------------------*/
|
||
void* GetBufferR();
|
||
/*!----------------------------------------------------------------------
|
||
@brief 展開した画像を格納するバッファのサイズを取得する
|
||
@return バッファサイズ(バイト単位)
|
||
-----------------------------------------------------------------------*/
|
||
std::size_t GetBufferSize() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief 展開した画像を格納するバッファを設定する
|
||
@param[in] pBufL 左側のバッファ(ヌル不可)
|
||
@param[in] pBufR 右側のバッファ(ヌル可)
|
||
@param[in] nSize バッファサイズ(バイト単位)
|
||
@details
|
||
バッファのアドレスは4バイトにアライメントされている必要があります。<BR>
|
||
pBufRにヌルを指定することで、左側の画像だけを取得することが出来ます。<BR>
|
||
サムネイル画像はpBufRにも左側の画像が格納されます。
|
||
-----------------------------------------------------------------------*/
|
||
void SetBuffer(void* pBufL, void* pBufR, std::size_t nSize);
|
||
|
||
|
||
/*=======================================================================
|
||
Load()呼び出し成功後に取得できる情報
|
||
=======================================================================*/
|
||
/*!----------------------------------------------------------------------
|
||
@brief 読み込んだ画像の幅を取得する
|
||
@return 幅(ピクセル単位)
|
||
@details
|
||
縮小デコードが働く場合は縮小後の幅となります。
|
||
-----------------------------------------------------------------------*/
|
||
int GetRawWidth() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief 読み込んだ画像の高さを取得する
|
||
@return 高さ(ピクセル単位)
|
||
@details
|
||
縮小デコードが働く場合は縮小後の高さとなります。
|
||
-----------------------------------------------------------------------*/
|
||
int GetRawHeight() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief 読み込んだ画像のデータサイズを取得する
|
||
@return データサイズ(バイト単位)
|
||
-----------------------------------------------------------------------*/
|
||
std::size_t GetRawDataSize() const;
|
||
|
||
/*!----------------------------------------------------------------------
|
||
@brief 縮小デコードの影響を受けない実画像の幅を取得する
|
||
@return 幅(ピクセル単位)
|
||
-----------------------------------------------------------------------*/
|
||
int GetRealWidth() const;
|
||
/*!----------------------------------------------------------------------
|
||
@brief 縮小デコードの影響を受けない実画像の高さを取得する
|
||
@return 高さ(ピクセル単位)
|
||
-----------------------------------------------------------------------*/
|
||
int GetRealHeight() const;
|
||
|
||
/*!----------------------------------------------------------------------
|
||
@brief 水平オフセット値を取得する
|
||
@return 水平オフセット値(ピクセル単位)
|
||
@details
|
||
値が 0.0f の時は左と右の画像を同じ位置に表示します。<BR>
|
||
値が 1.0f の時は 左画像を左に(縮小デコードの影響を受けない実画像の幅に
|
||
対して)1ピクセル、右画像を右に1ピクセル移動して表示します。<BR>
|
||
画面上の表示位置は表示する大きさに合わせたスケールがかかるようにしてく
|
||
ださい。<BR>
|
||
この値は GetAdjustablePictureFlag() が true を返すときのみ使用し、false
|
||
のときは 0.0f として扱ってください。
|
||
-----------------------------------------------------------------------*/
|
||
f32 GetOffsetH() const;
|
||
|
||
private:
|
||
void ResetLoaded();
|
||
bool IsLoaded() const;
|
||
|
||
Result ValidateParam() const;
|
||
|
||
private:
|
||
const wchar_t* m_pFilePath;
|
||
int m_nOutputWidth;
|
||
nn::jpeg::CTR::PixelFormat m_eFormat;
|
||
bool m_bThumbMode;
|
||
NN_PADDING2;
|
||
|
||
void* m_pBufL;
|
||
void* m_pBufR;
|
||
std::size_t m_nBufSize;
|
||
|
||
int m_nRawWidth;
|
||
int m_nRawHeight;
|
||
std::size_t m_nRawDataSize;
|
||
int m_nRealWidth;
|
||
int m_nRealHeight;
|
||
f32 m_fOfstH;
|
||
};
|
||
|
||
|
||
} // end of namespace imgdb
|
||
|
||
#endif // JPEG_MP_LOADER_H_
|