【VC开源代码栏目提醒】:网学会员为需要VC开源代码的朋友们搜集整理了BmpToGif.cpp相关资料,希望对各位网友有所帮助!
// BmpToGif.cpp : implementation file
//
#include "stdafx.h"
#include "ImageHandle.h"
#include "BmpToGif.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CBmpToGif dialog
extern void GetCodecClsid(const WCHAR* format, CLSID* pClsid);
extern CString ExtractFileName(CString & str);
extern CString GetFileExtendedName(CString &strFile);
CBmpToGif::CBmpToGif(CWnd* pParent /*=NULL*/)
: CDialog(CBmpToGif::IDD, pParent)
{
//{{AFX_DATA_INIT(CBmpToGif)
m_SrcFile = _T("");
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDI_SHOWIMAGE);
}
void CBmpToGif::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CBmpToGif)
DDX_Text(pDX, IDC_SRCFILE, m_SrcFile);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CBmpToGif, CDialog)
//{{AFX_MSG_MAP(CBmpToGif)
ON_BN_CLICKED(IDC_QUIT, OnQuit)
ON_BN_CLICKED(IDC_CHOOSE, OnChoose)
ON_BN_CLICKED(IDC_CONVERT, OnConvert)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBmpToGif message handlers
void CBmpToGif::OnOK()
{
}
BOOL CBmpToGif::OnInitDialog()
{
CDialog::OnInitDialog();
GdiplusStartup(&m_pGdiToken,&m_Gdiplus,NULL);
CButton* pButtonSimple = (CButton*)GetDlgItem(IDC_SIMPLECONVERT);
pButtonSimple->SetCheck(TRUE);
SetIcon(m_hIcon, TRUE);
return TRUE;
}
void CBmpToGif::OnCancel()
{
GdiplusShutdown(m_pGdiToken);
CDialog::OnCancel();
}
void CBmpToGif::OnQuit()
{
OnCancel();
}
void CBmpToGif::OnChoose()
{
CButton* pButtonSimple = (CButton*)GetDlgItem(IDC_SIMPLECONVERT);
//单文件转换
if (pButtonSimple->GetCheck() == BST_CHECKED)
{
CFileDialog flDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"位图文件(bmp)|*.bmp||");
if (flDlg.DoModal() == IDOK)
{
m_SrcFile = flDlg.GetPathName();
UpdateData(FALSE);
}
}
else //批量转换
{
BROWSEINFO BrowInfo;
char folder[MAX_PATH] = {0};
memset(&BrowInfo,0,sizeof(BROWSEINFO));
BrowInfo.hwndOwner = m_hWnd;
BrowInfo.pszDisplayName = folder;
BrowInfo.lpszTitle = "请选择文件";
BrowInfo.ulFlags = BIF_EDITBOX;
ITEMIDLIST *pitem = SHBrowseForFolder(&BrowInfo);
if (pitem)
{
SHGetPathFromIDList(pitem,folder);
m_SrcFile = folder;
UpdateData(FALSE);
}
}
}
void CBmpToGif::OnConvert()
{
if (!m_SrcFile.IsEmpty())
{
CButton* pButtonSimple = (CButton*)GetDlgItem(IDC_SIMPLECONVERT);
//单文件转换
if (pButtonSimple->GetCheck() == BST_CHECKED)
{
try
{
CFileFind flFind;
flFind.FindFile(m_SrcFile);
flFind.FindNextFile();
if (!flFind.IsDirectory())
{
Bitmap *pBmp = Bitmap::FromFile(m_SrcFile.AllocSysString());
if (pBmp)
{
CLSID clsid;
GetCodecClsid(L"image/gif", &clsid);
CString GifFile = ExtractFileName(m_SrcFile);
GifFile += ".gif"; //添加扩展名
pBmp->Save(GifFile.AllocSysString(),&clsid);
}
}
MessageBox("转换成功!");
}
catch(...)
{
MessageBox("转换失败!");
}
}
else //批量转换
{
try
{
CFileFind flFind;
flFind.FindFile(m_SrcFile+"\\*.*");
BOOL ret = flFind.FindNextFile();
CLSID clsid;
GetCodecClsid(L"image/gif", &clsid);
CString strfile;
CString strextend;
while(ret)
{
if (!flFind.IsDirectory())
{
strfile = flFind.GetFilePath();
strextend = GetFileExtendedName(strfile);
if (strextend == "bmp")
{
Bitmap *pBmp = Bitmap::FromFile(strfile.AllocSysString());
if (pBmp)
{
CString GifFile = ExtractFileName(strfile);
GifFile += ".gif"; //添加扩展名
pBmp->Save(GifFile.AllocSysString(),&clsid);
}
delete pBmp;
}
}
ret = flFind.FindNextFile();
}
MessageBox("转换成功!");
}
catch(...)
{
MessageBox("转换失败!");
}
}
}
}