HTML5 Canvas核心技术—图形、动画与游戏开发.pdf6
操作图像的像素:getImageData() putImageData()
ImageData对象
调用getImageData()方法实际是获取了一个指向ImageData对象的引用,返回的对象包含3个属性:1)width以设备像素为单位的图像数据宽度 2)height以设备像素为单位的图像数据高度 3)data包含各个设备像素数值的数组
width和height都是只读的无符号长整数,data属性包含的每个数组元素都表示图像数据中相应的像素值,每个值包含的颜色分量都是含有8个二进制位的整数(后面将详细讲解)
为了使绘图更加逼真,浏览器可能会使用多个像素来表示一个像素,一个边长都为200像素的canvas,共有40000个像素,若浏览器用2个像素来表示原来的1个像素,将有160000像素,可通过width和height查看

putImageData()方法不受全局设置的影响(globalAlpha与globalCompositeOperation等),也不会在绘制时运用图像合成、阴影等效果,drawImage()方法与之相反,会受全局属性影响

getImageData()参数分别是x、y、图像的高和图像的宽
putImageData()方法后4个参数表示图像数据中一块脏矩形区域(以设备像素为单位),这4个参数是可选的,不指定则采取默认值:
所绘脏矩形距离整幅图像数据左上角的水平偏移量,以设备像素为单位,默认0
所绘脏矩形距离整幅图像数据左上角的垂直偏移量,以设备像素为单位,默认0
以设备像素为单位的脏矩形宽度,默认是整幅图像的宽度
以设备像素为单位的脏矩形高度,默认是整幅图像的高度
注意,putImageData()方法的第二个和第三个参数以CSS像素计量
ImageData对象中的数组
ImageData对象中的data属性指向一个包含8位二进制整数的数组,这些整数的值位于0-255之间,分别表示一个像数的红、绿、蓝及透明度分量

遍历每个数组
for(var index=0;index<length;++i){
value=data[index];
}
反向遍历每个像素
index=length-1;
while(index >=0){
value=data[index];
index--;
}
只处理alpha值,不修改红绿蓝分量
for(index=3;index<length-4;index+=4){
data[index]=...;
}
只处理红绿蓝分量,不修改alpha值
for(index=0;index<length-4;index+=4){
data[index]=...;
data[index+1]=...;
data[index+2]=...;
}
图像滤镜
通过操作单个像素实现滤镜效果
负片滤镜,即反向,255减去当前的分量,alpha值不变
黑白滤镜,计算每个像素红绿蓝分量的平均值,将三个分量都设置为这个值
浮雕滤镜, 基于当前像素的前一个像素RGB值与它的后一个像素的RGB值之差再加上128
在与图像数据有关的度量值中,应该使用设备像素而非CSS像素
用工作线程处理图像
浏览器在执行JavaScript代码时,使用的是主线程,可以使用工作线程处理一些复杂运算,以便浏览器能够及时响应用户操作
当主线程执行到sunglassFilter=new Work('sunglassFilter.js')这一行语句时,会创建一个工作线程,传递给Work构造器的文件名表示工作进程将要执行的Javascript代码文件,可以在其他函数中调用变量sunglassFilter,实现一些通信

