版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
./1.制造原理
調(diào)色板模式的ico文件的數(shù)據(jù)結(jié)構(gòu),可分為6部分:
1.ICON文件頭〔6字節(jié)〕
2.ICON圖象信息塊〔16字節(jié)〕
3.BMP信息頭〔40字節(jié)〕
4.調(diào)色板〔16色為64字節(jié),256色為1024字節(jié)〕
5.XOR位圖
6.AND位圖而調(diào)色板模式的bmp文件的數(shù)據(jù)結(jié)構(gòu)可分為4部分:
1.BMP文件頭〔14字節(jié)〕
2.BMP信息頭〔40字節(jié)〕
3.調(diào)色板〔16色為64字節(jié),256色為1024字節(jié)〕
4.XOR位圖分析可知,ico圖標(biāo)與bmp位圖有三個(gè)相同的部分〔注:真彩圖標(biāo)與真彩位圖的數(shù)據(jù)結(jié)構(gòu)
均沒有調(diào)色板部分,所以是兩個(gè)相同的部分〕,而且這三個(gè)部分是最重要的部分。因此,我
們只要去掉bmp位圖的BMP文件頭,再加上ICON文件頭、ICON圖象信息塊和AND位圖,就可
以輕松制作出255×255象素以內(nèi)的任何規(guī)格的圖標(biāo)了。然而……且慢,有一點(diǎn)卻是很不輕松
的:如果你想制作背景透明〔屏蔽背景色〕的圖標(biāo),那么你還需要對(duì)XOR位圖的數(shù)據(jù)動(dòng)大手
術(shù),更不輕松的是,AND位圖的數(shù)據(jù)也必須符合相應(yīng)的要求,這是相當(dāng)困難的;而制作有背
景色的圖標(biāo)的話,XOR位圖部分我們可以原封不動(dòng),AND位圖全是0,只要計(jì)算出它的長(zhǎng)度
來(lái)即可添加到XOR位圖數(shù)據(jù)的后面,這是很容易實(shí)現(xiàn)的。所以,下面我所講的,都是制作有
背景色的圖標(biāo)。
ICON文件頭結(jié)構(gòu)很簡(jiǎn)單,一共只有3個(gè)數(shù)據(jù)共6個(gè)字節(jié),我們要給其中的"資源類型"和
"圖象個(gè)數(shù)"2個(gè)數(shù)據(jù)均賦值為1。
ICON圖象信息塊有7個(gè)數(shù)據(jù)共16字節(jié),有5個(gè)數(shù)據(jù)要賦值:圖標(biāo)寬度、圖標(biāo)高度、顏色
計(jì)數(shù)、圖像數(shù)據(jù)塊的長(zhǎng)度、圖象數(shù)據(jù)塊相對(duì)于文件頭部的偏移量。要賦值的5個(gè)數(shù)據(jù)中,圖
象數(shù)據(jù)塊相對(duì)于文件頭部的偏移量是固定的,圖像數(shù)據(jù)塊的長(zhǎng)度需要計(jì)算,其余3個(gè)數(shù)據(jù)可
從BMP信息頭中獲得資料。
AND位圖的長(zhǎng)度必須根據(jù)從BMP信息頭中獲得的有關(guān)數(shù)據(jù)計(jì)算。
此外,還要更改BMP信息頭中的2個(gè)數(shù)據(jù):一個(gè)是圖象長(zhǎng)度數(shù)據(jù)〔要加上AND位圖的
長(zhǎng)度〕,另一個(gè)是圖像高度數(shù)據(jù)〔這只要簡(jiǎn)單地將原數(shù)據(jù)×2即可〕。
OK,一切都準(zhǔn)備好了,萬(wàn)事俱備,只欠東風(fēng),下面就讓東風(fēng)勁吹吧。2.編程
新建一個(gè)窗體,添加一個(gè)公用對(duì)話框,兩個(gè)圖片框,三個(gè)按紐。
窗體與圖片框的ScaleMode屬性均設(shè)為3,其中Picture1的Autosize屬性設(shè)為Ture。
按紐的屬性設(shè)置:
Command1:Caption=打開圖片
Command2:Caption=數(shù)據(jù)處理,Enabled=False
Command3:Caption=保存圖標(biāo),Enabled=False代碼如下:OptionExplicitDimpDAT<>AsByte'源圖數(shù)據(jù)
DimaDAT<>AsByte'AND位圖數(shù)據(jù)
DimiDAT<>AsByte'icon文件頭和圖象信息塊數(shù)據(jù)PrivateSubCommand2_Click<>
OnErrorGoTo100
DimdAsLong,cAsLong
DimaLengthAsLong'AND位圖長(zhǎng)度aLength=4*<pDAT<4>\32+Abs<<pDAT<4>Mod32>>0>>*pDAT<8>'計(jì)算AND位圖的長(zhǎng)度
ReDimaDAT<aLength-1>AsByte
ReDimiDAT<21>AsByte'給icon文件頭和icon圖象信息塊的元素賦值
iDAT<2>=1'資源類型
iDAT<4>=1'圖像個(gè)數(shù)
iDAT<6>=pDAT<4>'圖像寬
iDAT<7>=pDAT<8>'圖像高
iDAT<8>=16*Abs<pDAT<14>=4>
iDAT<18>=22'圖象數(shù)據(jù)塊相對(duì)于文件頭部的偏移量'更改BMP信息頭中的圖像高度數(shù)據(jù)
d=2*pDAT<8>
SelectCaseLen<Hex<d>>
Case1,2:pDAT<8>=d
Case3,4:pDAT<9>=d\256:pDAT<8>=dAnd255
EndSelect'更改BMP信息頭中的圖象長(zhǎng)度數(shù)據(jù)
c=pDAT<21>:d=pDAT<20>+c*256+pDAT<22>*65536+aLength
SelectCaseLen<Hex<d>>
Case1,2:pDAT<20>=d
Case3,4:pDAT<21>=d\256:pDAT<20>=dAnd255
Case5,6:c=dAnd65535:pDAT<22>=d\65536:pDAT<21>=c\256:pDAT<20>=cAnd255
EndSelect'計(jì)算icon圖像信息塊中的圖象長(zhǎng)度數(shù)據(jù)
SelectCasepDAT<14>'pDAT<14>=4為16色,=8為256色,=24為真彩
Case4:d=d+40+64'64是16色調(diào)色板長(zhǎng)度,40是BMP信息頭的長(zhǎng)度
Case8:d=d+40+1024'1024是256色調(diào)色板長(zhǎng)度
Case24:d=d+40
EndSelect
SelectCaseLen<Hex<d>>
Case1,2:iDAT<14>=d
Case3,4:iDAT<15>=d\256:iDAT<14>=dAnd255
Case5,6:c=dAnd65535:iDAT<16>=d\65536:iDAT<15>=c\256:iDAT<14>=cAnd255
EndSelectCommand3.Enabled=True:Command2.Enabled=False
100
EndSubPrivateSubCommand1_Click<>
OnErrorGoToReadErr
DimImageNameAsString,fLengthAsLong,BJAsBoolean
WithCommonDialog1
.DialogTitle="打開"
.Filter="圖片文件<*.bmp,*.jpg,*.gif>|*.bmp;*.jpg;*.gif"
.ShowOpen
IfLen<.FileName><5ThenExitSub
ImageName=.FileName
EndWith
Picture1.Picture=LoadPicture<ImageName>
Picture2.Width=Picture1.Width:Picture2.Height=Picture1.Height
Picture2.Picture=LoadPicture<>
IfRight<LCase<ImageName>,3><>"bmp"Then'如果不是位圖,先存為位圖,再讀取
BJ=True
ImageName=App.Path&"\TempFile.bmp"
SavePicturePicture1.Image,ImageName
EndIf
fLength=FileLen<ImageName>'獲取文件長(zhǎng)度
ReDimpDAT<fLength-15>AsByte
OpenImageNameForBinaryAs#1
Get#1,15,pDAT
Close
IfBJThenKillImageName'刪除臨時(shí)位圖文件
If<pDAT<5>+pDAT<6>+pDAT<7>+pDAT<9>+pDAT<10>+pDAT<11>>0>Then
MsgBox"圖片尺寸超出"
ExitSub
EndIf
Me.Caption=ImageName
Command2.Enabled=True
ExitSub
ReadErr:
Close
EndSubPrivateSubCommand3_Click<>
OnErrorGoToWriteErr
DimIconNameAsString
WithCommonDialog1
.Flags=&H802
.DialogTitle="保存"
.Filter="圖標(biāo)文件<*.ico>|*.ico"
.ShowSave
If.FileName=""ThenExitSub
IconName=.FileName
EndWith
OpenIconNameForBinaryAs#1
Put#1,,iDAT
Put#1,,pDAT
Put#1,,aDAT
Close
ReDimiDAT<0>
ReDimpDAT<0>
ReDimaDAT<0>
Command3.Enabled=False
Picture2.Picture=LoadPicture<IconName>
ExitSub
WriteErr:
Close
MsgBox"圖標(biāo)制作失敗"
EndSub3.代碼分析
①在Command1_Click過(guò)程中,使用二進(jìn)制讀入數(shù)據(jù)方法,從第15字節(jié)讀起,這樣就去掉了
BMP文件頭。②在Command3_Click過(guò)程中,使用二進(jìn)制寫入數(shù)據(jù)方法,將ICON文件頭、ICON圖象信息塊
、讀入的位圖數(shù)據(jù)〔修改了其中幾個(gè)字節(jié)的數(shù)據(jù)〕、AND位圖數(shù)據(jù)〔全0數(shù)據(jù)>等,依次寫入一
個(gè)ico文件③Command2_Click過(guò)程是本代碼關(guān)鍵的關(guān)鍵。
首先計(jì)算AND位圖的長(zhǎng)度。這就需要知道掃描線的長(zhǎng)度和圖象的高度,而計(jì)算掃描線長(zhǎng)度
還需知道圖像的寬度。本代碼中,圖像高度在原位圖數(shù)據(jù)的pDAT<8>元素中,圖象寬度在原位
圖數(shù)據(jù)的pDAT<4>元素中,所以可歸納成代碼中所示的計(jì)算公式。接著給ICON文件頭和ICON圖象信息塊的元素賦值。請(qǐng)注意iDAT<6>和iDAT<7>,它們
分別是圖標(biāo)的寬度和高度,由于它們都只占用1個(gè)字節(jié),故圖標(biāo)規(guī)格的最大值只能做到255
象素〔如果它們都分別占用4個(gè)字節(jié)的話,呵呵,那制作出來(lái)的圖標(biāo)是多么地驚人??!〕。
icon圖像信息塊中的圖象長(zhǎng)度數(shù)據(jù)元素iDAT<14>—iDAT<17>要最后才賦值。接下來(lái)就是更改BMP信息頭中的圖像高度數(shù)據(jù)。原元素中只是XOR位圖的高度,而圖標(biāo)的
數(shù)據(jù)結(jié)構(gòu)要求這個(gè)值是XOR位圖高度與AND位圖高度之和。再修改BMP信息頭中的圖象長(zhǎng)度數(shù)據(jù)。原元素中只是XOR位圖的長(zhǎng)度,而圖標(biāo)的數(shù)據(jù)結(jié)
構(gòu)要求這個(gè)值是XOR位圖長(zhǎng)度與AND位圖長(zhǎng)度之和。最后修改icon圖像信息塊中的圖象長(zhǎng)度數(shù)據(jù),也就是iDAT<14>—iDAT<17>元素的值
〔這個(gè)長(zhǎng)度數(shù)據(jù)本來(lái)占用4個(gè)字節(jié),但255×255象素的圖標(biāo)長(zhǎng)度只要3個(gè)字節(jié)就夠了〕。計(jì)
算公式如下:icon圖像信息塊中的圖象長(zhǎng)度=XOR位圖長(zhǎng)度+AND位圖長(zhǎng)度+BMP信息頭長(zhǎng)度+調(diào)色板長(zhǎng)度
特大圖標(biāo)的制作工作到此就全部結(jié)束了,你一定迫不與待地想看看它的效果吧,可惜的
是,不論多大的圖標(biāo),在桌面或資源管理器中最大都只能顯示72×72的尺寸,你只有在圖片
框中才能欣賞到它的麗容了。不過(guò)不要垂頭喪氣,通過(guò)這個(gè)實(shí)驗(yàn),你將會(huì)獲得許多圖標(biāo)與位
圖的數(shù)據(jù)結(jié)構(gòu)方面的知識(shí),這不就是最大的收獲嗎?
附:圖標(biāo)文件的數(shù)據(jù)結(jié)構(gòu)之研究一、從圖標(biāo)的顯示原理說(shuō)起
一般圖標(biāo)都是由兩個(gè)單獨(dú)的位圖組成的。如果該圖標(biāo)是屏蔽背景色的話,那么,第一個(gè)
位圖是由黑色背景〔相關(guān)的顏色位全為0〕與彩色圖標(biāo)圖案組成的,該位圖將與當(dāng)前屏幕進(jìn)
行異或操作〔XOR〕,故稱其為XOR位圖;第二個(gè)位圖是由白色背景〔相關(guān)的顏色位全為1〕
與黑色圖標(biāo)圖案〔相關(guān)的顏色位全為0〕組成的,該位圖將與當(dāng)前屏幕進(jìn)行與操作〔AND〕,
故稱其為AND位圖。因此,圖標(biāo)的顯示是通過(guò)兩個(gè)步驟完成的:步驟1.首先,AND位圖與當(dāng)前屏幕進(jìn)行AND操作;
步驟2.接著,XOR位圖與當(dāng)前屏幕進(jìn)行XOR操作。大家知道,任何數(shù)值與1進(jìn)行AND操作的結(jié)果將等于原數(shù)值,而任何數(shù)值與0進(jìn)行AND
操作的結(jié)果則是0,因此在步驟1中,AND位圖中的背景色〔即白色1〕部分與屏幕經(jīng)過(guò)AND
操作后仍然保持屏幕的原色彩,而圖案色〔即黑色0〕部分則取代了原屏幕色。步驟1結(jié)束
后,屏幕上將留下一個(gè)黑色的圖標(biāo)圖案。在隨后的步驟2中,由于任何數(shù)值與0進(jìn)行異或操
作的結(jié)果都等于原數(shù)值,因此,XOR位圖與屏幕經(jīng)過(guò)異或操作后,彩色圖案部分就取代了屏
幕上的黑色圖標(biāo)部分,而屏幕的背景色與XOR位圖中的黑色背景0異或后仍保持原來(lái)的屏幕
色。步驟2結(jié)束后,一個(gè)以屏幕色為背景的彩色圖標(biāo)圖案就出現(xiàn)在屏幕上了〔這也是我們通
常所說(shuō)的"屏蔽背景色"或者說(shuō)"背景色透明"〕,這就是圖標(biāo)顯示的原理。二、圖標(biāo)的圖形
圖標(biāo)的圖形,實(shí)際上就是位圖格式的圖片,是一個(gè)標(biāo)準(zhǔn)的位圖格式。Windows只要從BMP
信息頭中獲取信息就足夠了,它據(jù)以解釋在其后出現(xiàn)的數(shù)據(jù)應(yīng)該如何處理。如果是調(diào)色板模
式,BMP信息頭后面的數(shù)據(jù)包含有調(diào)色板和像素點(diǎn)顏色索引,如果是真彩模式,其后的數(shù)據(jù)
直接就是像素點(diǎn)的RGB顏色值。
調(diào)色板模式的位圖文件是由BMP文件頭、BMP信息頭、調(diào)色板、數(shù)據(jù)區(qū)〔又稱位圖點(diǎn)陣〕
等幾個(gè)部分組成的。
而調(diào)色板模式的圖標(biāo)文件是由ICON文件頭、ICON圖像信息塊、BMP信息頭、調(diào)色板、數(shù)
據(jù)區(qū)〔這個(gè)數(shù)據(jù)區(qū)比位圖的數(shù)據(jù)區(qū)多了AND位圖的數(shù)據(jù),后面會(huì)講到〕。
我們欣喜地看到,位圖與圖標(biāo)的數(shù)據(jù)結(jié)構(gòu)有很大一部分是相同的!了解了這一情況,我
們可以簡(jiǎn)單地把圖標(biāo)圖形的結(jié)構(gòu)理解為位圖信息。這樣,我們就有可能根本不需要真的去畫
一幅圖來(lái)制作圖標(biāo),而只需要利用已有的位圖,對(duì)關(guān)鍵數(shù)據(jù)進(jìn)行程序填充或修改就可以了,
所編寫的代碼,直接按圖標(biāo)格式的要求,可把一個(gè)尺寸不大于255×255像素的任意位圖,
封裝成標(biāo)準(zhǔn)格式的圖標(biāo)〔位圖的寬高尺寸保持不變〕。
三、圖標(biāo)的數(shù)據(jù)結(jié)構(gòu)
圖標(biāo)文件的數(shù)據(jù)結(jié)構(gòu)可分為6部分,敘述如下:
順號(hào)名稱長(zhǎng)度〔單位:字節(jié)〕說(shuō)明
1ICON文件頭6
2ICON圖象信息塊16有多少個(gè)圖像,則信息塊也有多少個(gè)
3BMP信息頭40
4XOR位圖調(diào)色板16色=64,256色=1024真彩圖標(biāo)從此開始像素點(diǎn)的RGB值
5XOR位圖以調(diào)色板的索引值形式表示
6AND位圖以單色表示
說(shuō)明:
1.上表中的3-6部分合稱圖像數(shù)據(jù)塊,其中5、6部分又合稱為圖像數(shù)據(jù)區(qū)〔也稱位圖點(diǎn)陣〕
2.不論何種規(guī)格的圖標(biāo),其1-3部分的字節(jié)長(zhǎng)度是固定的。
3.調(diào)色板是供XOR位圖使用的,所以又稱作XOR位圖調(diào)色板。AND位圖是不需要調(diào)色板的,因
為它是單色的,即只有黑色和白色,所以又稱作單色AND位圖。
4.請(qǐng)注意第2部分的圖象信息塊的說(shuō)明,"有多少個(gè)圖像"是什么意思呢?原來(lái),在一個(gè)圖
標(biāo)文件中,有可能存放幾個(gè)圖像〔windows圖標(biāo)最多可有8個(gè)圖像〕,但每個(gè)圖像都有自己
的BMP信息頭、調(diào)色板、XOR位圖和AND位圖,且它們的圖像大小也可能不相同。以16
色有3個(gè)圖像的圖標(biāo)為例,其數(shù)據(jù)結(jié)構(gòu)如下:
順號(hào)名稱長(zhǎng)度〔字節(jié)〕說(shuō)明
1文件頭
6
2圖象1的圖象信息塊
16
3圖象2的圖象信息塊
16
4圖象3的圖象信息塊
16
5圖象1的圖象數(shù)據(jù)塊
不定其中BMP信息頭和調(diào)色板固定為40和64字節(jié)
6圖象2的圖象數(shù)據(jù)塊
不定同上
7圖象3的圖象數(shù)據(jù)塊
不定同上
下面以內(nèi)含1個(gè)圖像、16色、16×16規(guī)格的圖標(biāo)為例詳述〔偏移量括號(hào)前為10進(jìn)制,括
號(hào)內(nèi)為16進(jìn)制〕:
偏移量字節(jié)數(shù)描述典型值〔16進(jìn)制〕
〔一、文件頭6字節(jié)〕
000〔000〕2保留的字節(jié)0000
002〔002〕2資源類型0100〔01為圖標(biāo),02為光標(biāo)〕
004〔004〕2圖象個(gè)數(shù)0100
〔二、圖像信息塊16字節(jié)〕
006〔006〕1圖標(biāo)寬度10
007〔007〕1圖標(biāo)高度10
008〔008〕1顏色計(jì)數(shù)10〔16色,02=單色,00=256色或真彩>
009〔009〕1未用00
010〔00A〕4保留的00000000
014〔00E〕4圖象數(shù)據(jù)塊的長(zhǎng)度
28010000〔10進(jìn)制=296〕
018〔012〕4圖象數(shù)據(jù)塊相對(duì)于文件頭部的偏移量16000000〔10進(jìn)制=22〕
〔三、BMP信息頭40字節(jié)〕
022〔016〕4BMP信息頭結(jié)構(gòu)長(zhǎng)度28000000〔10進(jìn)制=40〕
026〔01A〕4圖像寬度10000000
030〔01E〕4圖像高度〔XOR圖高度+AND圖高度〕20000000
034〔022〕2位面板數(shù)
0100
036〔024〕2每象素所占位數(shù)
0400〔04=16色,8=256色,18=真彩>
038〔026〕4象素?cái)?shù)據(jù)的壓縮類型00000000〔表示未壓縮〕
042〔02A〕4位圖點(diǎn)陣的長(zhǎng)度C0000000〔10進(jìn)制=192〕
046〔02E〕16未用16個(gè)00.
〔四、XOR位圖的調(diào)色板64字節(jié)〕
062〔03E〕1藍(lán)色分量
063〔03F〕1綠色分量
064〔040〕1紅色分量
065〔041〕1未用00
……
〔五、XOR位圖的數(shù)據(jù)128字節(jié)〕
126〔07E〕128XOR位圖
〔六、單色AND位圖的數(shù)據(jù)64字節(jié)〕
254〔0FE〕64AND位圖
說(shuō)明:
1.上表中有關(guān)長(zhǎng)度的數(shù)據(jù),遵循"低位在前,高位在后"的原則。如果有4個(gè)字節(jié),那么后2
個(gè)字節(jié)為高位,前2個(gè)字節(jié)為低位,并且每2個(gè)字節(jié)內(nèi)也是"低位在前,高位在后"。例如
偏移量為00E的圖象數(shù)據(jù)塊的長(zhǎng)度是28010000,在計(jì)算時(shí)要把它們反過(guò)來(lái),變成0000
0128,實(shí)際就是16進(jìn)制的128即10進(jìn)制的296;再如12345678,那么實(shí)際計(jì)算時(shí)就是:
78563412,即10進(jìn)制的2018915346
2.偏移量為024的"每象素所占位數(shù)"是指象素在XOR位圖中所占的字節(jié)位數(shù)〔1個(gè)字節(jié)=8位〕
,04表示每個(gè)象素占4位,換言之,就是說(shuō)XOR位圖中每個(gè)字節(jié)可表示2個(gè)象素。該數(shù)據(jù)如為
0100,則表示單色〔黑白位圖〕,0400為16色,0800為256色,1800為24位真彩。
3.XOR位圖每字節(jié)對(duì)應(yīng)2個(gè)像素<16色>或1個(gè)像素<256色>,它的排列規(guī)律是:倒向〔最末行的
像素在最前,而第一行的像素在最后,由此類推〕,行內(nèi)像素按從左至右的順序,字節(jié)高
位表示靠左的像素。AND位圖每字節(jié)對(duì)應(yīng)8個(gè)象素〔每位對(duì)應(yīng)1個(gè)象素〕,排列規(guī)律與XOR位
圖相同。
4.真彩圖標(biāo)沒有調(diào)色板,而是在第3部分BMP信息頭的后面直接存放像素的RGB值,24位
真彩圖標(biāo)每3個(gè)字節(jié)對(duì)應(yīng)1個(gè)像素值,其中每個(gè)字節(jié)分別對(duì)應(yīng)該像素的R、G、B值。像素的
排列規(guī)律與調(diào)色板模式的圖標(biāo)相同。
5.上表的第一、二、三部分中,凡字節(jié)數(shù)為1的數(shù)據(jù),其數(shù)據(jù)類型為Byte,字節(jié)數(shù)為2的數(shù)據(jù),
其數(shù)據(jù)類型為Integer,字節(jié)數(shù)為4的數(shù)據(jù),其數(shù)據(jù)類型為L(zhǎng)ong〔第三部分中有16個(gè)未用的
的字節(jié),是4個(gè)Long類型的數(shù)據(jù),它們?cè)?bmp位圖中是有作用的〕。下面是各種圖標(biāo)〔內(nèi)含1個(gè)圖像〕的調(diào)色板、圖像數(shù)據(jù)的長(zhǎng)度與總長(zhǎng)度,括號(hào)內(nèi)是起始字
節(jié)的偏移量:
單位:字節(jié)
圖標(biāo)規(guī)格調(diào)色板XOR位圖AND位圖總長(zhǎng)度
16色16×16象素<62>64<126>128<254>64
318
16色24×24象素<62>64<126>288<414>96
510
16色32×32象素<62>64<126>512<638>128766
16色48×48象素<62>64<126>1152<1278>3841662
256色16×16象素<62>1024<1086>256<1342>641406
256色24×24象素<62>1024<1086>576<1662>961758
256色32×32象素<62>1024<1086>1024<2110>1282238
256色48×48象素<62>1024<1086>2304<3390>3843774
真彩16×16象素
<62>768<830>64
894
真彩24×24象素
<62>1728<1790>961886
真彩32×32象素
<62>3072<3134>1283262
真彩48×48象素
<62>6912<6974>3847358
說(shuō)明:
1.XOR位圖的長(zhǎng)度與圖標(biāo)尺寸與圖標(biāo)的顏色數(shù)均有關(guān),AND位圖的長(zhǎng)度只與圖標(biāo)的尺寸有關(guān),
與圖標(biāo)的顏色數(shù)無(wú)關(guān)。
2.XOR位圖每字節(jié)對(duì)應(yīng)2個(gè)像素〔16色〕或1個(gè)像素〔256色〕
3.AND位圖每4字節(jié)為一組〔這里所說(shuō)的"一組",其標(biāo)準(zhǔn)名稱為"一條掃描線",掃描線的
定義是:位圖中的一行數(shù)據(jù)信息叫做一條掃描線〕,但48×48圖標(biāo)的AND位圖每8個(gè)字節(jié)
為一組。組內(nèi)每個(gè)顏色位對(duì)應(yīng)1個(gè)象素。注意:
①16×16圖標(biāo)每組的后2個(gè)字節(jié)不用,所以實(shí)際上是2字節(jié)〔16位〕對(duì)應(yīng)一行16個(gè)象素
②24×24圖標(biāo)每組的最后1個(gè)字節(jié)不用,所以實(shí)際上是3字節(jié)〔24位〕對(duì)應(yīng)一行24個(gè)象素
③32×32圖標(biāo)每組4個(gè)字節(jié)32位對(duì)應(yīng)一行32個(gè)象素
④48×48圖標(biāo)每組的后2個(gè)字節(jié)不用,所以實(shí)際上是6字節(jié)〔48位〕對(duì)應(yīng)一行48個(gè)象素
4.為什么位圖數(shù)據(jù)中會(huì)有不用的字節(jié)呢,這不是浪費(fèi)嗎?原來(lái),Windows有一個(gè)規(guī)定,每一
條掃描線必須結(jié)束于一個(gè)32位的邊界,也就是說(shuō),一條掃描線的位長(zhǎng)度〔按位計(jì)算〕必須
能整除32,或字節(jié)長(zhǎng)度必須能整除4〔XOR、AND位圖都是如此〕。舉例來(lái)說(shuō),如果一條掃
描線只有8位,那么就要用空白的24位來(lái)補(bǔ)充,如果有48位,那么還必須用空白的16位來(lái)
補(bǔ)充。
5.XOR位圖每條掃描線長(zhǎng)度取決于兩個(gè)因素:圖像的寬度值和顏色數(shù)。各種顏色的圖標(biāo)的XOR
位圖每條掃描線的長(zhǎng)度如下表所示〔單位:字節(jié)〕:①16色圖標(biāo):
XOR圖象寬度掃描線長(zhǎng)度
16象素8
17--24象素12
25--32象素16
33--40象素20
41--48象素24
49--56象素28
57--64象素32
65--72象素36
71--80象素40
……
可以歸納出計(jì)算公式是:
16色XOR位圖每條掃描線長(zhǎng)度=4×〔圖象寬\8+Abs〔〔圖象寬Mod8〕>0〕〕②256色圖標(biāo):
XOR圖象寬度掃描線長(zhǎng)度
16象素16
17--20象素20
21--24象素24
25--28象素28
29--32象素32
33--36象素36
37--40象素40
41--44象素44
45--48象素48
……
可以歸納出計(jì)算公式是:
256色XOR位圖每條掃描線長(zhǎng)度=4×〔圖象寬\4+Abs〔〔圖象寬Mod4〕>0〕〕③真彩圖標(biāo):
XOR圖象寬度掃描線長(zhǎng)度
16象素48
17象素52
18象素56
19象素60
20象素
60
21象素64
22象素68
23象素72
24象素72
……
可以歸納出計(jì)算公式是:
真彩XOR位圖每條掃描線長(zhǎng)度=4×〔圖象寬×3\4+Abs〔〔圖象寬×3Mod4〕>0〕〕6.AND位圖每條掃描線的長(zhǎng)度只與圖標(biāo)圖像的寬度值有關(guān)。如下表所示〔單位:字節(jié)〕:
AND圖象寬度掃描線長(zhǎng)度
16--32象素4
33--64象素8
65--96象素12
97--128象素16
129--160象素20
160--192象素24
192--224象素28
224--255象素32
可以歸納出計(jì)算公式是:
AND位圖每條掃描線長(zhǎng)度=4×〔圖象寬\32+Abs〔〔圖象寬Mod32〕>0〕〕7.要使背景透明,XOR位圖的背景必須為黑色〔對(duì)應(yīng)的顏色位=0〕,圖案為彩色,而AND位
圖則背景必須為白色〔對(duì)應(yīng)的顏色位=1〕,圖案為黑色〔對(duì)應(yīng)的顏色位=0〕
8.XOR位圖的彩色圖形信息中存儲(chǔ)的并不是顏色值,而是與調(diào)色板對(duì)應(yīng)的索引值,從0開始
編號(hào)。
四、圖標(biāo)的顏色
調(diào)色板模式的圖標(biāo),其顏色是由調(diào)色板確定的,而調(diào)色板是可以自行定義的。比如16色
圖標(biāo),其調(diào)色板只要有16種顏色就行。下面是以QBasic的16種顏色作為調(diào)色板時(shí),XOR位
圖調(diào)色板的16色索引值與QBColor的顏色值對(duì)照:
顏色索引值QBasic調(diào)色板中的值〔最后一個(gè)字節(jié)未用〕
黑色0
0
000000
00
深紅1
4
000080
00
深綠2
2
008000
00
深黃3
6
008080
00
深藍(lán)4
1
800000
00
深紫5
5
800080
00
深青6
3
808000
00
深灰7
8
808080
00
淺灰
8
7
C0C0C0
00
紅色9
C<12>0000FF
00
綠色A<10>
A<10>00FF00
00
黃色B<11>
E<14>00FFFF
00
藍(lán)色C<12>
9
FF0000
00
紫色D<13>
D<13>FF00FF
00
青色E<14>
B<11>FFFF00
00
白色F<15>
F<15>FFFFFF
00
怎么個(gè)對(duì)應(yīng)法呢?舉個(gè)例來(lái)說(shuō),比如16×16象素圖標(biāo)的XOR位圖中某個(gè)字節(jié)值為81,那
就表示該字節(jié)所對(duì)應(yīng)的2個(gè)象素,左邊的象素為淺灰色而右邊的象素為深紅色。五、一個(gè)具體的例子
有一個(gè)16色16×16象素的圖標(biāo),該圖標(biāo)是一個(gè)邊長(zhǎng)為16、邊框?yàn)榧t色的空心正方形,其
全部數(shù)據(jù)如下:
偏移量000102030405060708090A0B0C0D0E0F
000
00000100010010101000000000002801
010
00001600000028000000100000002000
020
00000100040000000000C00000000000
030
00000000000000000000000000000000
040
00000000800000800000008080008000
050
0000800080008080000080808000C0C0
060
C0000000FF0000FF000000FFFF
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 孕期白帶異常的健康宣教
- 咽喉皰疹的健康宣教
- 腕骨骨折的健康宣教
- JJF(陜) 052-2021 發(fā)電廠發(fā)電機(jī)置換氣分析儀校準(zhǔn)規(guī)范
- JJF(陜) 006-2019 脆碎度測(cè)試儀校準(zhǔn)規(guī)范
- 【大學(xué)課件】語(yǔ)義網(wǎng)格資源描述模型、形式化理論和支撐技術(shù)
- 系統(tǒng)性思維與工作計(jì)劃設(shè)計(jì)
- 美術(shù)教學(xué)的社會(huì)價(jià)值分析計(jì)劃
- 分析生產(chǎn)瓶頸并制定改進(jìn)計(jì)劃
- 跨班級(jí)合作與經(jīng)驗(yàn)交流活動(dòng)計(jì)劃
- 海南洪水影響區(qū)域評(píng)估報(bào)告
- 麻醉科臨床診療指南2020版
- 二 《微寫作?抒發(fā)情感》(教學(xué)設(shè)計(jì))-【中職專用】高二語(yǔ)文精講課堂(高教版2023·職業(yè)模塊)
- 英語(yǔ)倒裝句課件(全面詳細(xì))
- 課程設(shè)計(jì)電動(dòng)葫蘆設(shè)計(jì)
- 對(duì)高職院校學(xué)分銀行建設(shè)的思考
- 2023年山東博興縣公用事業(yè)集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 2023個(gè)人酒水購(gòu)銷合同酒水購(gòu)銷合同范本
- 健康飲食與體重管理:通過(guò)飲食控制體重
- 三查四定表完整版本
- 婦產(chǎn)科護(hù)理學(xué)智慧樹知到課后章節(jié)答案2023年下溫州醫(yī)科大學(xué)
評(píng)論
0/150
提交評(píng)論