mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-15 07:40:29 +08:00
135 lines
2.6 KiB
C++
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;
|
|
} |