以图像制作动画
通过设置setInterval()来持续降低每个像素的alpha值,实现淡入淡出效果
图像绘制的安全问题
HTML5Canvas规范允许绘制不属于自己的(其他域)的图像,但却不能通过CanvasAPI保存或修改其他域中的图像
安全机制原理:每个canvas都有一个origin-clean的标志位,初始值是true,如果使用了drawImage()绘制一幅其他域中的图像,origin-clean的值将被设置为false;本身就是false的canvas绘制到当前canvas中,依旧是false,对origin-clean为false的canvas调用toDataURL()或getImageData()会抛出异常
浏览器会将用户的文件系统与运行应用程序的环境视为两个不同的域,所以在默认情况下不能保存或修改文件系统的图片
临时解决办法:在命令行中指定“--allow-file-access-from-files”参数来启东Chrome浏览器,使用火狐浏览器时调用netscape.security.PriviegeManager.enablePrivilege("UniversalBrowserRead");
HTML5 Canvas核心技术—图形、动画与游戏开发.pdf6的更多相关文章
- HTML5 Canvas核心技术图形动画与游戏开发 ((美)David Geary) 中文PDF扫描版
<html5 canvas核心技术:图形.动画与游戏开发>是html5 canvas领域的标杆之作,也是迄今为止该领域内容最为全面和深入的著作之一,是公认的权威经典.amazon五星级超级 ...
- HTML5 Canvas核心技术图形动画与游戏开发(读书笔记)----第一章,基础知识
一,canvas元素 1 为了防止浏览器不支持canvas元素,我们设置“后备内容”(fallback content),下面紫色的字即为后备内容 <canvas id="canvas ...
- Html5 Canvas核心技术(图形,动画,游戏开发)--基础知识
基础知识 canvas 元素可以说是HTML5元素中最强大的一个,他真正的能力是通过canvas的context对象表现出来的.该环境对象可以从canvas元素身上获得. <body> & ...
- HTML5 Canvas核心技术:图形、动画与游戏开发 PDF扫描版
HTML5 Canvas核心技术:图形.动画与游戏开发 内容简介: <HTML5 Canvas核心技术:图形.动画与游戏开发>中,畅销书作家David Geary(基瑞)先生以实用的范例程 ...
- HTML5 Canvas核心技术—图形、动画与游戏开发.pdf2
事件处理: HTML5应用程序是以事件来驱动的,可以在canvas中增加一个事件监听器,当事件发生时,浏览器就会调用这个监听器 //方法一canvas.onmousedown=function(e){ ...
- HTML5 Canvas核心技术—图形、动画与游戏开发.pdf8
第6章 精灵 精灵(sprite),它是一种可以集成入动画之中的图像对象,赋予它们各种行为,精灵并非Canvas API的一部分,,但都是从它衍生而来 本章将会实现三种设计模式:策略模式(精灵与绘制器 ...
- HTML5 Canvas核心技术—图形、动画与游戏开发.pdf7
性能 运行putImageData()比drawImage()慢,同等条件下优先考虑drawImage() 操作图像数据需要遍历大量数据,应该注意几点: 1)避免在循环体中直接访问对象属性,应当保存在 ...
- HTML5 Canvas核心技术—图形、动画与游戏开发.pdf1
canvas元素可以说是HTML5元素中功能最强大的一个,它真正的能力是通过Canvas的context对象(绘图上下文)表现出来的 fillText()方法使用fillStyle属性来填充文本中的字 ...
- HTML5 Canvas核心技术—图形、动画与游戏开发.pdf5
文本的定位 水平与垂直定位:当使用strokeText()和fillText()绘制文本时,指定了所绘文本的X与Y坐标,还有textAlign与textBaseline两个属性 textAlign:s ...
随机推荐
- System V 信号量
1 概述 计数信号量集semid_ds: struct semid_ds { struct ipc_perm sem_perm; struct sem *sem_base; //指向信号量结构数组 u ...
- C++ GUI Programming with Qt4 笔记 -- chap1
1. Hello Qt #include <QApplication> #include <QLabel> int main(int argc, char *argv[]){ ...
- java特殊运算符(转)
原码:符号位用0表示正号,用1表示负号,数值一般用二进制形式表示 反码:机器数的反码可由原码得到.如果机器数是正数,则该机器数的反码与原码一样:如果机器数是负数,则该机器数的反码是对它的原码(符号位除 ...
- Makefile隐含规则和用到的默认变量
如果要使用隐含规则生成你需要的目标,你所需要做的就是不要写出这个目标的规则.那么,make会试图去自动推导产生这个目标的规则和命令,如果make可以自动推导生成这个目标的规则和命令,那么这个行为就是隐 ...
- linux运维工程师,必须掌握以下几个工具
本人是linux运维工程师,对这方面有点心得,现在我说说要掌握哪方面的工具吧说到工具,在行外可以说是技能,在行内我们一般称为工具,就是运维必须要掌握的工具.我就大概列出这几方面,这样入门就基本没问题了 ...
- js微博发布框
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- wap开发笔记之幻灯片
最近在进行wap站研究,发现网上成熟的wap幻灯片都很难找到,在此贴出一个iphone的幻灯效果,希望对wap站开发的人有些帮助. 点此下载
- C#基础(二)——C#中的构造函数
构造函数主要是用来创建对象时为对象赋初值来初始化对象.总与new运算符一起使用在创建对象的语句中 .A a=new A(); 构造函数具有和类一样的名称:但它是一个函数具有函数的所有特性,同一个类里面 ...
- 浏览器中输入URL到返回页面的全过程
第一步,解析域名,找到主机IP (1)浏览器会缓存DNS一段时间,一般2-30分钟不等.如果有缓存,直接返回IP,否则下一步. (2)缓存中无法找到IP,浏览器会进行一个系统调用,查询hosts文件. ...
- yii2源码学习笔记(十二)
继续了解controller基类. /** * Runs a request specified in terms of a route.在路径中指定的请求. * The route can be e ...