日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JPG,动态GIF,BMP一些常用解决办法

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JPG,动态GIF,BMP一些常用解决办法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JPG,動態GIF,BMP一些常用解決辦法

常用方式0,使用GIF89A類:

優勢: 一招鮮吃遍天,上至動態GIF,下至靜態JPG,BMP兩句搞定,簡單方便

缺點: 有時會出現邊緣效果, 有的圖像會挺明顯

使用方法:
#include "gif89a.h"
CGif89a* gif;
在調用函數內添加:
 gif=new CGif89a(this->m_hWnd);
 gif->Load("test.gif");
 gif->SetPosition(100,100);
 gif->Play();

 //gif->Pause(TRUE); //Pause(TRUE)為暫停GIF的播放
 //gif->Pause(FALSE);//Pause(FALSE)為繼續GIF的播放


常用方式1,使用iPicture:

優勢: MS早期的圖片類, 可以顯示所有的靜態圖片, 顯示動態GIF尚需一個GIF的圖象儲存結構gifImage,如果有興趣可以看看薛碧的如何在VC中顯示動態的GIF

缺點: 用戶自主定義不太方便, 薛碧文章是介紹在RC靜態編輯顯示動態GIF的辦法,本來打算改寫一下作個GIF類, 發現了GIF89A, 于是沒作了多余工

調用方法:
CString sPath;

sPath=_T("1.JPG");
 //CDC* pDC = GetDlgItem(IDC_CONTROL)->GetDC();//獲得控件DC
 CRect zcRect;
 GetClientRect(&zcRect);
 ShowJpgGif(pDC,sPath,zcRect.left,zcRect.top,zcRect.Width(),zcRect.Height());

函數實現

BOOL ShowJpgGif(CDC* pDC,CString strPath, int x, int y ,int Width, int Height)
{
 IStream *pStm;

 CFileStatus fstatus;

 CFile file;

 LONG cb;

 //打開文件并檢測文件的有效性

 if (file.Open(strPath,Cfile&::modeRead)&&

 file.GetStatus(strPath,fstatus)&&

((cb = fstatus.m_size) != -1))
 {
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);

LPVOID pvData = NULL;

if (hGlobal != NULL)
{
 pvData = GlobalLock(hGlobal);

 if (pvData != NULL)
 {
file.Read(pvData, cb);

GlobalUnlock(hGlobal);

CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);

 }
}
 }
 else
 {
return false;
 } //打開文件結束

 //顯示JPEG和GIF格式的圖片,GIF只能顯示一幀,還不能顯示動畫,

 //要顯示動畫GIF請使用ACTIVE控//件。

 IPicture *pPic;

 //load image from file stream

 if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic)))

 {

OLE_XSIZE_HIMETRIC hmWidth;

OLE_YSIZE_HIMETRIC hmHeight;

pPic->get_Width(&hmWidth);

pPic->get_Height(&hmHeight);

double fX,fY;

//get image height and width

fX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/

 (double)pDC->GetDeviceCaps(HORZSIZE)*100.0;

fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/

 (double)pDC->GetDeviceCaps(VERTSIZE)*100.0;

//use render function display image

if(FAILED(pPic->Render(*pDC, x, y, Width, Height,0,

 hmHeight,hmWidth,-hmHeight,NULL)))
 {
 pPic->Release();
 return false;
}
 pPic->Release();
}
else
{
return false;
}
return true;
}


常用方式2, 使用MS CImage

優點: MS的最新圖像類,MFC/ATL通用, 應該是可靠的,使用也很簡單方便,較為靈活,目的應該為替代iPicture類

缺點: 還是不能完美的解決動態GIF問題, #include <atlimage.h>

CImage m_Image;

//pS: 以下插入調用函數
 CString strFilter;
 CSimpleArray<GUID> aguidFileTypes;
 HRESULT hResult;
 //CImage m_Image;

 // 獲取CImage支持的圖像文件的過濾字符串
 hResult = m_Image.GetExporterFilterString(strFilter,aguidFileTypes,_T( "All Image Files"));
 if (FAILED(hResult))
 {
MessageBox("GetExporterFilter調用失敗!");
return;
 }
 CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST, strFilter);
 if(IDOK != dlg.DoModal())
return;

 m_Image.Destroy();
 // 將外部圖像文件裝載到CImage對象中
 hResult = m_Image.Load(dlg.GetFileName());
 if (FAILED(hResult))
 {
MessageBox("調用圖像文件失敗!");
return;
 }

 // 設置主窗口標題欄內容
 CString str;
 str.LoadString(AFX_IDS_APP_TITLE);
 AfxGetMainWnd()->SetWindowText(str + " - " +dlg.GetFileName());

 Invalidate(); // 強制調用OnDraw

//PS: 以下插入重畫函數

void Ctemp7View::OnDraw(CDC* pDC)
{
Ctemp7Doc* pDoc = Getdocument.);
ASSERT_VALID(pDoc);

 // TODO: 在此處為本機數據添加繪制代碼
if (!m_Image.IsNull())
{
 CRect zcRect;
 GetClientRect(&zcRect);
 m_Image.Draw(pDC->m_hDC,zcRect.left,zcRect.top,zcRect.Width(),zcRect.Height());
}
}

本文演示代碼打包下載: PIC_test.rar

總結

以上是生活随笔為你收集整理的JPG,动态GIF,BMP一些常用解决办法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。