青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

道。道。道

安全特性不等于安全的特性

   :: 首頁 :: 聯系 :: 聚合  :: 管理

常用鏈接

搜索

  •  

最新評論

如果是使用VB,也許這個話題是多余的,因為VB有一個圖象控件可以非常容易地實現各種格式的圖象顯示功能,然而對于VC卻沒有一個象樣的控件可以達到這種效果,怎么辦?經過一段日子的研究,發現只需要實現兩步工作,就可以在VC中實現如同VB中一樣的gif動態效果。

本文將介紹的兩部分是IPicture接口的使用和gif的儲存格式,好象一聽到儲存格式,讀者就不想再看下去了!其實不然,這里只須用到其最基本的一部分,請讀者耐心地往下看。

一.IPicture接口

IPicture接口是一個com類,其成員函數可參見微軟的MSDN,這里只需用到以下幾個函數:

get_Width 返回當前圖像的寬度
get_Height 返回當前圖像的高度
Render 在指定的位置、設備上下文上繪制指定的圖像

IPicture的使用不需要CoCreateInstance函數,而只需要使用OleLoadPicture,鑒于此接口在許多文章雜志上均有介紹,這里略去(因為不是本文的重點)。

二.Gif儲存格式

gif儲存格式是一個非常復雜的內容,如果要講透徹可以寫很多篇文章,慶幸的是要實現本文的主題只需要知道其中的一個圖象儲存結構就可以了,這里定義該圖象結構為gifImage:

typedef struct gifImage{ WORD logX; WORD logY; WORD width; WORD height; struct flag{ BYTE d:3; BYTE c:1; BYTE b:3; BYTE a:1; }Flag; }GifImage,*PGifImage; 在該結構中,

logX為圖象相對于邏輯屏幕左上角的x坐標,常為0;

logY為圖象相對于邏輯屏幕左上角的y坐標,常為0;

width為圖象的寬度;

height為圖象的高度;

Flag為一個標志,a指是否存在局域性調色板,b為存儲方式(與本主題無關),c為RGB值是否經過排序(無關),d為調色板的大小,為3*2^(d+1);

最后想提一下,因為每副圖象都以0x2c開頭,并且0x2c前面必為0,故在儲存格式中要找到圖象的起始位置,只需查找0x2c并且前面一個值為0(具體請看下面代碼),其次,一副圖象可能儲存為多個數據塊,每個數據快都是以數據長度為起始的,這一點很重要。即其圖象儲存為:

0x2c
圖象開頭
gifImage
圖象頭結構
BYTE Number
Number為一個跟gif壓縮有關的數字,可以不理踩。
第一副圖象的大小
?
...... 圖象存儲內容
第二副圖象大小
?
...... ?
...... ?
...... ?
0x00 數據塊結束

好,介紹完了主要的兩大部分也該進入今天的主題了。由于使用IPicture接口可以非常輕松地顯示gif的第一副圖畫,那么我們就是利用這一點,利用gif的圖象格式,把第二,三。。。圖畫逐一拷貝到第一副圖畫的位置,再使用IPicture進行讀取,便可以形成一副十分連續的gif動畫了,接下來就讓我來給大家展示以下:

