日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VC++图像存取总结

發(fā)布時間:2025/4/14 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC++图像存取总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

使用GDI+的MFC應用程序的文件打開和保存對話框



文章概要:CGdiplusFileOpenDialog和CGdiplusFileSaveAsDialog類提供了一個


在GDI+的MFC應用程序輕松實現(xiàn)文件打開和保存對話框的方法。 主要特點是:?


它們可以動態(tài)地裝入關于支持圖像的解碼器/編碼器和構建文件過濾清單。 它們


可以獲得當前圖像編碼器標識碼(CLSID)以供需要將其作為一個參數(shù)的GDI+函


數(shù)使用。 它們可以檢查和驗證文件名和擴展名。
(譯注:原文代碼的Demo_VC7沒有在同Demo_VC6一樣顯示滾動條視圖,修改之)
開發(fā)環(huán)境:Windows XP/Server 2003/2000/NT4.0-SP6/98/Me, MS Visual Sudio?


6.0/2003, GDI+
介紹
CGdiplusFileOpenDialog和CGdiplusFileSaveAsDialog類提供了一個在GDI+的


MFC應用程序輕松實現(xiàn)文件打開和保存對話框的方法。
主要特點是:
它們可以動態(tài)地裝入關于支持圖像的解碼器/編碼器和構建文件過濾清單。
它們可以獲得當前圖像編碼器標識碼(CLSID)以供需要將其作為一個參數(shù)的


GDI+函數(shù)使用。
它們可以檢查和驗證文件名和擴展名。
你可以在類的描述和demo應用程序中找到更多的詳情。
(類的)層次表


CGdiplusFileDialog類
CGdiplusFileDialog繼承于MFC CFileDialog類,同時也是


CGdiplusFileOpenDialog和CGdiplusFileSaveAsDialog的抽象基類。
封裝一個包含所支持的解碼器/編碼器的數(shù)組(m_arrCodecInfo)
實現(xiàn)基函數(shù)TranslateFilter:轉換一個MFC-like文件過濾器(使用一個''|''作


為分隔符)到一個OPENFILENAME結構文件過濾器(使用''\0''作為分隔符)
聲明兩個純虛函數(shù):FillCodecInfoArray 和ConstructMFCStyleFilte;在派生


類中,覆寫函數(shù)實現(xiàn)特定操作。
覆寫CFileDialog::DoModal;在調用基類函數(shù)之前調用,它
o 檢查GDI+庫是否被初始化
o 調用FillCodecInfoArray、 ConstructMFCStyleFilter 和 TranslateFilter


函數(shù)
CGdiplusFileOpenDialog類
CGdiplusFileOpenDialog實現(xiàn)文件打開命令對話框。
覆寫CGdiplusFileDialog::FillCodecInfoArray并調用


Gdiplus::GetImageDecoders填充關于可用譯碼器的信息數(shù)組。
o 文件格式的名稱(如:"JPEG")
o 已用擴展名(如:"*.JPG、*.JPEG、*.JPE、*.JFIF")
o 在打開對話框(譯注:原文為Save As dialog,應該是Open dialog,筆誤了


)中使用的缺省擴展名(如:"JPG")
o 解碼器標識碼
覆寫CGdiplusFileDialog::ConstructMFCStyleFilter構建一個"MFC 樣式"的過


濾器(使用一個''|''作為分隔符);一個附加的"All GDI+ supported"(所有


GDI+支持)的過濾項被添入


舉例
#include "GdiplusFileOpenDialog.h"
// ...
bool CFoo::LoadImage(Image*& pImage)
{
bool bLoaded = false;
CGdiplusFileOpenDialog dlgFile;
if(IDOK == dlgFile.DoModal())
{
CString strPathName = dlgFile.GetPathName();
pImage = Image::FromFile(strPathName.AllocSysString());
Status status = pImage->GetLastStatus();
if(Ok == status)
{
bLoaded = true;
}
}
return bLoaded;
}
CGdiplusFileSaveAsDialog類
CGdiplusFileSaveAsDialog實現(xiàn)文件保存的通用型對話框。
覆寫CGdiplusFileDialog::FillCodecInfoArray并調用


Gdiplus::GetImageEncoders來填充關于可用編碼器的信息數(shù)組。
?文件格式的名稱(如:" BMP ")
?已用擴展名(如:"*. BMP、*. DIB、*. RLE ")
?在保存對話框中使用的缺省擴展名(如:" BMP ")
覆寫CGdiplusFileDialog::ConstructMFCStyleFilter構建"MFC 樣式"的過濾器


(使用一個''|''作為分隔符)
覆寫CFileDialog::OnInitDone 和 CFileDialog::OnTypeChange來設置缺省擴展


名并裝入缺省編碼器標識碼(m_clsid成員變量)
實現(xiàn)public方法GetCodecCLSID;codec(編碼器/譯碼器)CLSID進一步被傳遞到


Gdiplis::Image::Save函數(shù)
覆寫CFileDialog::OnFileNameOK以實現(xiàn)文件擴展名檢查:
?如果文件名沒有擴展名,使用缺省擴展名和CLSID
?如果文件名有一個擴展名并且可以被codec信息數(shù)組找到,擴展名和相應的


CLSID將用來代替缺省值
?如果文件名有一個擴展名同時不能被codec信息數(shù)組找到,它返回TRUE同時對話


框保持顯示以便用戶輸入另一個文件名


舉例


#include "GdiplusFileSaveAsDialog.h"


// ...


bool CFoo::SaveImage(Image* pImage)


{


bool bSaved = false;


CGdiplusFileSaveAsDialog dlgFile;


if(IDOK == dlgFile.DoModal())


{


CLSID clsid = dlgFile.GetCodecCLSID();


CString strPathName = dlgFile.GetPathName();


Status status = pImage->Save(strPathName.AllocSysString(),


&clsid);


if(Ok == status)


{


bSaved = true;


}


}


return bSaved;


}
Demo應用程序
Demo應用程序是一個建立在MDI框架上的簡單的圖像瀏覽器。它演示了如何使用


CGdiplusFileOpenDialog 和CGdiplusFileSaveAsDialog.


StdAfx.h 中的包含和聲明


typedef unsigned __int32 ULONG_PTR;


#include < afxtempl.h >


#include < gdiplus.h >


#pragma comment(lib, "gdiplus.lib")


using namespace Gdiplus;
注意
對于比VC++6.0更新的版本,或如果你已安裝了platform SDK更新,請移去


ULONG_PTR的定義。
(僅在VC++ 6.0下)確保gdiplus.lib 的位置應在


Tools/Option/Directories/Library文件夾下;抑或你可以在pragma comment指


示中提供其完全路徑和文件名稱。
初始化和發(fā)布GDI+
你必須在做如何GDI+調用前調用GdiplusStartup,同時在你結束使用GDI+時調用


GdiplusShutdown。


class CDemoApp : public CWinApp


{


// ...


// Attributes


protected:


ULONG_PTR m_gdiplusToken;


// ...


// Implementation


protected:


bool InitGdiplus();


void TermGdiplus();


// ...


};


// Called from CDemoApp::InitInstance


bool CDemoApp::InitGdiplus()


{


GdiplusStartupInput gdiplusStartupInput;


Status status = GdiplusStartup(&m_gdiplusToken,


&gdiplusStartupInput,


NULL);


return (Ok == status);


}


// Called from CDemoApp::ExitInstance


void CDemoApp::TermGdiplus()


{


GdiplusShutdown(m_gdiplusToken);


}
使用CGdiplusFileOpenDialog
去掉調用基類信息處理器的ID_FILE_OPEN命令的缺省映射并將該命令映射到在一


個CWinApp派生類中處理(譯注:即Demo程序中的CDemoApp類)。


void CDemoApp::OnFileOpen()


{


CGdiplusFileOpenDialog dlgFile;


if(IDOK == dlgFile.DoModal())


{


OpenDocumentFile(dlgFile.GetPathName());


}


}
覆寫CDocument::OnOpenDocument虛函數(shù)。


class CDemoDoc : public CDocument


{


// ...


// Attributes


protected:


Image* m_pImage;


// Operations


public:


Image* GetImage() {return m_pImage;}


// ...


// Overrides


// ClassWizard generated virtual function overrides


//{{AFX_VIRTUAL(CDemoDoc)


public:


virtual BOOL OnOpenDocument(LPCTSTR pszPathName);


//}}AFX_VIRTUAL


// ...


};


BOOL CDemoDoc::OnOpenDocument(LPCTSTR pszPathName)


{


SafeDeleteImage();


m_pImage = Image::FromFile(CString(pszPathName).AllocSysString());


return (Ok == m_pImage->GetLastStatus());


}
使用CGdiplusFileSaveAsDialog
在CDocument派生類(譯注:即Demo程序中的CDemoDoc類)中映射


ID_FILE_SAVE_AS命令。在CGdiplusFileSaveAsDialog::DoModal返回后,調用


GetPathName和GetCodecCLSID以傳遞(路徑、文件名、Codec CLSID)到


Image::Save方法。


void CDemoDoc::OnFileSaveAs()


{


CGdiplusFileSaveAsDialog dlgFile;


if(IDOK == dlgFile.DoModal())


{


CLSID clsid = dlgFile.GetCodecCLSID();


CString strPathName = dlgFile.GetPathName();


Status status = m_pImage->Save(strPathName.AllocSysString(),


&clsid);


if(Ok != status)


{


TRACE2(_T("\nFailed to save image in ''%s'' file\n")


_T("GDI+ Error: %u"),


strPathName,


status);


}


}


}
繪圖
在CDemoView::OnDraw中,使用一個Gdiplus::Graphics對象來繪圖。
注意這只是一個例子并且設計得盡可能的簡單。


void CDemoView::OnDraw(CDC* pDC)


{


CDemoDoc* pDoc = GetDocument();


ASSERT_VALID(pDoc);


Image* pImage = pDoc->GetImage();


if(NULL != pImage)


{


Graphics graphics(*pDC);


Status status = graphics.GetLastStatus();


if(Ok == status)


{


graphics.DrawImage(pImage, 0, 0,


pImage->GetWidth(), pImage->GetHeight());


}


}


}
結束提示:
gdiplus.dll已經(jīng)包含在Windows XP 和 Windows Server 2003中
對于運行在Microsoft Windows NT 4.0-SP6/2000/98/Me之上應用程序的可再分


