• 大小: 10KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-07
  • 语言: C/C++
  • 标签: GIF  c++  

资源简介

GIF图片 c++显示代码

资源截图

代码片段和文件信息

#include “stdafx.h“
#include “GIFFile.h“
#include 
#define ASSERT assert
#define TRACE(...) 

//////////////////////////////////////////////////////////////////////
// Nested structures member functions
//////////////////////////////////////////////////////////////////////

inline int GIFFile::TGIFControlExt::GetPackedValue(enum ControlExtValues Value)
{
int nRet = (int)m_cPacked;
switch (Value)
{
case GCX_PACKED_DISPOSAL:
nRet = (nRet & 28) >> 2;
break;

case GCX_PACKED_USERINPUT:
nRet = (nRet & 2) >> 1;
break;

case GCX_PACKED_TRANSPCOLOR:
nRet &= 1;
break;
};

return nRet;
}

inline int GIFFile::TGIFLSDescriptor::GetPackedValue(enum LSDPackedValues Value)
{
int nRet = (int)m_cPacked;

switch (Value)
{
case LSD_PACKED_GLOBALCT:
nRet = nRet >> 7;
break;

case LSD_PACKED_CRESOLUTION:
nRet = ((nRet & 0x70) >> 4) + 1;
break;

case LSD_PACKED_SORT:
nRet = (nRet & 8) >> 3;
break;

case LSD_PACKED_GLOBALCTSIZE:
nRet &= 7;
break;
};

return nRet;
}

inline int GIFFile::TGIFImageDescriptor::GetPackedValue(enum IDPackedValues Value)
{
int nRet = (int)m_cPacked;

switch (Value)
{
case ID_PACKED_LOCALCT:
nRet >>= 7;
break;

case ID_PACKED_INTERLACE:
nRet = ((nRet & 0x40) >> 6);
break;

case ID_PACKED_SORT:
nRet = (nRet & 0x20) >> 5;
break;

case ID_PACKED_LOCALCTSIZE:
nRet &= 7;
break;
};

return nRet;
}

BOOL GIFFile::Load(LPCTSTR szFileName)
{
ASSERT(szFileName);
HANDLE hFile = CreateFile(szFileName GENERIC_READ FILE_SHARE_READ NULL OPEN_EXISTING FILE_ATTRIBUTE_NORMAL NULL);
if (hFile == NULL)
{
TRACE(_T(“Load (file): Error opening file %s\n“) szFileName);
return FALSE;
};
//获得图片文件的大小,用来分配全局内存
DWORD dwSize = GetFileSize(hFile NULL);
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE | GMEM_NODISCARD dwSize);
if (!hGlobal)
{
TRACE(_T(“Load (file): Error allocating memory\n“));
return FALSE;
};

char *pData = reinterpret_cast(GlobalLock(hGlobal));
if (!pData)
{
TRACE(_T(“Load (file): Error locking memory\n“));
GlobalFree(hGlobal);
return FALSE;
};
DWORD dwReadedSize; //保存实际读取的文件大小
ReadFile(hFile pData dwSize &dwReadedSize NULL); //读取图片到全局内存当中
CloseHandle(hFile); //关闭文件句柄
GlobalUnlock(hGlobal);

BOOL bRetValue = Load(hGlobal dwSize);
GlobalFree(hGlobal);
return bRetValue;
}
void GIFFile::UnLoad()
{
if (m_pPicture)
{
m_pPicture->Release();
m_pPicture = NULL;
};
if (m_pStream){
m_pStream->Release();
m_pStream = NULL;
}
std::vectorame>::iterator it;
for (it = m_arrframes.begin(); it < m_arrframes.end(); it++){
(*it).m_pPicture->Release();
(*it).m_pStream->Release();
}
m_arrframes.clear();
m_pGIFLSDescriptor = NULL;
m_pGIFHeader = NULL;
m_pRawData = NULL;
m_bIsGIF = FALSE;
m_clrBackground = RGB(255 255 255); // white by default
m_nGlobalCTSize = 0;
m_nCurrOffset 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       9965  2016-04-19 16:43  GIFStatic.cpp

     文件       1248  2016-04-19 16:47  GIFStatic.h

     文件      14227  2016-04-19 16:20  GIFFile.cpp

     文件       5429  2016-04-19 16:18  GIFFile.h

----------- ---------  ---------- -----  ----

                30869                    4


评论

共有 条评论