?1?HINSTANCE?handle?=?::AfxGetResourceHandle();//首先獲得資源句柄?
?2?HRSRC?hrsrc=?::FindResource(handle,MAKEINTRESOURCE(IDR_IMAGE2),"IMAGE");?
?3?DWORD?word?=?::SizeofResource(handle,hrsrc);?
?4?BYTE*?lpBy?=?(BYTE*)LoadResource(handle,hrsrc);//獲得圖象的首地址?
?5?BYTE*?pByte[20];?//用來儲存gif每幅圖象的地址?
?6?DWORD?nu[20];?//用來儲存每幅圖象的大小?
?7?int?num?=?0;?//用來計算有幾副圖象?
?8?DWORD?firstLocation?=?0;?//第一副圖象的位置,用來替換?
?9?for(DWORD?j=0;j<word;j++)?
10?{?
11??if(lpBy[j]==0x2c)?//圖象開頭?
12??{?
13???if(lpBy[j-1]==0x00)?//確認是否圖象開頭?
14???{?
15????if(num==0)?
16????{?
17?????firstLocation?=?j;?//得到第一副圖象位置?
18????}?
19????PGifImage?nowImage?=?(PGifImage)&lpBy[j+1];?
20????if(nowImage->Flag.a==0)?//a為0時指圖象不存在局部調色板?
21????{?
22?????DWORD?number?=?1+sizeof(GifImage);?
23?????while(lpBy[j+number]!=0)?
24?????{?
25??????number?=?number+(DWORD)lpBy[j+number]+1;?
26?????}?//算得圖象大小?
27?????number++;?
28?????//把最后一個0x00加上?
29?????pByte[num]?=?new?BYTE[number];?
30?????for(DWORD?n=0;n<number;n++)?
31?????{?
32??????*(BYTE*)(pByte[num]+n)?=?lpBy[j+n];?
33?????}?//將圖象儲存起來。?
34?????nu[num]?=?number;?
35?????j?=?j+number-1;?//跳過圖象?
36?????num++;?
37????}?
38????else?
39????{?
40?????//當a為1時需要加上局部調色板的大小,其他與a為0時一樣?
41?????int?number?=?1+sizeof(GifImage)+3*(int)floor(pow(2,nowImage->Flag.d));?
42?????while(lpBy[j+number]!=0)?
43?????{?
44??????number?=?number+(DWORD)lpBy[j+number]+1;?
45?????}?
46?????//算得圖象大小?
47?????number++;?
48?????//把最后一個0x00加上?
49?????pByte[num]?=?new?BYTE[number];?
50?????for(DWORD?n=0;n<number;n++)?
51?????{
52??????*(BYTE*)(pByte[num]+n)?=?lpBy[j+n];?
53?????}?
54?????//將圖象儲存起來。
55?????nu[num]?=?number;?j?=?j+number-1;?
56?????//跳過圖象?
57?????num++;?
58????}?
59???}?
60??}?
61?}?
62?int?working=?1;?
63?while(working)?
64?{?
65??for(int?m=0;m<num;m++)?
66??{?
67???CBrush?brush(RGB(255,255,255));?
68???pdc->FillRect(CRect(0,0,500,500),&brush);?
69???DWORD?DDD;?
70???VirtualProtect(lpBy,word,PAGE_READWRITE,&DDD);?
71???//修改頁面的保護屬性,以進行寫操作?
72???for(DWORD?n=0;n<nu[m];n++)?
73???{?
74????lpBy[firstLocation+n]?=?*(BYTE*)(pByte[m]+n);?
75???}?
76???VirtualProtect(lpBy,word,DDD,NULL);?
77???//因為IPicture必須把圖象存成流的形式才能工作,所以有下面一段函數?
78???CMemFile?file(lpBy,word);?
79???CArchive?ar(&file,CArchive::load|CArchive::bNoFlushOnDelete);?
80???CArchiveStream?arcstream(&ar);?
81???CComQIPtr<IPicture>?m_picture;?
82???HRESULT?hr?=?OleLoadPicture((LPSTREAM)&arcstream,0,false,?IID_IPicture,(void**)&m_picture);?
83???long?a,b;?
84???m_picture->get_Width(&a);?
85???m_picture->get_Height(&b);?
86???CSize?sz(a,b);?
87???pdc->HIMETRICtoDP(&sz);?
88???//時OLE格式的大小轉化為正常大小?
89???CRect?rect;?
90???m_picture->Render(*pdc,0,0,sz.cx,sz.cy,0,b,a,-b,&rect);?
91???Sleep(100);?
92???//停止一段時間。?
93??}
94?}
95?
96?


結尾語:本程序最好放在一個線程中進行工作,對于最后Sleep的毫秒數就讀者喜好進行修改,其實gif儲存格式中有一個圖象間隔的毫秒數,但是,筆者認為在此沒有必要,還是隨讀者的喜好較好。

