一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

HTML5邊玩邊學(xué)(3):像素和顏色

  一、理解顏色

  我們在電腦屏幕上可以看到色彩斑斕的圖像,其實(shí)這些圖像都是由一個個像素點(diǎn)組成的。那么像素是什么?顏色又是什么呢?(如果您提出這兩個問題,您一定是個熱愛思考的人)一個像素其實(shí)對應(yīng)著內(nèi)存中的一組連續(xù)的二進(jìn)制位,由于是二進(jìn)制位,每個位上的取值當(dāng)然只能是 0 或者 1 了!這樣,這組連續(xù)的二進(jìn)制位就可以由 0 ,1 排列組合出很多種情況,而每一種排列組合就決定了這個像素的一種顏色。先看看下面這幅圖

  我們可以看到這幅圖描述了六個像素點(diǎn),一共由24個小方框組成。

  注意:圖中的一個小方框代表一個字節(jié),即8個二進(jìn)制位。

  因此,每個像素點(diǎn)由四個字節(jié)組成。圖中也分別標(biāo)出了這四個字節(jié)代表的含義:

  第一個字節(jié)決定像素的紅色值

  第二個字節(jié)決定像素的綠色值

  第三個字節(jié)決定像素的藍(lán)色值

  第四個字節(jié)決定像素的透明度值

  每一種分顏色值的大小是從 0 到 255(提問:為什么只能到255?) ,透明度的取值:0 代表完全透明,255代表完全不透明。這樣,我們就可以用(255,0,0,255)來表示一個純紅色像素,在內(nèi)存中,他是這樣的一個32位的串: 11111111 00000000 00000000 11111111 。

  二、操作像素

  了解了顏色和像素的實(shí)質(zhì),我們就可以對圖形進(jìn)行更加復(fù)雜的處理。可是,HTML5 目前還沒有提供類似 setPixel 或者 getPixel 這樣直接操作像素點(diǎn)的方法, 但是我們也有辦法,就是使用 ImageData 對象:

  ImageData對象用來保存圖像像素值,它有 width、height和 data 三個屬性,其中 data 屬性就是一個連續(xù)數(shù)組,圖像的所有像素值其實(shí)是保存在 data 里面的。

  data 屬性保存像素值的方法和我們在前面圖片中看到的一模一樣:

  imageData.data[index*4 +0]

  imageData.data[index*4 +1]

  imageData.data[index*4 +2]

  imageData.data[index*4 +3]

  上面取出了 data 數(shù)組中連續(xù)相鄰的四個值,這四個值分別代表了圖像中第 index+1 個像素的紅色、綠色、藍(lán)色和透明度值的大小。注意:index 從0 開始,圖像中總共有 width * height 個像素,數(shù)組中總共保存了 width * height * 4 個數(shù)值

  上下文對象 Context 有三個方法用來創(chuàng)建、讀取和設(shè)置 ImageData 對象,他們分別是:

  createImageData(width, height):在內(nèi)存中創(chuàng)建一個指定大小的 ImageData 對象(即像素數(shù)組),對象中的像素點(diǎn)都是黑色透明的,即rgba(0,0,0,0)

  getImageData(x, y, width, height):返回一個 ImageData 對象,這個 IamgeData 對象中包含了指定區(qū)域的像素數(shù)組

  putImageData(data, x, y):將 ImageData 對象繪制到屏幕的指定區(qū)域上

  三、一個簡單的圖像處理例子

  上面說了這么多,我們用了解的知識來玩玩圖像編程,或許有一天我們就要在 Chrome 中玩 PhotoShop 了。

  程序大概是這個樣子的:

  1、將一幅圖片繪制到一個 canvas 元素上,為了不引發(fā)安全錯誤(Security_ERR:DOM EXCEPTION 18),我用的是我博客頂部的橫幅背景圖片。你要運(yùn)行這個例子,可能需要改成自己的圖片

  2、有四個滑動條,分別代表 GRBA 四個分量

  3、拖動滑動條,圖像中對應(yīng)的顏色分量就會增加或者減少

  4、如果圖像變成透明,就會顯示 canvas 元素的背景,我把這個背景設(shè)置成了我的頭像,呵呵。

  思路:其實(shí)就是用 getImageData 方法,將你想改變的那一塊區(qū)域的像素數(shù)組取出來,然后根據(jù)你拖動的滑動條和滑動條的數(shù)值,來更改那一塊區(qū)域里所有像素對應(yīng)顏色分量的值。處理完畢后再用 putImageData 方法繪制到畫布上,就是這么簡單。

  下面是代碼:

