圖片的由來(lái)與存儲(chǔ)

我們知道,計(jì)算機(jī)中的數(shù)據(jù)都是0和1,但是展示在我們屏幕上的卻是多姿多彩,文字、圖片、視頻和游戲等等,0和1怎么變成我們從屏幕看到的內(nèi)容的?

黑白圖片

假定,1=白色,0=黑色,我們現(xiàn)在就可以用0和1組合為一個(gè)黑白畫(huà)面了

我們使用ps新建一個(gè)只有0、1的位圖

img

圖片新建完成如下(放大后效果)

[圖片上傳失敗...(image-ce5cfe-1626784673662)]

假定我們直接按1表示白,0表示黑的方式排列,可以得到我們的存儲(chǔ)結(jié)果

img

圖片存儲(chǔ)格式

我們按 OS/2 bmp 方式進(jìn)行保存(win位圖最初保存方式,且無(wú)壓縮,這里面去除了ps自動(dòng)生成的元信息)

img

OS/2 bmp:

0x00-0x01: 2byte 424D表示BMP格式

0x02-0x05: 4byte 此文件大小是0x0030bit(注意高低位,低位在前)

0x06-0x09: 4byte 保留位

0x0A-0x0D: 4byte 偏移量,數(shù)據(jù)開(kāi)始起點(diǎn),圖中數(shù)據(jù)從0x0020開(kāi)始

0x0E-0x11: 4byte BITMAPINFOHEADER結(jié)構(gòu)體大小(以下為結(jié)構(gòu)體定義),圖中大小為0x000C(OS/2:12 | Windows DIB 40)

0x12-0x13: 2byte 圖像寬 圖中為4像素

0x14-0x15: 2byte 圖像高 圖中為2像素

0x16-0x17: 2byte 圖像平面數(shù) 圖中為1

0x18-0x19: 2byte 一個(gè)像素有多少bit 圖中為1

0x1A-0x1C: 3byte 0表示的顏色BGR格式,圖中為0x000000黑色

0x1D-0x1F: 3byte 1表示的顏色BGR格式,圖中為0xFFFFFF白色

由于Windows默認(rèn)的掃描的最小單位是4byte,所以bmp默認(rèn)每行對(duì)齊是4的倍數(shù),我們可以得到第一行的長(zhǎng)度為寬度4*1分辨率*1位(bit)=4bit,對(duì)齊為byte時(shí)最小單位4byte,所以需要占用4byte,但僅前4個(gè)bit填充的值有效。

且bmp是從左下角開(kāi)始掃碼,從左到右,從下到上,二進(jìn)制轉(zhuǎn)換0101為5,1010為a

最終對(duì)應(yīng)的結(jié)果在不對(duì)齊的情況下為a5a5,在對(duì)齊后補(bǔ)0的情況如下所示:


A0 00 00 00 50 00 00 00 A0 00 00 00 50 00 00 00

但是ps等軟件在生成時(shí)會(huì)有一些元信息,所以可能會(huì)出現(xiàn)對(duì)齊為4byte時(shí)不是補(bǔ)0的情況,在算法讀取時(shí)會(huì)自動(dòng)跳過(guò),但是人眼進(jìn)行查看時(shí),會(huì)造成干擾,自己排除掉即可

img

上圖中,6 7F、8 22 56 F3等數(shù)據(jù)都是干擾數(shù)據(jù),可替換為0或者替換為其它內(nèi)容。

圖片放大

圖片放大是在圖片使用中最常使用的功能,我們從圖片放大這個(gè)角度看下黑白顏色后面該怎么處理,嘗試放大下面這個(gè)長(zhǎng)寬2x2的黑白圖

[圖片上傳失敗...(image-7f34f4-1626784673662)]

我們存儲(chǔ)在電腦中的數(shù)據(jù)可以抽象理解為,長(zhǎng)寬2個(gè)像素的

img

當(dāng)我們將這個(gè)放大為長(zhǎng)寬4個(gè)像素很好處理

[圖片上傳失敗...(image-12625-1626784673662)]

我們得到的圖片還是這樣的沒(méi)什么變化

但是當(dāng)我們想將這個(gè)放大為長(zhǎng)寬3像素呢?要知道,我們的圖片放大縮小,從來(lái)都不是按倍數(shù)放大,動(dòng)不動(dòng)就直接放大2倍的,幾乎沒(méi)有。

可能我們得到的理想結(jié)果是

e ?.5 1 ?.5 ?.5 ?.s

但是我們的01世界中,不存在0.5這種數(shù)據(jù),按四舍五入或者退1法,我們可以得到這樣的結(jié)果

1 1 1
img

但是這無(wú)疑是差距太大了,一個(gè)小的圖片差距都如此大,更大一點(diǎn)的圖片也會(huì)出現(xiàn)更大的偏差,無(wú)疑只使用黑白兩個(gè)顏色是無(wú)法將圖片的細(xì)節(jié)表述清楚的。