發(fā),gdiplus.dll是必需的。
如果你再分發(fā)gdiplus.dll,推薦你將之放入應用程序的文件夾。
下載
Platform SDK Update:包含GDI+頭文件,gdiplus.lib, 和 gdiplus.dll(VC++?


6.0所需)
Platform SDK Redistributable: GDI+:可再分發(fā)gdiplus.dll,對于Windows?


NT 4.0-SP6/2000/98/Me
========


在MFC程序中顯示JPG/GIF圖像



文章概要:如果你是一個使用VB編程的程序員,要在程序中顯示JPG或者GIF圖像


簡直易如反掌,將圖像控件拖到Form中,分分鐘即可搞掂。但是C++程序員要顯


示同樣的圖形卻沒有那么輕松,那么是不是要自己編寫JPG解壓縮代碼呢?當然


不用那么復雜啦!本文將針對這個問題討論如何在MFC中顯示JPG或者GIF圖像。
如果你是一個使用VB編程的程序員,要在程序中顯示JPG或者GIF圖像簡直易如反


掌,將圖像控件拖到Form中,分分鐘即可搞掂。但是C++程序員要顯示同樣的圖


形卻沒有那么輕松,那么是不是要自己編寫JPG解壓縮代碼呢?當然不用那么復


雜啦!本文將針對這個問題討論如何在MFC中顯示JPG或者GIF圖像。
用VB寫圖像顯示程序之所以如此輕松,完全是利用了琳瑯滿目的圖像處理控件,


把你想要做的事情都一一搞掂。而C++程序員為了實現(xiàn)相同的功能必須忙乎半天


。其實,C/C++程序員也能使用那些VB程序員所用的(或者說幾乎一樣的)圖像


控件。VB用的圖像控件實際上都基于一個系統(tǒng)級COM類――IPicture。下面是有


關 IPicture 的方法描述:
方法 描述
get_Handle 返回圖像對象的Windows GDI句柄?
get_Hpal 返回圖像對象當前使用的調色板拷貝
get_Type 返回當前圖像對象的的圖像類型
get_Width 返回當前圖像對象的圖像寬度
get_Height 返回當前圖像對象的圖像高度
Render 在指定的位置、指定的設備上下文上繪制指定的圖像部分
set_Hpal 設置當前圖像的調色板
get_CurDC 返回當前選中這個圖像的設備上下文
SelectPicture 將一個位圖圖像選入給定的設備上下文,返回選中圖像的設備


上下文和圖像的GDI句柄
get_KeepOriginalForma 返回圖像對象KeepOriginalFormat 屬性的當前值
put_KeepOriginalFormat 設置圖像對象的KeepOriginalFormat 屬性
PictureChanged 通知圖像對象它的圖像資源改變了
SaveAsFile 將圖像數(shù)據(jù)存儲到流中,格式與存成文件格式相同
get_Attributes 返回圖像位屬性當前的設置
從上面這個表可以看出,IPicture操縱著圖像對象及其屬性。圖像對象提供對位


圖的抽象,而Windows負責BMP、JPG和GIF位圖的標準實現(xiàn)。程序員要做的只是實


例化IPicture,然后調用其Render函數(shù)。與通常使用接口的方式不同,這里實例


的創(chuàng)建我們不用CoCreateInstance函數(shù),而是用一個專門的函數(shù)OleLoadPicture



1.
IStream* pstm = // 需要一個流(stream)
2.
IPicture* pIPicture;
3.
hr = OleLoadPicture(pstm, 0, FALSE, IID_IPicture, (void**)&pIPicture);
OleLoadPicture從流中加載圖像并創(chuàng)建一個可用來顯示圖像的新IPicture對象。
1.
rc = // 顯示圖像的矩形
2.
// 將rc 轉換為 HIMETRIC
3.
spIPicture->Render(pDC, rc);
?IPicture 負責處理所有瑣事,以便確定圖形之格式,如 Windows 位圖、JPEG


或者GIF文件――甚至是圖標和元文件(metafiles)。當然啦,所有這些的實現(xiàn)


細節(jié)是需要技巧的,為此我寫了一個Demo程序Myimgapp(如圖二)來示范這些


IPicture的使用方法。
?
圖一 Myimgapp的運行畫面?
Myimgapp是個典型的MFC文檔/視圖程序,在編寫這個程序之前,我首先對?


IPicture COM接口進行封裝,之所以要這么做,主要是考慮到并不是每一個程序


員都能熟練運用COM接口進行編程,另外將IPicture的主要功能封裝在C++類中可


以使我們的問題更容易解決,我封裝的這個C++類名字叫做CPicture。它的定義


和實現(xiàn)細節(jié)請參考本文提供的源代碼。?
我在這個類中將復雜而陌生的COM風格的參數(shù)映射成MFC程序員更為熟悉的類型。


例如,CPicture可以讓你直接從文件名加載一幅圖像,CFile或者CArchive,而


不用去處理流,CPicture::Render替你完成了IPicture中所有令人討厭的但又是


必須的HIMETRIC平滑轉換工作。CPicture甚至具備了一個Load函數(shù),它可以從資


源數(shù)據(jù)中加載圖像,所以你只要用下面的代碼就可以顯示資源中的圖像:
1.
CPicture pic(ID_MYPIC); // 加載圖像
2.
CRect rc(0,0,0,0); ? ? ?// 使用缺省的rc
3.
pic.Render(pDC, rc); ? ?// 顯示圖像
CPicture::Render提供一個顯示圖片的矩形。IPicture 對圖像進行延伸處理。


如果傳遞一個空矩形,則CPicture用圖像本身的大小--不進行延伸處理。對于圖


像本身而言,CPicture查找"IMAGE"類型的資源,所以在資源文件中你必須要加


入下面的代碼:
1.
IDR_MYPIC IMAGE MOVEABLE PURE "res\\MyPic.jpg"
?CPicture是個很棒的傻瓜類,它具備一個 ATL 智能指針CComQIPtr指向


IPicture接口,通過調用OleLoadPicture來初始化不同的Load函數(shù)。CPicture提


供了常用的打包函數(shù)來調用底層的IPicture。CPicture只封裝了那些在Demo例子


程序中要用到的方法。如果你需要調用IPicture::get_Handle或其它一些很少用


到的IPicture方法,你可以自己嘗試編寫相應的打包代碼。 另外,在編寫完


CPicture之后,我發(fā)現(xiàn)了一個現(xiàn)成的MFC類――CPictureHolder,這個類的功能


幾乎與CPicture完全一樣,你可以在afxctl.h文件中找到它的定義。 前面說過


,Demo例子是個典型的MFC文檔/視圖應用程序,因此它肯定少不了與文檔和視圖


類相對應的CPictureDoc 和CPictureView:
CPictureDoc類沒有什么特別的處理代碼,它用CPicture對象存儲圖像:
1.
class CPictureDoc : public CDocument {
2.
protected:
3.
CPicture m_pict; // the picture
4.
};
并且CPictureDoc::Serialize 調用CPicture::Load 從MFC存檔的數(shù)據(jù)中讀取圖


像。
1.
void CPictureDoc::Serialize(CArchive& ar)
2.
{
3.
if (ar.IsLoading()) {
4.
m_pict.Load(ar);
5.
}
6.
}
為了使Myimgapp程序更實用,CPictureDoc::OnNewDocument從程序資源數(shù)據(jù)加載


了一幅圖像。為了顯示這幅圖像,CPictureView::OnDraw要調用


CPicture::Render。這樣程序一啟動便會顯示一幅默認的圖像。
1.
void CPictureView::OnDraw(CDC* pDC)
2.
{
3.
CPictureDoc* pDoc = GetDocument();
4.
CPicture* ppic = pDoc->GetPicture();
5.
CRect rc;
6.
GetImageRect(rc);
7.
ppic->Render(pDC,rc);
8.
}
GetImageRect是CPictureView類的一個成員函數(shù),作用是根據(jù)當前Myimgapp的縮


放比率(可用25%、33%、50%、75%、100%或自適應方式)獲取圖像矩形。


GetImageRect調用CPicture::GetImageSize來獲得真正的圖像大小,然后根據(jù)比


率顯示。 CPictureView其余的部分完全和CScrollView的做法差不多,初始化視


圖并設置滾動大小,處理命令等等。唯一讓人操心的是IPicture::Render中


HIMETRIC的處理問題,因為標準的MFC應用程序都使用MM_TEXT映射模型。不用擔


心,CPicture::Render和CPicture::GetImageSize會將這一切轉換過來,所以你


不必為這些事情傷神。 CPictureView有一個消息處理器值得一提:它就是


OnEraseBkgnd,當要顯示的圖像比客戶區(qū)小的時候,這個函數(shù)必須繪制空白區(qū)域


,如圖二,OnEraseBkgnd創(chuàng)建一個與圖像大小相等的切邊(clip)矩形,然后將


客戶區(qū)填成黑色。之所以要創(chuàng)建切邊矩形,主要是避免當改變窗口大小時出現(xiàn)的


抖動――FillRect不繪制切邊矩形內的區(qū)域,此乃Windows圖形處理的常識。
?
圖二 OnEraseBkgnd 填充修剪的圖像?
IPicture/CPicture簡化了圖像的顯示。它甚至可以實現(xiàn)調色板的識別這樣復雜


的處理。你完全可以拋開老式DIB 圖像繪制方法,如加載調色板、BitBlts、


StretchBlts等等――這一切IPicture全都可以搞掂。如果你未曾用IPicture顯


示過圖像,那么現(xiàn)在試試吧。 CPictureView完成圖像瀏覽的任務看來不是什么


難事了。但是如果要把一幅圖像添加到一個對話框或者其它的什么窗口中怎么辦


