100 return m_length == 0;
154 P =
reinterpret_cast<LPCSTR
>(m_data.
ReferBuffer());
163 void SetAscii(LPCSTR lpsz,
size_t len = INVALID_SIZE)
171 if ( len == INVALID_SIZE )
175 ASSERT( ! ::IsBadReadPtr(lpsz, len) );
210 return m_Get(DWORD(),
ET_Long);
335 bool Get(Gdiplus::PropertyItem& _pi)
339 _pi.type =
static_cast<WORD
>(m_type);
354 bool Set(
const Gdiplus::PropertyItem& p)
359 SetByte(p.length,
static_cast<const BYTE*
>(p.value));
362 SetAscii(
static_cast<LPCSTR
>(p.value));
365 SetShort(p.length /
sizeof(WORD),
static_cast<const WORD*
>(p.value));
368 SetLong(p.length /
sizeof(DWORD),
static_cast<const DWORD*
>(p.value));
374 SetUndefined(p.length,
static_cast<const BYTE*
>(p.value));
377 SetSLong(p.length /
sizeof(
long),
static_cast<const long*
>(p.value));
396 size_t ln = min(mx, m_length);
410 s =
reinterpret_cast<LPCSTR
>(m_data.
ReferBuffer());
414 const WORD* P =
reinterpret_cast<const WORD*
>(m_data.
ReferBuffer());
423 const DWORD* P =
reinterpret_cast<const DWORD*
>(m_data.
ReferBuffer());
435 s +=
CStr::Fmt(_T(
"%u/%u "), P[i].molecular, P[i].denominator);
441 const long* P =
reinterpret_cast<const long*
>(m_data.
ReferBuffer());
453 s +=
CStr::Fmt(_T(
"%d/%d "), P[i].molecular, P[i].denominator);
474 ASSERT( m_data.
GetSize() /
sizeof(T) == m_length );
481 void m_Set(
size_t len, T* P,
EType t)
485 m_data.
SetElements(len *
sizeof(T),
reinterpret_cast<const BYTE*
>(P));
512 if ( m_pBmp != NULL )
532 m_pBmp = Gdiplus::Bitmap::FromFile(lpszFileName);
533 if ( m_pBmp !=NULL && m_pBmp->GetLastStatus() == Gdiplus::Ok )
535 UINT cnt = m_pBmp->GetPropertyCount();
537 m_pBmp->GetPropertyIdList(cnt, propIDs);
540 PROPID
id = propIDs[i];
541 UINT size = m_pBmp->GetPropertyItemSize(
id);
545 Gdiplus::PropertyItem* P =
reinterpret_cast<Gdiplus::PropertyItem*
>(mem.
Ref());
546 m_pBmp->GetPropertyItem(
id, size, P);
564 bool Load(LPCWSTR lpszFileName)
566 if (
Attach(lpszFileName) )
568 if ( m_pBmp != NULL )
573 HPALETTE hPal = NULL;
575 m_pBmp = Gdiplus::Bitmap::FromHBITMAP(b, hPal);
576 if ( m_pBmp != NULL && m_pBmp->GetLastStatus() == Gdiplus::Ok )
593 bool Load(HBITMAP hBmp, HPALETTE hPal = NULL)
597 m_pBmp = Gdiplus::Bitmap::FromHBITMAP(hBmp, hPal);
598 if ( m_pBmp !=NULL && m_pBmp->GetLastStatus() == Gdiplus::Ok )
633 bool r = m_Save(lpsz, m_pBmp, fmt, jpegQuality);
634 if ( ! r && m_pBmp != NULL )
636 TRACE0(
"Exif;画像再構築\n");
638 c.SetFromCOLORREF(RGB(0, 0, 0));
640 if ( m_pBmp->GetHBITMAP(c, &hBmp) == Gdiplus::Ok && hBmp != NULL )
643 Gdiplus::Bitmap bm(hBmp, h);
644 r = m_Save(lpsz, &bm, fmt, jpegQuality);
670 if ( m_pBmp != NULL )
673 c.SetFromCOLORREF(RGB(0, 0, 0));
675 if ( m_pBmp->GetHBITMAP(c, &hBmp) == Gdiplus::Ok && hBmp != NULL )
692 TRACE2(
"tag [%04X] = %s\n", m_tags.
Get(i).
first, m_tags.
Get(i).
second.ToString(16));
725 LPCSTR lpsz =
reinterpret_cast<LPCSTR
>(vb.
ReferBuffer());
727 if ( lpsz[0] == 0 &&
sizeof(TCHAR) == 2 )
733 s =
reinterpret_cast<LPCWSTR
>(&lpsz[8]);
760 if ( _s1.
GetLength() + 1 < len && lpsz != NULL )
794 void SetTagInfo(PROPID
id, LPCSTR lpsz,
size_t len = INVALID_SIZE)
796 m_tags[id].SetAscii(lpsz, len);
826 ti.
SetUndefined(4,
reinterpret_cast<const BYTE*
>(lpsz));
842 const BYTE bb[8] = {
'A',
'S',
'C',
'I',
'I', 0, 0, 0 };
847 const BYTE bb[8] = {
'J',
'I',
'S', 0, 0, 0, 0, 0 };
866 const BYTE bb[8] = {
'U',
'N',
'I',
'C',
'O',
'D',
'E', 0 };
907 const BYTE a[4] = {2, 0, 0, 0};
924 SetTagInfo(PropertyTagGpsLatitudeRef, isNorth ?
"N" :
"S");
925 TRational r[3] = { dd, 1, mm, 1,
static_cast<DWORD
>(ss * 1000), 1000 };
942 SetTagInfo(PropertyTagGpsLongitudeRef, isEast ?
"E" :
"W");
943 TRational r[3] = { dd, 1, mm, 1,
static_cast<DWORD
>(ss * 1000), 1000 };
972 UINT cnt = B->GetPropertyCount();
974 B->GetPropertyIdList(cnt, propIDs);
977 PROPID
id = propIDs[i];
978 B->RemovePropertyItem(
id);
980 Gdiplus::PropertyItem pi;
986 if ( B->SetPropertyItem(&pi) != Gdiplus::Ok )
997 Gdiplus::Bitmap* m_pBmp;
#define loop(VAR, CNT)
loop構文.
CVectorT< BYTE > GetByte(void) const
[取得] 8bit符号無し整数取得.
CVectorT< TSRational > GetSRational(void) const
[取得] 32bit符号付き有理数取得.
bool Set(const Gdiplus::PropertyItem &p)
[設定] プロパティアイテム設定
bool IsEmpty(void) const
[確認] データ有無確認
CVectorT< WORD > GetShort(void) const
[取得] 16bit符号無し整数取得.
void SetLong(DWORD d)
[設定] 32bit符号無し整数設定.
CVectorT< long > GetSLong(void) const
[取得] 32bit符号付き整数取得.
void SetRational(DWORD d1, DWORD d2)
[設定] 32bit符号無し有理数設定.
size_t GetLength(void) const
[取得] データ数取得.
void SetByte(size_t len, const BYTE *P)
[設定] 8bit符号無し整数設定.
CByteVector GetUndefined(void) const
[取得] 任意の 8bitデータ取得.
LPCSTR GetAscii(void) const
[取得] ASCII取得.
void SetLong(size_t len, const DWORD *P)
[設定] 32bit符号無し整数設定.
void SetByte(BYTE b)
[設定] 8bit符号無し整数設定.
void SetUndefined(size_t len, const BYTE *P)
[設定] 任意の 8bitデータ設定.
CVectorT< DWORD > GetLong(void) const
[取得] 32bit符号無し整数取得.
void SetSRational(long d1, long d2)
[設定] 32bit符号付き有理数設定.
void SetShort(size_t len, const WORD *P)
[設定] 16bit符号無し整数設定.
void SetShort(WORD w)
[設定] 16bit符号無し整数設定.
bool Get(Gdiplus::PropertyItem &_pi)
[取得] プロパティアイテム取得
CVectorT< TRational > GetRational(void) const
[取得] 32bit符号無し有理数取得.
void SetSLong(size_t len, const long *P)
[設定] 32bit符号無し整数設定.
EType GetType(void) const
[取得] データ型取得
void SetSRational(size_t len, const TSRational *P)
[設定] 32bit符号付き有理数設定.
CStr ToString(size_t mx=INVALID_SIZE) const
[取得] 文字列化
void SetSLong(long l)
[設定] 32bit符号無し整数設定.
void SetRational(size_t len, const TRational *P)
[設定] 32bit符号無し有理数設定.
void SetAscii(LPCSTR lpsz, size_t len=INVALID_SIZE)
[設定] ASCII設定.
const CMapTagInfos & GetTagInfoMap(void) const
[参照] EXIFタグ情報一覧参照.
bool Load(LPCWSTR lpszFileName)
[読込] ファイル読込み.
const Gdiplus::Bitmap * ReferBitmap(void) const
[取得] Bitmap取得.
void SetUserCommentTag(LPCWSTR lpsz)
[設定] UserCommentタグ設定(UNICODE).
const CTagInfo * GetTagInfo(PROPID id) const
[取得] EXIFタグ情報取得
void SetGpsAltitudeTag(DWORD d1, DWORD d2=1)
[設定] 高度設定
void SetGpsLongitudeTag(bool isEast, DWORD dd, DWORD mm, double ss)
[設定] 経度設定
void SetTagInfo(PROPID id, const CTagInfo &ti)
[設定] EXIFタグ情報設定.
void SetCopyrightTag(LPCSTR lpsz1, LPCSTR lpsz2=NULL)
[取得] Copyrightタグ取得.
CBitmapHandle GetBitmap(void) const
[取得] Bitmap取得.
bool SaveJpeg(LPCWSTR lpsz, LONG jpegQuality=80)
[作成] Jpegファイル作成.
bool Save(LPCWSTR lpsz, CGdiPlus::EBitmapFormat fmt=CGdiPlus::JPG, LONG jpegQuality=80)
[作成] 画像ファイル作成.
void SetGpsVersionTag(void)
[設定] GPSバージョン情報設定
void RemoveTagInfo(PROPID id)
[設定] EXIFタグ情報削除.
void Empty(void)
[設定] エンプティ化
void SetUserCommentTag(LPCSTR lpsz)
[設定] UserCommentタグ設定(ASCII/JIS).
bool Attach(LPCWSTR lpszFileName)
[読込] ファイル読込み(Attach).
CMapT< PROPID, CTagInfo > CMapTagInfos
タグ情報のマップ
@ ET_Undefined
任意の 8bitデータ。
@ ET_SRational
32ビット符号付き有理数(整数 2個。分子、分母)。
@ ET_Rational
32ビット符号無し有理数(整数 2個。分子、分母)。
void SetTagInfo(PROPID id, const SYSTEMTIME &st)
[設定] EXIFタグ情報設定(時間ASCII文字列).
bool Load(HBITMAP hBmp, HPALETTE hPal=NULL)
[読込] HBITMAP読込み.
CStr GetUserCommentTag(void) const
[取得] UserCommentタグ取得.
void SetGpsLatitudeTag(bool isNorth, DWORD dd, DWORD mm, double ss)
[設定] 緯度設定
void GetCopyrightTag(CStr &_s1, CStr &_s2) const
[取得] Copyrightタグ取得.
void SetTagInfo(PROPID id, LPCSTR lpsz, size_t len=INVALID_SIZE)
[設定] EXIFタグ情報設定(ASCII文字列).
void SetVersionTag(DWORD ver=0x0210)
[設定] バージョンタグ設定.
static HBITMAP LoadBitmap(LPCWSTR lpsz)
[作成] 画像ファイル読込み.
static bool Startup(void)
[設定] GDI+ 初期化.
static bool SaveBitmap(LPCWSTR lpsz, Gdiplus::Bitmap &bmp, EBitmapFormat fmt=BMP, LONG jpegQuality=80)
[作成] 画像ファイル作成.
virtual CPair & Ref(INDEX index)
[取得] 要素の参照取得.
virtual size_t GetSize(void) const
[取得] 要素数取得
bool RemoveKey(INK key)
[削除] キーと値を削除
virtual bool Set(INDEX index, const CPair &t)
[設定] 要素の設定.
virtual bool RemoveAll(void)
[削除] すべてのキーと値を削除
const VAL * GetValuePtr(INK key) const
[取得] 値アドレス取得.
virtual CPair Get(INDEX index) const
[取得] キーと値を取得.
bool IsEmpty(void) const
[確認] 空チェック
size_t GetLength(void) const
[取得] 文字列長
static CStrT Fmt(const TCHAR *lpszFormat,...)
[作成] 書式付き文字列作成
void Format(const TYP *lpszFormat,...)
[代入] 書式付き文字列代入.
virtual size_t GetSize(void) const
[取得] サイズ取得
TYP * GetBuffer(size_t size=0)
[操作] データアドレス取得
void ReleaseBuffer(void)
[操作] データの管理を元に戻す.
virtual const TYP * ReferBuffer(void) const
[取得] データアドレス取得
virtual INDEX Add(const TYP &t)
[追加] 要素一つ追加.
virtual size_t SetElements(size_t size, const TYP *P=NULL)
[設定] 複数要素設定.
size_t GetSize(void) const
[取得] サイズ取得
const TYP * Ref(void) const
[取得] ポインタ取得
int Compare(LPCSTR P1, LPCSTR P2, INT_PTR len=-1, DWORD dwCmpFlags=0)
[比較] 文字列比較(ASCII/SJIS用)
size_t GetLen(LPCSTR lpsz)
[計算] 文字列長計算(ASCII/SJIS用)
DWORD ToDword(LPCSTR lpsz, int iBase=10)
[変換] INT変換(ASCII/SJIS用).
void Copy(LPSTR _dst, LPCSTR src)
[複製] 文字列コピー(ASCII/SJIS用)
bool IsAsciiOnly(LPCSTR lpsz)
[判断] ASCIIオンリー判断
bool PrintF(LPSTR _pWork, size_t iLen, LPCSTR lpFmt,...)
[作成] 書式付き文字列作成(ASCII/SJIS用)
void MemCopy(T *_pDst, const void *pSrc, size_t len)
[複製] メモリコピー