那么我們現(xiàn)在拓展下:0b00表示黑色,0b11表示白色,0b01與0b10表示灰色。這樣在放大的時(shí)候可以有灰色填充,某些細(xì)節(jié)可以達(dá)到完善的程度了。(這只是一個(gè)極端例子,不用深究,我要表達(dá)的是0與1黑白中間拓展更多的顏色表達(dá),讓圖片內(nèi)容更加豐富)

8位灰階

在計(jì)算機(jī)中,8位是1個(gè)字節(jié),1byte=8bit,我們存儲(chǔ)的最小單元幾乎都是使用byte進(jìn)行存儲(chǔ),8位灰階就是將黑白顏色數(shù)據(jù)繼續(xù)拓展,都是黑、灰、白色之間,有256個(gè)層次組成。

或許五彩斑斕的黑無(wú)法實(shí)現(xiàn),但是層次分明的灰是可以達(dá)成的。

img

彩色圖片

層次分明的灰再怎么分明,都無(wú)法表達(dá)我們看到的真實(shí)顏色,光學(xué)三原色與顏料三原色中紅、綠、藍(lán)可以組合出所有顏色,依據(jù)無(wú)色系黑白灰+彩色系紅綠藍(lán)可以組合出任何顏色的特性,我們繼續(xù)拓展到0和1中的隊(duì)伍來(lái)。

img

首先 紅+綠+藍(lán),在RGB光學(xué)三原色中可以組成白色,所有顏色都不存在,則可以變成黑色。

按上圖我們先簡(jiǎn)單擴(kuò)展(自定義),3位表示3個(gè)顏色0b000表示白色 0b100 表示紅色 0b010表示綠色,0b001表示藍(lán)色,0b111是白色,對(duì)應(yīng)的0b010+0b001=0b011,藍(lán)+綠=青,0b110=紅+綠=黃,0b101=紅+藍(lán)=紫。彩色出現(xiàn)了。

那么現(xiàn)在我們已經(jīng)有了最基本的顏色后,我們依然需要進(jìn)行圖片的放大

看下面這個(gè)四像素的圖片,我們依然希望放大

img
е10 001 тео оое

圖片的放大肯定不是相加,而是中間是一個(gè)過(guò)渡的顏色進(jìn)行替換,我們現(xiàn)在使用最簡(jiǎn)單粗暴的替換顏色相加取中間值的方式處理。

以紅綠中間的填充色為例(0b010+0b100)/2,應(yīng)該是靠近這兩個(gè)顏色中的顏色,結(jié)果是2.5,我們不能用0b010綠色去填充,也不能用0b100紅色去填充,如果使用0b110,黃色,更是相差太遠(yuǎn),在一個(gè)大的照片的放大過(guò)程中,盡量的貼合兩邊的顏色的中間顏色,應(yīng)該是棕褐色,既有綠的過(guò)渡也需要紅的過(guò)渡。(下圖的展示可能不是很明顯,也不很合適,因?yàn)閳D片的放大,極少有長(zhǎng)寬2像素放大為長(zhǎng)寬3像素這種操作,顏色直接的過(guò)渡也不會(huì)這么夸張。)

img

對(duì)于我們棕褐色,在我們剛才的拓展中,是不存在的,正如灰色在01表示的黑白中不存在,所以我們依然需要一個(gè)拓展來(lái)表達(dá)更多的顏色。

我們現(xiàn)在將顏色拓展為6個(gè)bit了,0b000000表示黑色,0b111111表示白色,其余的0b1100000是紅,0b001100是綠,0b000011是藍(lán)色。第0-2位的00-11中可以表達(dá)4種不同程度的紅,黑(無(wú)紅)、淡紅、淺紅、正紅,其余的等同劃分。

現(xiàn)在,差不多可以將棕色表達(dá)出來(lái)了,雖然依然不夠細(xì)致,我們現(xiàn)在有2^6 = 64種顏色了。

高彩色

15或16位彩色(高彩色):電腦所用的三原色是紅、綠和藍(lán)。在15位彩色中,每種原色有2^5 = 32個(gè)層次,共32768種顏色;而在16位彩色中,綠色有2^6=64個(gè),共有65536個(gè)顏色

真彩色

24位彩色(真彩色):每種原色都有256個(gè)層次,它們的組合便有256256256種顏色。

32位彩色

32位彩色:除了24位彩色的顏色外,額外的8位是儲(chǔ)存重疊圖層的圖形資料(alpha頻道)。

另外有高動(dòng)態(tài)范圍影像(High Dynamic Range Image),這種影像使用超過(guò)一般的256色階來(lái)儲(chǔ)存影像,通常來(lái)說(shuō)每個(gè)像素會(huì)分配到32+32+32個(gè)bit來(lái)儲(chǔ)存顏色資訊,也就是說(shuō)對(duì)于每一個(gè)原色都使用一個(gè)32bit的浮點(diǎn)數(shù)來(lái)儲(chǔ)存.

補(bǔ)充

各種類型文件頭標(biāo)準(zhǔn)編碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容