posted on 2006-11-18 16:40 獨孤九劍 閱讀(412) 評論(0)  編輯 收藏 引用 所屬分類: Visual C++ 8.0
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲综合日韩在线| 国产一区二区按摩在线观看| 日韩天堂在线视频| 久久久久久夜| 看片网站欧美日韩| 久久婷婷av| 裸体一区二区三区| 亚洲国产精品123| 久久久久免费视频| 欧美成人午夜| 亚洲国产欧美日韩精品| 亚洲黄网站在线观看| 亚洲电影在线免费观看| 亚洲日韩欧美视频一区| 日韩一级黄色大片| 午夜亚洲一区| 欧美电影在线免费观看网站| 国产精品久久久久久久第一福利 | 欧美成ee人免费视频| 欧美国产日韩一二三区| 夜夜夜久久久| 久久久成人精品| 欧美激情一区二区三区 | 亚洲高清激情| 在线亚洲激情| 久久久久综合一区二区三区| 欧美寡妇偷汉性猛交| 亚洲天堂激情| 久久综合九色九九| 国产精品久久久久久久久久直播 | 99视频有精品| 久久gogo国模裸体人体| 欧美久久视频| 国内精品一区二区| 亚洲天堂久久| 欧美电影免费观看高清完整版| 日韩午夜免费| 欧美成人精品在线观看| 国产午夜精品全部视频在线播放| 亚洲理伦电影| 欧美成人一区在线| 欧美一级午夜免费电影| 国产精品hd| 亚洲最新视频在线播放| 久久综合九色综合久99| 亚洲美女少妇无套啪啪呻吟| 欧美国产精品一区| 伊人久久大香线| 亚洲午夜av| 亚洲高清视频在线| 欧美一区二区三区免费大片| 欧美另类99xxxxx| 在线观看一区欧美| 久久国产婷婷国产香蕉| 亚洲九九九在线观看| 免费久久99精品国产自| 狠狠做深爱婷婷久久综合一区| 午夜久久黄色| 亚洲手机在线| 欧美日韩网址| 99精品欧美| 亚洲免费成人av| 欧美极品一区| 亚洲深爱激情| 99国产精品视频免费观看| 欧美激情在线播放| 亚洲国产欧美日韩另类综合| 美女在线一区二区| 久久国内精品视频| 影音先锋另类| 欧美岛国激情| 欧美成人国产| 这里只有精品视频| 99在线精品观看| 国产精品久久看| 性色av香蕉一区二区| 午夜精品福利一区二区三区av | 快射av在线播放一区| 亚洲国产精品国自产拍av秋霞| 久久人人97超碰国产公开结果 | 亚洲资源av| 国产一区二区三区高清| 久久久久久免费| 快播亚洲色图| 亚洲日本aⅴ片在线观看香蕉| 亚洲精品乱码久久久久久蜜桃91| 欧美日韩成人免费| 亚洲永久免费视频| 欧美在线综合| 一区二区日韩欧美| 欧美一区2区三区4区公司二百| 黑人巨大精品欧美黑白配亚洲 | 亚洲综合色视频| 欧美亚洲一区二区三区| 国外视频精品毛片| 亚洲国产欧美一区| 国产精品毛片a∨一区二区三区| 久久黄色级2电影| 免费在线欧美视频| 午夜一区不卡| 欧美国产综合一区二区| 亚洲在线播放电影| 亚洲精品美女在线| 欧美福利影院| 欧美人成在线| 久久久久久午夜| 欧美日韩国产影片| 久久亚洲国产精品日日av夜夜| 欧美精品首页| 久久蜜桃av一区精品变态类天堂| 欧美精品精品一区| 麻豆精品视频在线| 欧美午夜电影一区| 亚洲国产综合在线| 国产一区日韩欧美| 亚洲香蕉伊综合在人在线视看| 亚洲黄色影院| 欧美中文字幕久久| 亚洲欧美自拍偷拍| 欧美精品福利在线| 亚洲第一二三四五区| 国产精品羞羞答答| 一本一本久久| 一区二区精品在线| 欧美第十八页| 久久久久久亚洲精品中文字幕 | 欧美三日本三级少妇三99| 久久久青草婷婷精品综合日韩| 国产精品久久久久久户外露出| 亚洲人成网站色ww在线| 亚洲第一久久影院| 久久精品导航| 久久夜色精品国产欧美乱极品| 国产精品丝袜xxxxxxx| 99国产精品久久久久老师| 亚洲美女淫视频| 欧美激情aaaa| 欧美激情一二三区| 136国产福利精品导航网址应用| 欧美资源在线| 久久久精品2019中文字幕神马| 国产日韩欧美视频| 久久er99精品| 亚洲电影免费观看高清完整版在线观看 | 欧美高清在线视频| 亚洲国产日韩欧美| 亚洲美女视频在线免费观看| 欧美精品免费播放| 99亚洲伊人久久精品影院红桃| 亚洲欧美日韩国产成人| 国产麻豆成人精品| 久久久五月天| 亚洲国产三级| 亚洲一区二区三区中文字幕在线| 国产精品国产精品| 欧美一二三区在线观看| 美女亚洲精品| 亚洲先锋成人| 国产欧美视频一区二区三区| 久久av红桃一区二区小说| 免费成人高清| 夜夜嗨av一区二区三区网页| 国产精品高精视频免费| 久久成人免费电影| 亚洲国产精品成人一区二区 | 亚洲欧美一区二区三区在线| 性欧美超级视频| 在线观看亚洲视频| 欧美激情一区二区三区四区| 亚洲一级特黄| 欧美高清影院| 亚洲尤物在线视频观看| 国产一区二区三区免费不卡| 免费美女久久99| 亚洲性视频网站| 免费成人av资源网| 亚洲一区二区三区高清| 黄色成人精品网站| 欧美日韩国产成人精品| 欧美在线精品一区| 亚洲九九爱视频| 欧美aaa级| 亚洲尤物在线| 最新日韩在线| 国产无一区二区| 欧美日韩在线一区二区| 久久精品国产成人| 夜夜嗨av一区二区三区网页| 老司机免费视频一区二区| 亚洲女同在线| 亚洲美女在线一区| 国产私拍一区| 国产精品v欧美精品v日本精品动漫| 亚洲欧美在线一区二区| 亚洲区免费影片| 欧美va亚洲va国产综合| 欧美一级电影久久| 亚洲视频一区| 日韩视频在线免费| 亚洲电影免费在线|