<canvas id="test1" width="507" height="348" style="background-image:url(http://images.cnblogs.com/cnblogs_com/myqiao/262115/r_2204793492575248335.jpg)">你的瀏覽器不支持 &lt;canvas&gt;標(biāo)簽,請使用 Chrome 瀏覽器 或者 FireFox 瀏覽器</canvas>
紅色:
<input type="range" min="1" max="100" onchange="colorChange(event,0)"/>
綠色:
<input type="range" min="1" max="100" onchange="colorChange(event,1)"/>
藍(lán)色:
<input type="range" min="1" max="100" onchange="colorChange(event,2)"/>
透明:
<input type="range" min="1" max="100" onchange="colorChange(event,3)"/>
<script type="text/Javascript">
//獲取上下文對象
var canvas = document.getElementById("test1");
var ctx = canvas.getContext("2d");

//畫布的寬度和長度
var width = parseInt(canvas.getAttribute("width"));
var height = parseInt(canvas.getAttribute("height"));

//裝入圖像
var image = new Image();
image.onload
=imageLoaded;
//頂部背景圖片
image.src = "/skins/Valentine/images/banner2.gif";

//用來保存像素數(shù)組的變量
var imageData=null;

function imageLoaded() {
// 將圖片畫到畫布上
ctx.drawImage(image, 0, 0);

//取圖像的像素數(shù)組
imageData = ctx.getImageData(0, 0, width, height);
}

function colorChange(event,offset){
imageLoaded();
for (var y = 0; y < imageData.height; y++) {
for (x = 0;x < imageData.width; x++) {
//index 為當(dāng)前要處理的像素編號
var index = y * imageData.width + x;
//一個像素占四個字節(jié),即 p 為當(dāng)前指針的位置
var p = index * 4;
//改變當(dāng)前像素 offset 顏色分量的數(shù)值,offset 取值為0-3
var color = imageData.data[p + offset] * event.target.value / 50;
// 顏色值限定在[0..255]
color = Math.min(255, color);
//將改變后的顏色值存回數(shù)組
imageData.data[p + offset]=color
}
}
//輸出到屏幕
ctx.putImageData(imageData, 0, 0);
}
</script>

it知識庫HTML5邊玩邊學(xué)(3):像素和顏色,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产一区二区三区免费播放 | 亚洲欧美一区二区三区麻豆 | 伊人天伊人天天网综合视频 | 亚洲一区在线免费 | 九色精品视频在线观看 | 国产一级又裸又黄又裸又 | 亚洲热在线观看 | 亚洲天堂成人在线观看 | 五月婷婷亚洲综合 | 亚洲免费一级片 | 国产每日更新 | 欧美激情图片区 | 亚洲视频一区二区三区 | 伊人网综合在线 | 久久婷婷五色综合夜啪 | 欧美成狂野欧美在线观看 | 91射射射| 色喔喔| 国产香蕉久久精品综合网 | 国产中文99视频在线观看 | 国产精品中文 | 国产精品视频国产永久视频 | 成年在线视频 | 国产大臿蕉香蕉大视频女 | 一区二区三区在线免费视频 | 久久性妇女精品免费 | 成人欧美视频免费看黄黄 | 99精品久久久久久久免费看蜜月 | 久久久久久久久亚洲 | 亚洲国产欧美国产第一区二区三区 | 91免费版视频| 色呦呦视频| 国产亚洲一区二区在线观看 | 隔壁搬来黑人巨大中文字幕 | 美女又爽又黄免费 | 久久青草精品免费资源站 | 巨臀中文字幕一区二区翘臀 | 91精品国产福利在线观看 | 黄色日韩网站 | 7799国产精品久久久久99 | 亚洲综合插 |