呢?為此我創(chuàng)建了另外一個類――CPictureCtrl。
CPictureCtrl 使你可以在任何對話框或窗口中把圖像作為子窗口顯示。例如:
01.
class CAboutDialog : public CDialog {
02.
protected:
03.
CPictureCtrl m_wndPict;
04.
virtual BOOL OnInitDialog();
05.
};
06.
BOOL CAboutDialog::OnInitDialog()
07.
{
08.
m_wndPict.SubclassDlgItem(IDC_MYIMAGE,this);
09.
return CDialog::OnInitDialog();
10.
}
?假設你的對話框中有一個靜態(tài)控制,它的ID=IDC_IMAGE,并且有一幅IMAGE資源


的ID與之相同。則從CStaticLink派生出的CPictureCtrl還可以指定一個URL超鏈


接(或者創(chuàng)建一個ID與此控制或圖像的ID相同的串資源)。如果你指定了一個


URL,則在圖像上單擊鼠標將啟動默認瀏覽器訪問URL。真是酷呆了。CPicture控


制著CPicture對象并改寫WM_PAINT消息處理例程,調用CPicture::Render代替通


常的靜態(tài)控制處理例程。處理細節(jié)請參見代碼。打開Myimgapp程序的“關于”對


話框就知道了。
========

利用IJG JPEG Library壓縮圖像為jpg格式



文章概要:本文介紹了使用IJG JPEG庫將圖像轉換為JPG格式
前一段時間做了一個項目,項目中有一部分是關于圖像采集的,相關硬件有:高


速數(shù)字相機(我們采用Basler A312f),工控機,服務器。其中相機通過139


4視頻線連接到工控機的1394視頻卡上,工控機與服務器通過百兆網(wǎng)連接。


具體工作流程為:工控機控制相機采集圖像,幀率一般為40HZ左右,采集的


圖像為位圖數(shù)據(jù),需要自己在程序中封裝為bmp格式,然后壓縮成jpg格式,壓縮


后的圖像一方面保存到本地硬盤,同時要傳輸?shù)椒掌魃稀?
本文只介紹jpeg壓縮的相關內容,剛開始我貪圖省事,采用微軟 的GDI Plus提


供的功能,很是方便,先獲取jpg圖像的編碼,然后根據(jù)圖像的位圖數(shù)據(jù)創(chuàng)建一


個Bitmap類的對象,再保存圖像為jpg格式就行了。但是我對GDI+還是很信任,


總感覺不踏實(沒有理由的),我們的系統(tǒng)一旦安裝就要長期運行,我就是擔心


長期運行一段時間后GDI+會出問題,結果也證實了我的擔心,我們實際使用的1


0套系統(tǒng)中有一套,連續(xù)運行3-5天后,GDI+就會崩潰,于是我決心采用IJG?


JPEG Library。您可以到www.ijg.org網(wǎng)站下載libjpeg的源碼, IJG JPEG?


Library就是jpeg壓縮庫,是以源碼的形式提供給軟件開發(fā)人員的,當然在軟件


包里也有編譯好的庫文件,我們這里就只用到其中的libjpeg.lib,jconfig.h,


jmorecfg.h,jpeglib.h這幾個文件,下面我就介紹一下怎樣在自己的程序里嵌


入圖像壓縮功能。
一、建立編譯環(huán)境
所謂建立編譯環(huán)境,其實非常簡單,就是把上面提到的4個文件拷貝到你的項目


文件夾下,把libjpeg.lib添加到你的項目中,然后在你完成壓縮功能的那個文


件里加入#include "jpeglib.h",需要注意的是,libjpeg.lib是用c語言開發(fā)的


,如果要用在你的C++程序里,需要用到extern "C",如下:
1.
// TestLibjpeg.cpp : Defines the entry point for the console?


application.
2.
//
3.
?
4.
#include "stdafx.h"
5.
#include "memory.h"
6.
extern "C" {
7.
#include "jpeglib.h"
8.
}
二、壓縮步驟
1、申請并初始化jpeg壓縮對象,同時要指定錯誤處理器
1.
struct jpeg_compress_struct jcs;
2.
?
3.
// 聲明錯誤處理器,并賦值給jcs.err域
4.
struct jpeg_error_mgr jem;
5.
jcs.err = jpeg_std_error(&jem);
6.
?
7.
jpeg_create_compress(&jcs);
2、指定壓縮后的圖像所存放的目標文件,注意,目標文件應以二進制模式打開
1.
f=fopen("03.jpg","wb");
2.
if (f==NULL)
3.
{
4.
delete [] data;
5.
delete [] pDataConv;
6.
return 0;
7.
}
8.
jpeg_stdio_dest(&jcs, f);
3、設置壓縮參數(shù),主要參數(shù)有圖像寬、高、色彩通道數(shù)(1:索引圖像,3:


其他),色彩空間(JCS_GRAYSCALE表示灰度圖,JCS_RGB表示彩色圖像),壓縮


質量等,如下:
1.
jcs.image_width = nWidth; ? ?// 為圖的寬和高,單位為像素
2.
jcs.image_height = nHeight;
3.
jcs.input_components = 1; ? // 在此為1,表示灰度圖, 如果是彩色位圖,則


為3
4.
jcs.in_color_space = JCS_GRAYSCALE; //JCS_GRAYSCALE表示灰度圖,JCS_RGB


表示彩色圖像
5.
?
6.
jpeg_set_defaults(&jcs);
7.
jpeg_set_quality (&jcs, 80, true);
需要注意的是,jpeg_set_defaults函數(shù)一定要等設置好圖像寬、高、色彩通道


數(shù)計色彩空間四個參數(shù)后才能調用,因為這個函數(shù)要用到這四個值,調用


jpeg_set_defaults函數(shù)后,jpeglib庫采用默認的設置對圖像進行壓縮,如果需


要改變設置,如壓縮質量,調用這個函數(shù)后,可以調用其它設置函數(shù),如


jpeg_set_quality函數(shù)。其實圖像壓縮時有好多參數(shù)可以設置,但大部分我們都


用不著設置,只需調用jpeg_set_defaults函數(shù)值為默認值即可。
4、上面的工作準備完成后,就可以壓縮了,壓縮過程非常簡單,首先調用


jpeg_start_compress,然后可以對每一行進行壓縮,也可以對若干行進行壓縮


,甚至可以對整個的圖像進行一次壓縮,壓縮完成后,記得要調用


jpeg_finish_compress函數(shù),如下:
01.
jpeg_start_compress(&jcs, TRUE);
02.
?
03.
JSAMPROW row_pointer[1]; ? // 一行位圖
04.
int row_stride; ? ? ?// 每一行的字節(jié)數(shù)
05.
?
06.
row_stride = jcs.image_width; ?// 如果不是索引圖,此處需要乘以3
07.
?
08.
// 對每一行進行壓縮
09.
while (jcs.next_scanline < jcs.image_height) {
10.
row_pointer[0] = & pDataConv[jcs.next_scanline * row_stride];
11.
jpeg_write_scanlines(&jcs, row_pointer, 1);
12.
}
13.
?
14.
jpeg_finish_compress(&jcs);
5、最后就是釋放壓縮工作過程中所申請的資源了,主要就是jpeg壓縮對象,由


于在本例中我是直接用的局部變量,所以只需調用jpeg_destroy_compress這個


函數(shù)即可,如下:
1.
jpeg_destroy_compress(&jcs);
三、解壓縮步驟
解壓縮步驟與壓縮步驟非常相似,只是解壓縮對象為jpeg_decompress_struct類


型,步驟如下:
1、聲明并初始化解壓縮對象,同時制定錯誤信息管理器
1.
struct jpeg_decompress_struct cinfo;
2.
struct jpeg_error_mgr jerr;
3.
?
4.
cinfo.err = jpeg_std_error(&jerr);
5.
jpeg_create_decompress(&cinfo);
2、打開jpg圖像文件,并指定為解壓縮對象的源文件
1.
FILE *f = fopen(strSourceFileName,"rb");
2.
if (f==NULL)
3.
{
4.
printf("Open file error!\n");
5.
return;
6.
}
7.
//
8.
jpeg_stdio_src(&cinfo, f);
3、讀取圖像信息
1.
jpeg_read_header(&cinfo, TRUE);
4、根據(jù)圖像信息申請一個圖像緩沖區(qū)
1.
data = new BYTE?


cinfo.image_width*cinfo.image_height*cinfo.num_components];
5、開始解壓縮
01.
jpeg_start_decompress(&cinfo);
02.
?
03.
JSAMPROW row_pointer[1];
04.
while (cinfo.output_scanline < cinfo.output_height)
05.
{
06.
row_pointer[0] = &data[(cinfo.output_height - cinfo.output_scanline-


1)*cinfo.image_width*cinfo.num_components];
07.
jpeg_read_scanlines(&cinfo,row_pointer ,
08.
1);
09.
}
10.
jpeg_finish_decompress(&cinfo);
6、釋放資源
1.
jpeg_destroy_decompress(&cinfo);
2.
?
3.
fclose(f);
好了,利用IJG JPEG Library進行圖像壓縮就介紹到這里,希望對大家有所幫助


,實例代碼已經(jīng)實現(xiàn)了圖像的壓縮和解壓縮的全部功能,命令格式


為:“TestLibjpeg.exe j|j24|b 源文件名 目標文件名”,其中,j選項將源文


件壓縮為jpg格式,不改變色彩模式,j24選項將源文件壓縮為24為jpg格式,b選


項將源文件解壓縮為bmp格式,該實例并沒有提供文件有效性的驗證,如果要引


入自己的代碼,請自己實現(xiàn)文件有效性的驗證。
========

通過VB結構數(shù)組輸入數(shù)據(jù)VC編寫DLL實現(xiàn)圖形文件



文章概要:太多的例子講如何如何實現(xiàn)VC編寫動態(tài)鏈接庫,VB中聲明后使用,但沒


有一個好的文章來深入探討這個問題,本文負責解決此類問題。
前言
太多的例子講如何如何實現(xiàn)VC編寫動態(tài)鏈接庫,VB中聲明后使用,但沒有一個好的


