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

道。道。道

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

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

常用鏈接

搜索

  •  

最新評論

如果是使用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>
            亚洲精品久久视频| 麻豆亚洲精品| 亚洲已满18点击进入久久| 欧美一区二区三区视频在线| 亚洲精品一二| 欧美日本国产精品| 99re66热这里只有精品3直播| 久久综合久色欧美综合狠狠| 久久久久久九九九九| 欧美成人xxx| 国产精品久久久亚洲一区| 亚洲欧洲三级电影| 亚洲日本欧美在线| 免费不卡视频| 一区二区三区免费看| 亚洲一区二区精品在线| 国产精品久久久久久五月尺| 亚洲在线免费视频| 久久久久久久波多野高潮日日| 亚洲高清久久久| 99精品欧美一区二区三区| 国产精品红桃| 亚洲国产精品第一区二区三区| 欧美日韩中文在线观看| 久久全球大尺度高清视频| 欧美精品电影| 久久久青草婷婷精品综合日韩| 欧美精品入口| 久久天堂国产精品| 国产精品盗摄一区二区三区| 欧美电影免费观看| 国产欧美日韩视频| 99国产精品视频免费观看一公开| 国产视频在线观看一区二区| 亚洲精品乱码视频| 亚洲黄一区二区| 午夜日本精品| 欧美日韩福利| 欧美伊人久久| 蜜桃久久精品乱码一区二区| 亚洲综合视频在线| 欧美高清在线| 日韩视频免费观看高清在线视频| 樱桃视频在线观看一区| 久久久久综合网| 欧美凹凸一区二区三区视频| 国产一区二区欧美| 久久精品国产一区二区三| 午夜精品国产更新| 国产亚洲人成a一在线v站| 久久福利视频导航| 欧美激情一区二区三区在线视频观看 | 亚洲一二三区在线观看| 亚洲一区尤物| 国产精品久久久久免费a∨大胸| 亚洲一区二区在| 免费影视亚洲| 一区二区激情小说| 国产午夜精品理论片a级大结局 | 亚洲已满18点击进入久久| 亚洲专区一区| 亚洲国产精品尤物yw在线观看| 欧美成人综合一区| 欧美一区二区视频97| 亚洲国产欧美日韩| 久久久久欧美精品| 欧美激情中文字幕一区二区| 亚洲高清免费视频| 亚洲一区久久久| 亚洲欧洲日本mm| 激情校园亚洲| 亚洲免费在线| 亚洲欧洲三级电影| 亚洲成人资源网| 久久爱另类一区二区小说| 亚洲第一中文字幕| 永久免费毛片在线播放不卡| 国产欧美在线播放| 国产精品都在这里| 国产精品高清网站| 欧美体内she精视频| 欧美精品国产精品| 欧美日韩午夜视频在线观看| 欧美福利视频网站| 欧美岛国在线观看| 欧美手机在线视频| 国产精品白丝av嫩草影院| 欧美视频免费在线观看| 国产精品萝li| 国产亚洲va综合人人澡精品| 国产日韩一级二级三级| 极品av少妇一区二区| 亚洲精品之草原avav久久| 欧美在线精品一区| 欧美在线亚洲在线| 欧美女人交a| 国产亚洲精品久| 亚洲黄网站在线观看| 香蕉久久夜色精品| 欧美激情第二页| 午夜精品久久久久久久99黑人| 久久免费午夜影院| 欧美日韩免费观看一区=区三区| 国产伦精品一区二区三| 在线看一区二区| 午夜久久美女| 欧美大片免费久久精品三p| 久久久亚洲一区| 午夜欧美精品| 亚洲国产精品美女| 久久精品一区四区| 欧美无乱码久久久免费午夜一区| 国产精品一二三四区| 亚洲欧美精品| 欧美日韩亚洲一区二区三区在线 | 午夜久久影院| 亚洲国产二区| 欧美一区观看| 国产日韩在线一区二区三区| 亚洲精品乱码视频| 欧美a级片一区| 久久精品日韩一区二区三区| 国产精品久久久| 亚洲一区二区三区成人在线视频精品| 看欧美日韩国产| 久久精品天堂| 玉米视频成人免费看| 老鸭窝毛片一区二区三区| 亚洲自拍另类| 国产小视频国产精品| 久久久精品动漫| 欧美一区二区三区另类| 美女免费视频一区| 亚洲私人影院在线观看| 日韩一级黄色片| 国产毛片一区二区| 欧美成年网站| 欧美日韩一区二区欧美激情| 亚洲欧美日韩国产中文在线| 欧美一区二区在线免费播放| 国产亚洲欧美激情| 亚洲激情视频在线播放| 欧美日韩亚洲网| 久久尤物电影视频在线观看| 免费不卡视频| 久久精品国产精品亚洲| 久久美女性网| 久久九九免费视频| 亚洲一区二区三区在线观看视频| 欧美视频日韩视频| 麻豆精品在线视频| 欧美日韩国产不卡| 久久综合影视| 亚洲精品123区| 国产曰批免费观看久久久| 亚洲精品日日夜夜| 在线免费不卡视频| 久久丁香综合五月国产三级网站| 一区二区三区www| 久久综合伊人77777麻豆| 欧美在线高清视频| 国产精品日韩欧美一区| 亚洲精品国产日韩| 亚洲人成网站影音先锋播放| 久久精品女人天堂| 久久久久一区二区| 国产伦精品一区二区| 先锋影音国产一区| 久久国产天堂福利天堂| 国产欧美91| 欧美一级久久久久久久大片| 性欧美video另类hd性玩具| 国产精品久久久久久久午夜片 | 亚洲一区二区三区777| 中文久久乱码一区二区| 欧美日韩一区在线观看视频| 亚洲精品久久久久久久久| 亚洲欧洲视频| 国产精品美女视频网站| 久久精品国产成人| 亚洲韩国青草视频| 亚洲欧美www| 激情六月综合| 欧美三级日韩三级国产三级| 亚洲综合色噜噜狠狠| 久久女同互慰一区二区三区| 久热精品视频在线观看| 亚洲激情图片小说视频| 亚洲图片欧美一区| 在线观看精品| 国产精品男gay被猛男狂揉视频| 欧美在线免费观看| 欧美黑人国产人伦爽爽爽| 亚洲欧美精品一区| 亚洲精品在线观看免费| 国内精品福利| 国产精品免费aⅴ片在线观看| 久久综合色播五月| 中国亚洲黄色| 亚洲精选视频免费看|