Files
core/ASCImageStudio3/AVSImageRaw3/trunk/libraw/ImageRaw3Metadata.cpp

135 lines
2.6 KiB
C++

#include "stdafx.h"
#include "ImageRaw3.h"
#include "ImageRawATLError.h"
#include "ImageRawCommon.h"
#define _RET_ERROR_IR3(HR) return CImageRawATLError::Error(hr = (HR),__uuidof(IImageRaw3))
#define _RET_IR3(HR) if (FAILED(hr = (HR))) \
_RET_ERROR_IR3(hr); \
else \
return hr;
#define _CHECK_RET_IR3(HR) do {_CHECK_HR(hr = (HR)); if (FAILED(hr)){ _RET_IR3(hr);}} while(0);
HRESULT CImageRaw3::GetMetadata(BSTR fileName)
{
HRESULT hr;
_ifd_entrys.clear();
_CHECK_RET_IR3(m_imageraw_core._open(fileName));
if (!(m_imageraw_core._get_dcraw()))
{
m_imageraw_core._close();
return E_FAIL;
}
if (m_imageraw_core._get_dcraw()->_ifd_entrys.size() <= 0)
{
m_dwMetaDataFlag = 0;
m_imageraw_core._close();
return S_FALSE;
}
else
{
m_dwMetaDataFlag = m_imageraw_core._get_dcraw()->order;
_ifd_entrys = m_imageraw_core._get_dcraw()->_ifd_entrys;
m_imageraw_core._close();
return S_OK;
}
}
/*
HRESULT CImageRaw3::GetIFD(BSTR bstrReserved, DWORD dwReserved, DWORD * dwOffset)
{
if (!dwOffset)
return E_POINTER;
if (!(m_imageraw_core._get_dcraw()))
return E_FAIL;
if (!(m_imageraw_core._get_dcraw()->_has_exif))
return E_FAIL;
if (0 == dwReserved)
*dwOffset = m_imageraw_core._get_dcraw()->_exif_ifd_offset;
else if (1 == dwReserved)
*dwOffset = m_imageraw_core._get_dcraw()->_exif_base_offset;
else
return E_INVALIDARG;
return S_OK;
}*/
HRESULT CImageRaw3::IFDCount(DWORD dwReserved, DWORD * dwCount)
{
if (!dwCount)
return E_POINTER;
*dwCount = _ifd_entrys.size();
return S_OK;
}
HRESULT CImageRaw3::IFDTag(DWORD dwIndex, USHORT * dwTag)
{
if (!dwTag)
return E_POINTER;
*dwTag = -1;
size_t size_ = _ifd_entrys.size();
if (dwIndex >= size_)
return E_INVALIDARG;
*dwTag = _ifd_entrys[dwIndex]._ifd_tag;
return S_OK;
}
HRESULT CImageRaw3::IFDOffset(DWORD dwIndex, DWORD * dwOffset)
{
if (!dwOffset)
return E_POINTER;
*dwOffset = 0;
size_t size_ =_ifd_entrys.size();
if (dwIndex >= size_)
return E_INVALIDARG;
*dwOffset = _ifd_entrys[dwIndex]._ifd_ifd_offset;
return S_OK;
}
HRESULT CImageRaw3::BaseOffset(DWORD dwIndex, DWORD * dwOffset)
{
if (!dwOffset)
return E_POINTER;
*dwOffset = 0;
size_t size_ = _ifd_entrys.size();
if (dwIndex >= size_)
return E_INVALIDARG;
*dwOffset = _ifd_entrys[dwIndex]._ifd_base_offset;
return S_OK;
}
HRESULT CImageRaw3::GetFlags(DWORD dwReserved, DWORD *dwFlags)
{
if (!dwFlags)
return E_POINTER;
*dwFlags = 0x4949;
if (0 == m_dwMetaDataFlag)
return S_FALSE;
*dwFlags = m_dwMetaDataFlag;
return S_OK;
}