文章來深入探討這個問題,本文負責解決此類問題。
1.一般情況
VB中定義為:
1.
Private Declare Function FuncFoo Lib "MyStDll.DLL" _
2.
(ByVal lParam1 As Long, ByVal lParam2 As Long) As Long
VC中定義為:
1.
UINT WINAPI FuncFoo(UINT lParam1, UINT lParam2);
不用說大家就知道兩個long參數(shù),按值傳遞的
2.實現(xiàn)類型數(shù)組:
VB中定義為:
1.
Private Declare Function FuncFoo Lib "MyStDll.DLL" _
2.
(lParam1 As Long, ByVal lParam2 As Long) As Long
VC中定義為:
1.
UINT WINAPI FuncFoo(UINT lParam1[DATASIZE], UINT lParam2);
其中DATASIZE為定義常數(shù)ByRef 按地址傳參數(shù),當然VB缺省參數(shù)形式ByRef,將數(shù)


組的第一個數(shù)據(jù)傳入,就是這個類型數(shù)組的地址了
用法如下:
1.
...
2.
Dim oData(1 to 3) as Long
3.
oData(1) = 100
4.
oData(2) = 200
5.
oData(3) = 300
6.
Call FuncFoo(oData(0),3)
7.
...
3.實現(xiàn)結構數(shù)組:
如果此時用上述方法
在VB中來這樣寫:
1.
Private Type LPDATA
2.
Row as Long
3.
Col as Long
4.
Tips as String
5.
Data as double
6.
End Type
7.
Private Declare Function FuncFoo Lib "MyStDll.DLL" _
8.
(lParam1 As LPDATA, ByVal lParam2 As Long) As Long
在VC中這樣寫:
1.
typedef struct tagData {
2.
UINT Row;
3.
UINT Col;
4.
BSTR Tips; //注意一般關于字符串最好用 BSTR ,后面解釋為什么
5.
double Data;
6.
} * LPDATA;
7.
UINT WINAPI FuncFoo(LPDATA lParam1[DATASIZE] ,UINT lParam2);或
8.
UINT WINAPI FuncFoo(LPDATA *lParam1 ,UINT lParam2);
這樣的結果大家不妨試一試,數(shù)據(jù)亂的毫無規(guī)律,我也很不解,搞不懂,網(wǎng)上


SOS,HELP me,目前最流行的方式,我也用上了,國內外知名的,被遺忘的角落,等等


,大家沒人理我,可能看到了不解,個中高手過著深入簡出的生活,沒有回答,沒人


解答,我從MSDN終于搞到一個東西他就是SAFEARRARY
01.
typedef struct FARSTRUCT tagSAFEARRAY {
02.
unsigned short cDims;
03.
unsigned short fFeatures;
04.
unsigned short cbElements;
05.
unsigned short cLocks;
06.
unsigned long handle;
07.
void HUGEP *pvData ;
08.
SAFEARRAYBOUND rgsabound[1];
09.
} SAFEARRAY;
下次我再單獨寫篇稿子討論這個東西,解決問題先. 應該這么做
在VB中來這樣寫:
1.
Private Type LPDATA
2.
Row as Long
3.
Col as Long
4.
Tips as String
5.
Data as double
6.
End Type
7.
Private Declare Function FuncFoo Lib "MyStDll.DLL" _
8.
(lParam1() As LPDATA, ByVal lParam2 As Long) As Long
用法如下:
1.
...
2.
Dim oData(1 to 3) as Long
3.
oData(1) = 100
4.
oData(2) = 200
5.
oData(3) = 300
6.
Call FuncFoo(oData(),3)
7.
...
在VC中這樣寫:
1.
typedef struct tagData {
2.
UINT Row;
3.
UINT Col;
4.
BSTR Tips; //注意一般關于字符串最好用 BSTR ,后面解釋為什么
5.
double Data;
6.
} * LPDATA;
7.
UINT WINAPI FuncFoo(LPSAFEARRAY FAR * Param1,UINT lParam2);
在VC中訪問VB傳入的結構數(shù)據(jù):
1.
LPDATA lparDataSet;
2.
lparDataSet = (LPDATA)((*Param1)->pvData);
3.
for (UINT u=0;u<((*Param1)->rgsabound->cElements);u++,lparDataSet++)
4.
{
5.
UINT aa = lparDataSet->Row;
6.
CString bb = lparDataSet->Tips;
7.
double cc = lparDataSet->Data;
8.
}
注意:為什么用BSTR不用什么LPCTSTR xxx,TCHAR xxx[mmm],char xxx[mmm],我舉


個例子大家試一試就知道了
1. VB送入字符 "個大12"
2. 正常VC顯示數(shù)據(jù)為 B8 F6 B4 F3 31 32
3. VC結構傳入顯示為 2A 4E 27 59 31 00 32 00 (unicode?)
第一部分寫到這里吧,剩下的東西還是等各位朋友自己慢慢去摸索,倉促難免有


