[Canvas绘图] 第11节 四大美人

本节目标:
(1) 用Canvas加载并显示图片
(2) 实现获取轮廓点


实现步骤:

代码如下:

/**
* @usage   图片加载处理例
* @author  mw
* @date    2015年12月03日  星期四  07:50:42 
* @param
* @return
*
*/
	function myplot() {		
		plot.init();
		setPreference();
		
		//图片
		var image = new Image();
		image.src = "./1.jpg";
		//只处理这100*100个象素
		var width = 200;
		var height = 300;
		//结果
		var retArray = new Array();
		var pointInfo = "[";
		
		image.onload = function() {
			plot.drawImage(image);
			var imagedata = plot.getImageData(0, 0, width, height);
			
			
			var pos = 0;
			var R0 = 0;
			var R1 = 0;
			var G0 = 0;
			var G1 = 0;
			var B0 = 0;
			var B1 = 0;
			var gap = 40;
			
			
			//水平方向找差异
			for (var row = 0; row < height; row++) {
				for (var col = 1; col < width; col++) {
					//pos最小为1
					pos =row * width  + col;
						R0 = imagedata.data[4 * (pos-1)];				
						R1 = imagedata.data[4 * pos];
						G0 = imagedata.data[4 * (pos-1)+1];
						G1 = imagedata.data[4 * pos+1];
						B0 = imagedata.data[4 * (pos-1)+2]
						B1 = imagedata.data[4 * pos + 2]
					
					//简单容差判断
					if (Math.abs(R1-R0) > gap || 
							Math.abs(G1-G0)>gap || 
							Math.abs(B1-B0)>gap) {
						retArray.push(col);
						retArray.push(row);
						
						//记录坐标,打印信息
						pointInfo += "["+col.toString()+", "+row.toString()+"], ";
					}
				}
			}
			
			
			//垂直方向找差异
			for (var col = 0; col < width; col++) {
				for (var row = 1; row < height; row++) {
					//pos最小为第二行
					pos =row * width  + col;
						R0 = imagedata.data[4 * (pos-width)];				
						R1 = imagedata.data[4 * pos];
						G0 = imagedata.data[4 * (pos-width)+1];
						G1 = imagedata.data[4 * pos+1];
						B0 = imagedata.data[4 * (pos-width)+2];
						B1 = imagedata.data[4 * pos + 2];
					
					//简单容差判断
					if (Math.abs(R1-R0) > gap || 
							Math.abs(G1-G0)>gap || 
							Math.abs(B1-B0)>gap) {
						retArray.push(col);
						retArray.push(row);
						
						//记录坐标,打印信息
						pointInfo += "["+col.toString()+", "+row.toString()+"], ";
					}
				}
			}		
			
			plot.translate(200, 0);

			
			while (retArray.length  > 4) {
				fillCircle(retArray.shift()*1.5, retArray.shift()*1.5, 1);
				
			}
						
			pointInfo += "]";
			var pointInfoNode = document.createTextNode(pointInfo);
			document.body.appendChild(pointInfoNode);
			
	}	
}
我选择了几张彩图进行了试验,结果如下:


接着试


接着试


接着试


效果都很勉强,不过这只是最初步的处理。

本节就到这里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值