疏漏之處,請各位諒解。
作者信息:
阿鬼 [ http://GhostStudio.yeah.net ]
本文寫于:2001/10/26 15:40
分享到:新浪微博 騰訊微博 更多 0 收藏
========

用CabLib創(chuàng)建DXF(繪圖交換格式)文件



文章概要:本文詳細介紹了DXF文件的格式以及用CabLib生成圖形并存儲為DXF文


件的方法,并提供了CabLib的源代碼以及測試代碼。


介紹
什么是DXF
繪圖交換格式(DXF)文件允許在AutoCAD和其它程序進行圖形交換。DXF文件即可


以是ASCII格式也可以是二進制格式。 因為ASCII格式的DXF文件比二進制格式更


加通用,所以CadLib使用ASCII的DXF格式。
什么是CadLib
CadLib不是計算機輔助設計(CAD)程序。它是創(chuàng)建用于CAD程序DXF文件的工具。


它由兩部分組成,一部分是用于創(chuàng)建DXF文件的動態(tài)鏈接庫,另一部分是編程接


口,該類封裝了cadio.dll中的函數(shù),可以在Microsoft Visual C++項目中使用


。另外,cadio.dll 也可以用于其它Win32編程中。
為什么使用CadLib
一些程序需要輸出可以被AutoCad等程序使用的圖形文件,例如,在一個"發(fā)動機


設計程序"中,程序需要輸出圖形,而最常用的交換數(shù)據(jù)的圖形格式便是DXF。
?
DXF文件結構
DXF文件格式是圖形文件中所有信息的標簽數(shù)據(jù)描述。標簽數(shù)據(jù)指的是文件中的


被稱為群碼的整型數(shù)據(jù)前的每個數(shù)據(jù)項。 群碼的值指示了下面數(shù)據(jù)的數(shù)據(jù)類型


以及數(shù)據(jù)單元的含義。事實上圖形文件中所有用戶特殊信息都可以描述為DXF格


式。(參考AutoCad的DXF參考說明)
DXF文件由許多區(qū)域組成,每個區(qū)域里有許多圖形數(shù)據(jù),CadLib可以使用如下區(qū)


域:
1. 頭部 HEADER
2. 表格 TABLES
3. 區(qū)塊 BLOCKS
4. 實體 ENTITIES
CadLib中的DXF文件結構參考AutoCad中的DXF格式說明,具體可以在下面網(wǎng)址找


到參考:
http://www.autodesk.com/techpubs/autocad/acad2000/dxf/dxf_format.htm
http://www.martinreddy.net/gfx/3d/DXF12.spec

這里的類是CadIO.dll和主程序之間的接口。"Test"演示了如何用CadLib中的


CDxfFileWrite和CDrawing類創(chuàng)建DXF文件。
CDxfFileWrite類
CDxfFileWrite封裝了直接創(chuàng)建DXF文件的所有命令。使用方法如下:
1. 創(chuàng)建DXF文件
1.
CDxfFileWrite dxffile;
2.
dxffile.Create( "d:\\test.dxf" );
2. HEADER區(qū)域的開始與結束。這里是為了兼容CAD程序。其它的不需要HEADER區(qū)


域。
1.
// Header Section ------------------------------------------
2.
dxffile.BeginSection(SEC_HEADER);
3.
dxffile.EndSection();
4.
// close HEADER section ------------------------------------
3. 開始表格區(qū)域并放置LAYER, LTYPE, STYLE, DIMSTYLE等你所需的表格類型,


然后結束該區(qū)域。
01.
// Tables Section ------------------------------------------
02.
dxffile.BeginSection(SEC_TABLES);
03.
?
04.
// LTYPE table type -------------------------
05.
dxffile.BeginTableType(TAB_LTYPE);
06.
?
07.
DXFLTYPE ltype;
08.
double elem[4];
09.
?
10.
// Continuous
11.
ZeroMemory(<ype, sizeof(ltype));
12.
ltype.Name = "Continuous";
13.
ltype.DescriptiveText = "Solid line";
14.
dxffile.AddLinetype(<ype);
15.
?
16.
// DASHDOT2
17.
ZeroMemory(<ype, sizeof(ltype));
18.
ltype.Name = "DASHDOT2";
19.
ltype.DescriptiveText = "Dash dot (.5x)?


_._._._._._._._._._._._._._._.";
20.
ltype.ElementsNumber = 4;
21.
ltype.TotalPatternLength = 0.5;
22.
ltype.Elements = elem;
23.
elem[0] = 0.25;
24.
elem[1] = -0.125;
25.
elem[2] = 0.0;
26.
elem[3] = -0.125;
27.
dxffile.AddLinetype(<ype);
28.
?
29.
dxffile.EndTableType();
30.
// close LTYPE table type -------------------
31.
?
32.
// LAYER table type -------------------------
33.
result &= dxffile.BeginTableType(TAB_LAYER);
34.
result &= dxffile.AddLayer("Layer1", 1, "Continuous");
35.
result &= dxffile.AddLayer("Layer2", 2, "Continuous");
36.
result &= dxffile.AddLayer("Layer3", 3, "Continuous");
37.
result &= dxffile.AddLayer("Layer4", 4, "Continuous");
38.
result &= dxffile.EndTableType();
39.
// close LAYER table type -------------------
40.
?
41.
// STYLE table type -------------------------
42.
dxffile.BeginTableType(TAB_STYLE);
43.
?
44.
DXFSTYLE tstyle;
45.
ZeroMemory(&tstyle, sizeof(tstyle));
46.
tstyle.Name = "Style1";
47.
tstyle.PrimaryFontFilename = "TIMES.TTF";
48.
tstyle.Height = 0.3;
49.
tstyle.WidthFactor = 1;
50.
dxffile.AddTextStyle(&tstyle);
51.
?
52.
dxffile.EndTableType();
53.
// close STYLE table type -------------------
54.
?
55.
// DIMSTYLE table type ----------------------
56.
dxffile.BeginTableType(TAB_DIMSTYLE);
57.
?
58.
DXFDIMSTYLE dimstyle;
59.
?
60.
// DIM1
61.
ZeroMemory(&dimstyle, sizeof(dimstyle));
62.
dimstyle.Name = "DIM1"; // DimStyle Name
63.
dimstyle.DIMCLRD = 2; // Dimension line & Arrow heads color
64.
dimstyle.DIMDLE = 0.0000; // Dimension line size after Extensionline
65.
dimstyle.DIMCLRE = 2; // Extension line color
66.
dimstyle.DIMEXE = 0.1800; // Extension line size after Dimline
67.
dimstyle.DIMEXO = 0.0625; // Offset from origin
68.
dimstyle.DIMBLK1 = "ClosedFilled";// 1st Arrow head
69.
dimstyle.DIMBLK2 = "ClosedFilled";// 2nd Arrow head
70.
dimstyle.DIMASZ = 0.1800; // Arrow size
71.
dimstyle.DIMTXSTY = "Style1"; // Text style
72.
dimstyle.DIMCLRT = 3; // Text color
73.
dimstyle.DIMTXT = 0.1800; // Text height
74.
dimstyle.DIMTAD = 1; // Vertical Text Placement
75.
dimstyle.DIMGAP = 0.0900; // Offset from dimension line
76.
dxffile.AddDimStyle(&dimstyle);
77.
?
78.
dxffile.EndTableType();
79.
// close DIMSTYLE table type ----------------
80.
?
81.
dxffile.EndSection();
82.
// close TABLES section ------------------------------------
4. 開始實體區(qū)域并放置LINE, CIRCLE, SOLID, TEXT, ARC, POINT, DIMLINEAR


等數(shù)據(jù),然后結束該區(qū)域。
01.
// Entities Section ------------------------------------------
02.
dxffile.BeginSection(SEC_ENTITIES);
03.
?
04.
// set current layer to Layer2
05.
dxffile.SetCurrentLayer("Layer2");
06.
// draw a line
07.
dxffile.Line(1.2, 3.3, 7.5, 7.7);
08.
// draw a circle
09.
dxffile.Circle(7.8, 4.3, 1.75);
10.
// set current layer to Layer4
11.
dxffile.SetCurrentLayer("Layer4");
12.
?
13.
// draw a solid
14.
REALPOINT points[4];
15.
points[0].x = 10.4; points[0].y = 7.2;
16.
points[1].x = 13.6; points[1].y = 7.4;
17.
points[2].x = 13.1; points[2].y = 4.9;
18.
points[3].x = 10.9; points[3].y = 5.9;
19.
Solid(4, points);
20.
?
21.
// set current textstyle to Style1
22.
dxffile.SetCurrentTextStyle("Style1");
23.
// draw text
24.
dxffile.Text("Sample Text", 5.9, 6.7, 0.3, 35);
25.
// draw a dimension line
26.
dxffile.SetCurrentDimStyle("DIM1");
27.
dxffile.DimLinear(6.05, 3, 9.55, 3, 9.55, 2, 0, "3.50");
28.
?
29.
dxffile.EndSection();
30.
// close ENTITIES section ----------------------------------
5. 關閉DXF文件
dxffile.Close();
CDrawing 類
CDrawing封裝了在內存中創(chuàng)建圖形并保存到DXF文件中的功能。使用方法如下:
1. 創(chuàng)建內存繪圖
CDrawing drw;
drw.Create();
2. 在內存中創(chuàng)建LAYER, LTYPE, STYLE, DIMSTYLE等所需要的表格類型
01.
// Tables Section ------------------------------------------
02.
// LTYPE table type -------------------------
03.
LTYPE ltype;
04.
OBJHANDLE objhandle1;
05.
?
06.
// Continuous
07.
ZeroMemory( 3. 生成實體數(shù)據(jù)(LINE, CIRCLE, SOLID, TEXT, ARC, POINT,?


DIMLINEAR, POLYLINE)
08.
// Entities Section ------------------------------------------
09.
// set current layer to Layer2
10.
drw.SetLayer("Layer2");
11.
// draw a line
12.
drw.Line(1.2, 3.3, 7.5, 7.7);
13.
// draw a circle
14.
drw.Circle(7.8, 4.3, 1.75);
15.
// set current layer to Layer1
16.
drw.SetLayer("Layer1");
17.
?
18.
// draw a solid
19.
REALPOINT points[4];
20.
points[0].x = 10.4; points[0].y = 7.2;
21.
points[1].x = 13.6; points[1].y = 7.4;
22.
points[2].x = 13.1; points[2].y = 4.9;
23.
points[3].x = 10.9; points[3].y = 5.9;
24.
drw.Solid(points[0], points[1], points[2], points[3]);
25.
?
26.
// set current textstyle to Style1
27.
drw.SetTextStyle("Style1");
28.
// draw text
29.
drw.Text("Sample Text", 5.9, 6.7, 0.3, 35);
30.
// draw a dimension line
31.
drw.SetDimStyle("DIM1");
32.
drw.DimLinear(6.05, 3, 9.55, 3, 9.55, 2, 0, "3.50");
4. 將數(shù)據(jù)保存到DXF文件中
1.
drw.SaveDXFFile(DxfFileName);
5. 刪除CDrawing對象并釋放內存
從DXF文件中加載數(shù)據(jù)
1. 創(chuàng)建內存繪圖?
1.
CDrawing drw;
2.
drw.Create( );
2. 使用LoadDXFFile加載DXF文件到內存
1.
drw.LoadDXFFile("Sample.dxf");
結論
這些代碼對于需要在程序中創(chuàng)建DXF文件的程序員來說是很有用的,CadLib雖然


不是創(chuàng)建DXF文件最好的商業(yè)軟件,但它是開源的,可以自由修改代碼。

========

(GDI+)Image類的序列化


文章概要:本文介紹如何采用GDI+ 通過IMAGE類的序列化實現(xiàn)對圖形文件的讀取、顯示。
利用GDI+圖形設備接口提供的Image類我們可以很方便地顯示JPEG、GIF等文件格式的圖片,但美中不足的是Image類未提供序列化數(shù)據(jù)的功能,如果要將從JPEG、GIF等格式的文件中讀取的圖片數(shù)據(jù)保存到我們自己開發(fā)的應用程序文檔中,并能從文檔中讀取已經(jīng)保存的圖片數(shù)據(jù)并正確的顯示出來,就必須實現(xiàn)Image類數(shù)據(jù)的序列化。 假如在你的文檔類中有個指向Image類的成員指針變量m_pImage用于顯示圖片,那么在文檔類的序列化函數(shù)Serialize(CArchive& ar)中加入以下的代碼就能實現(xiàn)m_pImage所指向的圖片數(shù)據(jù)的序列化:
01.
if (ar.IsStoring())
02.
{
03.
HGLOBAL m_hMem = GlobalAlloc(GMEM_MOVEABLE, 0);
04.
IStream *pstm=NULL;
05.
CreateStreamOnHGlobal(m_hMem, TRUE, &pstm);
06.
CLSID clsid;
07.
USES_CONVERSION;
08.
GetCodecClsid(A2W("image/bmp"), &clsid);
09.
m_pImage->Save(pstm,&clsid,NULL);
10.
if (pstm==NULL)
11.
return;
12.
LARGE_INTEGER liBeggining = { 0 };
13.
pstm->Seek(liBeggining, STREAM_SEEK_SET, NULL);
14.
DWORD wTemp=GlobalSize(m_hMem);
15.
LPBYTE lpData = (LPBYTE)GlobalLock(m_hMem);
16.
ar << wTemp;
17.
ar.Write(lpData,wTemp);
18.
pstm->Release();
19.
GlobalUnlock(m_hMem);
20.
}
21.
else
22.
{
23.
DWORD wTemp;
24.
ar >> wTemp;
25.
HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, wTemp);
26.
if (m_hMem == NULL)
27.
return;
28.
IStream *pstm=NULL;
29.
CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);
30.
if (pstm==NULL)
31.
return;
32.
BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
33.
ar.Read(pmem,wTemp);
34.
if (m_pImage) {
35.
delete m_pImage;
36.
m_pImage = NULL;
37.
}
38.
using namespace Gdiplus;
39.
m_pImage = Image::FromStream(pstm, FALSE);
40.
pstm->Release();
41.
GlobalUnlock(m_hMem);
42.
//注意此處不能加GlobalFree(m_hMem);否則圖片顯示不出來。
其中函數(shù)GetCodecClsid的實現(xiàn)代碼如下:
01.
int GetCodecClsid(const WCHAR* format, CLSID* pClsid)
02.
{
03.
UINT ?num = 0; ? ? ? ? ?// number of image encoders
04.
UINT ?size = 0; ? ? ? ? // size of the image encoder array in bytes
05.
using namespace Gdiplus;
06.
ImageCodecInfo* pImageCodecInfo = NULL;
07.
GetImageEncodersSize(&num, &size);
08.
if(size == 0)
09.
return -1; ?// Failure
10.
pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
11.
if(pImageCodecInfo == NULL)
12.
return -1; ?// Failure
13.
GetImageEncoders(num, size, pImageCodecInfo);
14.
for(UINT j = 0; j < num; ++j)
15.
{
16.
if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
17.
{
18.
*pClsid = pImageCodecInfo[j].Clsid;
19.
return j; ?// Success
20.
} ??
21.
} // for
22.
return -1; ?// Failure
23.
} // GetCodecClsid
形參format用以說明圖片數(shù)據(jù)的保存格式,可以取以下一些值:"image/bmp"(位圖格式),"image/jpeg"(JPEG格式),"image/gif"(GIF格式)等。

========


總結

以上是生活随笔為你收集整理的VC++图像存取总结的全部內容,希望文章能夠幫你解決所遇到的問題。

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

日日夜夜精品视频天天综合网 | 国产精品久久久电影 | 欧美日韩高清一区 | 免费一级黄色 | 久久高清 | 日韩一区二区三区观看 | 欧美成人在线免费观看 | 亚洲专区路线二 | 欧美激情精品久久久久久免费 | 成人在线免费观看网站 | 麻豆国产在线视频 | 日日摸日日添日日躁av | 亚洲尺码电影av久久 | 亚洲每日更新 | 911久久香蕉国产线看观看 | 国产精品久久久久久久久久白浆 | 精品国产一区二区三区四区vr | 五月婷婷天堂 | 国产午夜精品免费一区二区三区视频 | 久久成人一区 | 综合色站导航 | 91精品国产自产老师啪 | 2017狠狠干 | 久久精品播放 | 免费在线黄网 | 27xxoo无遮挡动态视频 | 午夜成人免费影院 | 在线观看国产日韩 | 欧美一级久久久久 | 亚洲日本三级 | 这里只有精品视频在线 | 国产不卡免费av | 成人在线免费av | 91精品久久久久久综合五月天 | 亚洲精品一区二区网址 | 国产va在线观看免费 | 亚洲国产av精品毛片鲁大师 | 国产精品视频地址 | 精品久久久免费视频 | 婷婷五天天在线视频 | 在线天堂中文在线资源网 | 91精品国产99久久久久 | 国产精品区一区 | 国产精品一区二区免费视频 | 久久99精品久久久久久清纯直播 | 91精品久久久久久综合乱菊 | 成人久久免费 | 久久精品久久国产 | 国产美女免费 | 亚洲做受高潮欧美裸体 | 日本精a在线观看 | 91中文在线 | 九精品 | 成人黄色在线观看视频 | 人成免费网站 | 国语精品久久 | 九色视频网址 | 成人欧美一区二区三区在线观看 | 国产精品国产三级国产 | 美女久久久久久久久久 | 亚洲国产高清视频 | 亚洲一区久久 | 久久国产精品免费一区二区三区 | av黄色免费在线观看 | 91精品国产91p65| 亚洲 综合 国产 精品 | 99r在线精品 | 91看成人 | 日韩一区二区三区在线看 | 国产精品一二三 | 久久免费福利视频 | 国产精品久久久久久久99 | 国产中文在线播放 | 日韩欧美在线免费观看 | 99久久影视 | 亚洲美女视频在线 | a视频免费 | 91最新中文字幕 | 狠狠色噜噜狠狠 | 国产精品中文 | 久久成人综合视频 | 九九九在线观看视频 | 天天操网址| 久久无码精品一区二区三区 | 成人av电影免费在线播放 | 黄色福利视频网站 | 91在线蜜桃臀 | 久久久久伊人 | 国产成人福利在线观看 | 日本久久久久久科技有限公司 | 东方av在线免费观看 | 黄在线 | 久久成电影 | 99视频播放 | 这里只有精品视频在线观看 | 国产一卡二卡在线 | 午夜视频不卡 | 久久伊人热 | 成人在线免费视频 | 992tv在线观看网站 | 成人免费一区二区三区在线观看 | 欧美福利片在线观看 | 中文字幕av最新更新 | 亚洲成人高清在线 | 性色av免费看 | 色婷婷丁香 | 福利电影一区二区 | 国产伦精品一区二区三区高清 | 黄色电影在线免费观看 | 亚洲成aⅴ人片久久青草影院 | av丝袜天堂 | 97超碰超碰| 日韩在线观看视频一区二区三区 | 三级黄色大片在线观看 | 中文视频在线播放 | 国产成人一区二区三区 | 激情综合婷婷 | 最近中文字幕视频网 | 中文字幕在线免费 | 伊人小视频 | 国产精品不卡在线 | 国产精品久久久久久久久久99 | 国产一区在线不卡 | 黄色www在线观看 | 91电影福利 | 亚洲一区av | 99免费在线观看视频 | 福利视频一区二区 | www黄色大片| 国产福利网站 | 亚洲精品国产精品乱码不99热 | 超碰人人做 | 久色免费视频 | 亚洲天堂网在线视频观看 | 人人插人人费 | 区一区二区三在线观看 | 91正在播放 | 国产精品一区二区在线观看 | 黄色一级在线视频 | 91黄色在线视频 | 国产情侣一区 | 丁香婷婷网 | 九色精品免费永久在线 | 成年人免费在线观看 | 99精品视频免费 | 久久99精品久久久久婷婷 | 国产日韩欧美中文 | 中文乱码视频在线观看 | 婷婷在线播放 | 91精品国产欧美一区二区 | 国产精品一区二区av | 成人在线你懂得 | 久久这里只有精品视频首页 | 日韩三级在线观看 | 亚洲精品乱码久久久久久蜜桃动漫 | 欧美在线不卡一区 | 亚洲自拍av在线 | 国产精品久久久久久久久久久杏吧 | 九九综合九九 | 久久精品一区二区三区视频 | 久久久天堂 | 亚洲精品视频偷拍 | 久久兔费看a级 | 日韩黄色影院 | 五月开心色 | 日韩有码中文字幕在线 | 国产成人久久精品一区二区三区 | 91.dizhi永久地址最新 | 国产精品国产三级国产不产一地 | 国产中文字幕免费 | 91黄色小网站| 麻豆影视网 | 国产精品欧美激情在线观看 | 国产精品h在线观看 | 日本精品一区二区三区在线观看 | 天天爱天天操天天干 | 国产高清一级 | 日韩在线高清免费视频 | 黄网站色欧美视频 | 在线一二三四区 | 国产成人免费精品 | 亚洲精品视频在线观看免费视频 | 一级免费观看 | 国产高清视频免费最新在线 | 国产偷国产偷亚洲清高 | 日韩免费视频 | 人人擦 | 91精品亚洲影视在线观看 | 国产精品久久久久久久久久东京 | 少妇bbbb搡bbbb桶 | 亚洲视频,欧洲视频 | 99超碰在线观看 | 96精品在线 | 久久精品国亚洲 | 欧美激情xxxx| 一区二区三区久久精品 | 国产剧情av在线播放 | 五月婷婷激情六月 | 91午夜精品| 亚洲人成人在线 | 国产h片在线观看 | 国内成人综合 | 色综合久久五月 | 久久久久免费精品视频 | 在线观看亚洲精品视频 | 国产在线观看地址 | 国产在线p | 91亚洲精品久久久蜜桃借种 | 91色蜜桃 | 在线播放国产精品 | 亚洲人成在线观看 | 91视频88av| 日本精品视频免费观看 | 97免费视频在线播放 | 亚洲综合激情小说 | 国产91在线免费视频 | 国产精品日韩精品 | 日韩免费三级 | 黄色a视频免费 | a视频免费 | 欧美一级激情 | 国产伦精品一区二区三区… | 黄色免费观看网址 | 免费看一级特黄a大片 | 人人玩人人添人人澡超碰 | 九九久久影视 | 视频二区在线 | 伊人成人精品 | 色婷婷狠狠五月综合天色拍 | 欧美午夜理伦三级在线观看 | 91精品免费看 | 中文在线a在线 | 亚洲一区二区视频在线播放 | 免费看一及片 | 色婷婷88av视频一二三区 | 国产精品一区二区果冻传媒 | 国产精品第一视频 | 国产尤物在线视频 | 国产精品资源在线 | 日日麻批40分钟视频免费观看 | 成人a大片 | 久久精国产 | 久久精品一区二区三区国产主播 | 人人看人人做人人澡 | 亚洲精品久久久久中文字幕m男 | 欧美日韩18 | 欧美一级免费黄色片 | 人人揉人人揉人人揉人人揉97 | 男女精品久久 | 中文网丁香综合网 | 日韩视频一区二区三区在线播放免费观看 | 亚洲 欧洲 国产 精品 | 午夜精品影院 | 伊人伊成久久人综合网站 | 色婷婷福利视频 | 66av99精品福利视频在线 | 国产色婷婷精品综合在线手机播放 | 久久国产精品精品国产色婷婷 | 国产精品一区二区麻豆 | 国产 字幕 制服 中文 在线 | 天天天干 | 久热免费在线观看 | 国产专区精品视频 | 久久综合狠狠狠色97 | 亚洲综合欧美日韩狠狠色 | 日韩久久久久久久久久 | 日韩精品网址 | 亚洲永久精品视频 | 欧美日韩免费在线视频 | 亚洲精品91天天久久人人 | 狠狠干中文字幕 | 欧美精品一区二区免费 | 国产专区免费 | 中文字幕免费高清在线 | 最新日韩视频在线观看 | 日韩av电影国产 | 黄色大全在线观看 | 一级久久久| 欧美大片mv免费 | 久久亚洲精品电影 | 99精品视频在线观看 | 一区二区三区高清 | 成年在线观看 | 91在线看黄| 日韩av一区二区三区在线观看 | 欧美a级片免费看 | 成人在线免费观看网站 | 免费视频97 | 日本动漫做毛片一区二区 | 久久久久高清毛片一级 | 人人干人人爽 | 黄色看片| av福利在线播放 | 中文字幕观看av | 免费日韩一区二区三区 | av一区二区三区在线观看 | 婷婷在线免费视频 | 日本精品二区 | 欧美日韩国产一区二 | 韩国av一区二区三区在线观看 | 亚洲春色综合另类校园电影 | 国产在线视频在线观看 | 成年人av在线播放 | 久久99视频精品 | 国产精品美女久久久久久网站 | 亚洲日日夜夜 | 国产专区一 | 在线 你懂 | 成人一级片免费看 | 国产在线观看二区 | 毛片久久久 | 国产精品99页| 久久成人精品视频 | 欧美伦理一区二区 | 免费成人在线视频网站 | 久久国产精品99久久久久久丝袜 | 精品久久免费看 | 五月婷香蕉久色在线看 | 又污又黄网站 | 中文av在线天堂 | 久久九九影视 | 午夜影院日本 | 成人作爱视频 | 91精品视频网站 | 久久8| 最近中文字幕国语免费高清6 | 黄色资源在线观看 | 午夜精品久久久99热福利 | 国产精品免费一区二区三区 | 中文字幕在线观看日本 | 99久久精品久久久久久动态片 | 久久久久久久久久久久久影院 | 精品免费在线视频 | 中文字幕在线观看视频网站 | 一区久久久 | 亚洲精品视频在线观看免费 | 日本中文字幕影院 | 缴情综合网五月天 | 日韩免费高清在线观看 | 97成人免费 | 欧美性生活免费 | 超级碰碰碰碰 | 天天干天天做天天操 | 日韩在线观看中文 | 永久免费视频国产 | 国产99久久99热这里精品5 | 国产精品女教师 | 日韩中文字幕91 | 日韩av一区二区在线播放 | 奇米网网址 | 中文字幕中文字幕在线一区 | 中文字幕一区二区三区久久 | 国产在线观看你懂得 | 婷婷色站 | 91.精品高清在线观看 | 丁香九月婷婷综合 | 成年人在线观看 | 天天激情综合 | 天天干一干 | 精品久久久久久久久久久久 | 久久人人97超碰国产公开结果 | 黄色www免费 | 97超在线 | 欧美另类网站 | 天天操夜夜叫 | 最近中文字幕在线 | 免费黄色av电影 | 2021国产精品| 在线一级片 | 国产麻豆电影 | 成人午夜黄色 | 人人草人 | 超碰公开在线观看 | 97人人人人| 天天碰天天操 | 欧美国产日韩一区二区三区 | 精品欧美日韩 | www.97色.com| 麻豆视频免费 | 精品国产欧美一区二区三区不卡 | 中国一级片视频 | 91亚洲国产成人久久精品网站 | 亚州免费视频 | 国产美腿白丝袜足在线av | 国产99一区 | 久久视频在线观看免费 | 97在线资源| 91日韩免费 | 国产视频在线观看一区二区 | 精品国产免费一区二区三区五区 | 麻豆传媒电影在线观看 | 国产五月婷 | 免费h漫在线观看 | 国产乱码精品一区二区三区介绍 | 国产精品久久久久久久7电影 | 在线黄色国产 | 天天干天天操人体 | 成人精品视频久久久久 | 久久伊人色综合 | 人人澡人人添人人爽一区二区 | 精品在线99 | 一区二区三区动漫 | ,午夜性刺激免费看视频 | 在线99 | 中日韩欧美精彩视频 | 欧美日韩视频在线 | 一二三区视频在线 | 国产一级做a爱片久久毛片a | 日韩电影在线观看一区 | 丝袜av一区| 97精品国产aⅴ | 国产成人免费在线观看 | 欧美色图30p | 午夜三级毛片 | 密桃av在线| 国产理论片在线观看 | 97电影在线看视频 | 中文字幕亚洲不卡 | 五月天综合色激情 | 一区 二区 精品 | 国产a精品| 97色在线观看免费视频 | 天堂网av 在线 | 日韩免费观看视频 | 免费观看视频的网站 | 国产成人1区| 麻豆传媒在线视频 | 毛片精品免费在线观看 | 久久久久麻豆v国产 | 久久久久久久久久久久亚洲 | 狠狠天天 | 亚洲精品小视频在线观看 | 在线观看免费 | 亚洲jizzjizz日本少妇 | 成人免费xyz网站 | 在线看成人片 | 亚洲色图27p| 天天干天天操人体 | 天天爱天天操天天干 | 国产精品午夜8888 | 精品国产中文字幕 | 91av福利视频 | 91色一区二区三区 | 69xxxx欧美 | 国产专区第一页 | 999亚洲国产996395 | 一区二区三区四区五区在线 | 手机成人在线电影 | 视频在线观看一区 | 日本黄色大片儿 | 九九在线国产视频 | 久久国产影视 | 91久久国产露脸精品国产闺蜜 | 国产色爽 | 亚洲男男gaygayxxxgv | 精品一区二区在线看 | 亚洲在线精品视频 | 久久伊99综合婷婷久久伊 | 综合久久精品 | 黄色影院在线播放 | 超碰在线97免费 | 久久免费黄色 | 久久理论电影网 | 日韩影视精品 | 在线电影日韩 | 久久一久久| 国产91对白在线播 | 福利片视频区 | 国产精品视频久久久 | 麻豆 91 在线| 九七视频在线 | 91精品免费视频 | 黄色在线观看www | 久久精品二区 | 黄色毛片网站在线观看 | 九色精品免费永久在线 | 色黄视频免费观看 | 一级c片| 亚洲成人av片在线观看 | 特级毛片网 | 国产人成看黄久久久久久久久 | 日韩在线观看电影 | 欧美成人xxxx | 九九免费在线视频 | 成人动漫一区二区三区 | 亚洲精品国偷自产在线91正片 | 狠狠色网 | 中文字幕在线播出 | 超碰97中文 | 亚洲精品av中文字幕在线在线 | 开心激情综合网 | 久草在线免费看视频 | 亚洲日b视频 | 亚洲欧美视频在线观看 | 久草电影在线观看 | 黄色片网站 | 日日干 天天干 | 国产一级高清 | 久久久久国产精品www | 国产成人777777 | 超碰在线免费97 | a√天堂中文在线 | 中文在线字幕免 | 久久视频这里有精品 | 日本午夜在线亚洲.国产 | 久久精品欧美一区 | 婷婷久久婷婷 | av在线网站免费观看 | 亚洲欧美日本一区二区三区 | 中文字幕三区 | 国产第页| 国产在线观看地址 | 国产精品成久久久久三级 | 久久夜色精品国产欧美乱极品 | 91在线看免费 | 伊人天堂网 | 高清国产午夜精品久久久久久 | 国产一区免费观看 | 日韩一级成人av | 国产无套精品久久久久久 | 西西人体www444 | 日韩三级免费 | 免费试看一区 | 在线视频区 | 日本高清免费中文字幕 | 日韩欧美精品一区二区 | 808电影| 亚洲天天干 | 最近中文字幕免费观看 | av在线激情 | 69视频永久免费观看 | 在线观看中文字幕dvd播放 | 免费合欢视频成人app | 久久午夜精品影院一区 | 97成人啪啪网 | 综合久久久久 | 国产中的精品av小宝探花 | 国产精品久久久久久久久久99 | av短片在线 | 99精品免费视频 | 在线成人一区 | 高清久久久久久 | 久青草国产在线 | 懂色av一区二区三区蜜臀 | 日韩特黄一级欧美毛片特黄 | 亚洲黄色区 | 色综合色综合久久综合频道88 | 最新日韩视频在线观看 | 日韩视频一 | 欧美精品乱码99久久影院 | 一区二区三区四区免费视频 | 99久久电影 | 久久久久久久影院 | 精品国产免费人成在线观看 | 国产码电影 | 成年人视频在线观看免费 | 久久欧洲视频 | 久久精品官网 | 狠狠久久 | 99精品国产成人一区二区 | www.狠狠色.com | 66av99精品福利视频在线 | 毛片a级片| 日本最新一区二区三区 | 公与妇乱理三级xxx 在线观看视频在线观看 | 久草精品视频 | 四虎在线视频免费观看 | 亚洲国产黄色 | 国产成人在线精品 | 狠狠色狠狠色综合日日小说 | 欧美日韩一区二区三区在线免费观看 | 能在线观看的日韩av | 韩国av一区二区三区在线观看 | www婷婷 | 色片网站在线观看 | 超碰在线99| 96精品高清视频在线观看软件特色 | 全久久久久久久久久久电影 | 久草电影免费在线观看 | 天天综合入口 | 免费视频网 | 97超碰在| 亚洲综合激情 | 欧美激情操 | 婷婷久久婷婷 | 99色精品视频 | 欧美a级在线播放 | 天天色综合久久 | 亚洲精品一区二区久 | 中文字幕在线观看完整版 | 91免费观看国产 | 欧美另类xxxx | 亚洲欧美日本一区二区三区 | 中文字幕免费高清在线 | 综合精品久久 | 91亚洲精品久久久蜜桃网站 | 欧美日韩调教 | 欧美性护士 | 久久一级电影 | 国产成人精品一区二 | 欧美午夜理伦三级在线观看 | 日韩免费在线观看 | 韩国在线一区 | 在线日韩视频 | 日韩激情免费视频 | 黄色小说网站在线 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 在线观看91精品国产网站 | 久久不射影院 | 欧美色图88| 日韩精品中文字幕一区二区 | 亚洲毛片久久 | 亚洲国产精彩中文乱码av | 最新高清无码专区 | 国产自产在线视频 | 六月丁香在线观看 | 91免费国产在线观看 | 91麻豆精品国产91久久久无需广告 | 99在线精品视频 | 国产精品久久久久久久久久久久午夜片 | 成人毛片100免费观看 | 国产午夜精品一区二区三区在线观看 | 日韩av一区二区三区在线观看 | 日韩高清av | 欧美日韩啪啪 | 天天激情综合网 | 天天操网址 | 欧美国产日韩一区二区三区 | 伊人影院在线观看 | 国产精品自产拍在线观看网站 | 亚洲国产免费网站 | 日韩免费视频观看 | 日韩精品 在线视频 | 国产精品自在线拍国产 | 久久综合狠狠综合 | a天堂一码二码专区 | 国内精品亚洲 | 国产成人精品一区二三区 | 国产精品美女久久 | 亚洲成人av电影 | 中文字幕在线一区二区三区 | 三级av片 | 久久香蕉影视 | 亚洲精品在线免费 | 又污又黄网站 | av大片免费看 | 精品一二三区视频 | 精品视频资源站 | 国产一区精品在线 | 亚洲精品tv久久久久久久久久 | 黄色app网站在线观看 | 亚洲国产日韩一区 | 欧美日高清视频 | 香蕉视频国产在线观看 | 国产亚洲精品久久久久久移动网络 | 国产高清免费观看 | 福利一区二区三区四区 | 亚洲一区精品人人爽人人躁 | 午夜影院一级片 | 亚洲欧美激情精品一区二区 | 一色屋精品视频在线观看 | 久一网站 | 天天综合日日夜夜 | 国产精品高清免费在线观看 | 久久九九影视 | 日韩一级黄色av | 久久久久伊人 | 三级黄色网址 | 一区二区三区日韩在线 | 国产九九精品视频 | 天天亚洲综合 | 久久久亚洲麻豆日韩精品一区三区 | 日韩高清一区二区 | 免费人成在线观看网站 | 色综合色综合色综合 | 在线天堂日本 | 欧美性大战久久久久 | 久久久久久久久久福利 | 欧美精品久久久久久久久久久 | 国产精品久久久久久久久久99 | 久久人人爽爽人人爽人人片av | 久久综合色影院 | 不卡的av中文字幕 | 中文字幕在线看 | 丁香资源影视免费观看 | 热99在线视频 | 在线国产激情视频 | 欧美在线视频第一页 | 2024国产在线 | 成人国产在线 | 欧美在线资源 | 在线观看完整版 | 久久国产精品99久久久久久进口 | 国产视频18| 午夜精品一区二区三区在线视频 | 综合五月 | 国产精品一区二区三区久久久 | 国产高清综合 | 国产96在线观看 | 激情伊人 | 毛片黄色一级 | 六月色| 国产成人精品久久 | 亚洲日韩欧美一区二区在线 | 国产精品美女久久久久久网站 | 中文字幕第一 | 天天干,天天射,天天操,天天摸 | 亚洲不卡av一区二区三区 | 免费日韩视频 | 国产一区二区三区免费在线 | 成人午夜精品久久久久久久3d | 亚洲激情综合 | 91亚洲国产成人久久精品网站 | 日韩黄色免费电影 | 午夜精品一区二区三区在线视频 | 午夜在线国产 | 黄色亚洲片 | 91九色成人 | 又黄又爽的免费高潮视频 | 亚洲国产中文字幕在线观看 | 黄色a在线 | 成在人线av | 中文字幕 婷婷 | 国产成人av电影在线 | 大型av综合网站 | 亚洲国产片色 | 日韩免费小视频 | 蜜桃视频成人在线观看 | 欧美综合色在线图区 | 欧美一区二区三区不卡 | 天天草天天 | 狠狠色丁香婷婷综合 | 亚洲在线不卡 | 又黄又刺激又爽的视频 | 久久久久久亚洲精品 | 久久午夜羞羞影院 | 色欲综合视频天天天 | avwww在线 | 中文伊人| 伊人激情网 | zzijzzij亚洲日本少妇熟睡 | 一级黄色片网站 | 操操日日 | 天天se天天cao天天干 | 日韩欧美精品一区二区三区经典 | 99久久久国产精品免费99 | 日韩av片无码一区二区不卡电影 | 毛片在线播放网址 | 欧美日韩久久不卡 | 中文字幕人成不卡一区 | 丁香婷婷社区 | 97成人精品| 中文字幕av在线不卡 | 国产美女视频免费观看的网站 | 中文字幕在线影院 | 人人玩人人添人人 | 色射色 | 日本中文字幕在线看 | 午夜精品一二三区 | 国产一区二区影院 | 久久免费一级片 | 午夜精品一区二区三区可下载 | 久久天天拍 | 97色在线观看免费视频 | 99免费看片| 天天综合导航 | av黄色免费网站 | av色网站 | 毛片视频网址 | 国产精品短视频 | 六月色| 狠狠成人 | 91xav| 伊人狠狠色丁香婷婷综合 | 精品一区二区在线免费观看 | 美女黄频 | 99精品热| 99国产精品免费网站 | 在线观看中文字幕亚洲 | 美女免费黄视频网站 | 91色偷偷| 手机看国产毛片 | av成人在线播放 | 成人久久久久 | 久久免费视频这里只有精品 | 国产h在线播放 | 2019中文字幕第一页 | 香蕉视频18 | www.黄色网.com| 日本黄色a级大片 | 国产99久久久欧美黑人 | 国产在线看一区 | aa一级片| 国产精品久久毛片 | 最新av网址在线观看 | 不卡的av在线 | 亚洲欧洲久久久 | 手机在线中文字幕 | 手机av看片 | 91麻豆精品一区二区三区 | 国产精品一区二区三区在线播放 | 久久亚洲精品国产亚洲老地址 | 国产综合视频在线观看 | 国产成人三级在线观看 | 又黄又网站 | 久草在线这里只有精品 | 久久a免费视频 | 久久理伦片| 久草在线费播放视频 | 国内99视频| 国产精品夜夜夜一区二区三区尤 | 狠狠色综合网站久久久久久久 | 久久久久久激情 | 国产日韩av在线 | 亚州av免费 | 国产精品18p | 国产高清av免费在线观看 | 丁香 久久 综合 | 亚洲人成免费网站 | 国产一区二区三精品久久久无广告 | 亚洲成人精品在线 | 91视频这里只有精品 | 丁香婷婷电影 | 日韩精品一区电影 | 成人免费看电影 | 日本中文字幕电影在线免费观看 | 亚州精品天堂中文字幕 | 亚洲资源在线观看 | 在线观看国产一区二区 | 在线免费观看视频你懂的 | 不卡视频在线 | 免费在线观看的av网站 | 欧美日韩视频在线观看免费 | 91mv.cool在线观看 | 欧美a级在线 | 久久综合毛片 | 国产字幕在线观看 | 99免在线观看免费视频高清 | 色94色欧美| 91在线免费观看国产 | 色噜噜在线观看视频 | www.久久久精品 | 欧美夫妻性生活电影 | 成人免费大片黄在线播放 | 五月综合婷| 在线免费观看视频一区 | 亚洲国内精品视频 | 欧美日韩高清在线 | 91.精品高清在线观看 | 99精品偷拍视频一区二区三区 | 日韩色高清 | 国产精品电影一区二区 | 亚洲美女免费视频 | 91久久国产自产拍夜夜嗨 | 国产99在线免费 | aaa日本高清在线播放免费观看 | 五月婷婷视频在线 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 免费看三级网站 | 免费国产在线精品 | 久要激情网 | 深爱激情综合 | 免费网站在线观看成人 | 久久er99热精品一区二区三区 | 色久天 | 亚洲一区 av | 久久久久久草 | 黄色av影院 | 欧美日韩视频网站 | 高清av免费看 | 午夜体验区| 91亚洲精品国偷拍 | 成人天堂网| 狠狠狠色丁香婷婷综合久久五月 | 久久草在线免费 | 成人九九视频 | 亚洲视频在线播放 | 欧洲精品码一区二区三区免费看 | 国产精品麻豆三级一区视频 | 久久无码av一区二区三区电影网 | 国产成人黄色av | 久久久久五月天 | 免费观看国产视频 | 中文字幕专区高清在线观看 | 日日摸日日 | 成年人免费电影 | av在线色| 亚洲一二三区精品 | 国产在线精品视频 | 麻豆视频一区二区 | a精品视频 | 日韩高清精品免费观看 | 国产精品久久久777 成人手机在线视频 | 久久久色 | 天天天天天操 | 日本美女xx | 奇米影视777影音先锋 | 成人av久久 | 欧美日韩中文国产 | 婷婷亚洲综合五月天小说 | 亚洲精品视频播放 | 亚洲一区二区三区91 | 欧美日韩国产伦理 | 9在线观看免费高清完整版 玖玖爱免费视频 | 国产不卡av在线播放 | 久久精品视频在线 | 在线免费视频一区 | 免费观看v片在线观看 | 日韩视频www| av在线播放中文字幕 | 在线成人免费电影 | 四虎在线观看视频 | 久久天堂精品视频 | 久久综合色婷婷 | 亚洲精品视频在线观看视频 | 久久精品九色 | 在线播放视频一区 | 97碰碰碰| 日韩精品久久一区二区三区 | 天天射天天干天天插 | 亚洲久草在线视频 | 亚洲三级精品 | 成人在线视频观看 | 特黄色大片 | 激情综合五月天 | 亚洲va欧美va人人爽春色影视 | 在线亚洲激情 | 日本午夜在线观看 | 狠狠色噜噜狠狠狠狠2022 | 91精品区| 国产精品亚| 国产成本人视频在线观看 | 亚洲成人黄色网址 | 国产精品久久久影视 | 有码中文在线 | 欧美狠狠操 | 福利精品在线 | 亚洲精品美女在线观看 | 亚洲二区精品 | 在线观看免费成人av | 中文字幕免费高 | 成人久久精品 | 久久99精品久久久久久清纯直播 | 日韩xxxx视频 | 99久久国产免费,99久久国产免费大片 | 国产一级大片免费看 | 国内99视频| 久草在线看片 | 久久99精品久久久久蜜臀 | av免费网| 精品国产乱码久久久久久1区二区 | 久久久久久蜜桃一区二区 | 久久精品电影网 | avwww在线| 人人爽人人澡人人添人人人人 | 91高清免费 | 欧美一区二区在线免费观看 | 丁香五月亚洲综合在线 | 一级性av| 最近中文字幕在线中文高清版 | 日日干天天爽 | 亚洲天堂网视频在线观看 | 日本久久免费电影 | 久草视频免费在线播放 | www.五月婷婷.com | 人人干人人模 | 中文字幕色在线视频 | 欧美另类调教 | 日韩视频在线观看免费 | 国产一级视屏 | 久久免费国产视频 | 久久成人欧美 | 九九久久在线看 | 中文字幕网址 | 丁香婷婷自拍 | 中文字幕在线观看网站 | 特级黄色电影 | 四川妇女搡bbbb搡bbbb搡 | 欧美一区二区日韩一区二区 | 激情视频综合网 | 国产日韩av在线 | 国产网站色 | 欧美成人xxxx | 天天插天天色 | 亚洲天堂免费视频 | 精品国产免费观看 | 久久久久久久久久久久久久av | 中文在线8资源库 | 日韩电影在线观看一区 | 18网站在线观看 | 91在线porny国产在线看 | 久久久麻豆精品一区二区 | 久久综合九色综合网站 | 中文字幕视频网站 | 97看片| 国产日韩欧美在线观看视频 | 免费观看第二部31集 | 免费在线激情电影 |