-
Notifications
You must be signed in to change notification settings - Fork 2
/
slicer.js
79 lines (77 loc) · 2.55 KB
/
slicer.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
var voldata;
function initvol(buffer,next){
// console.log(location);
let start=Date.now();
// var img=document.createElement("img");
// img.onload=function(){
// var canvas=document.createElement("canvas");
// canvas.width=img.width;
// canvas.height=img.height;
// var ctx=canvas.getContext("2d");
// ctx.drawImage(img,0,0);
// voldata=ctx.getImageData(0,0,canvas.width,canvas.height).data;
// next();
// };
// img.src=location;
// var xhr=new XMLHttpRequest();
// xhr.open("GET",location);
// xhr.responseType="arraybuffer";
// xhr.onload=function(){
let data=new Uint8Array(buffer);
console.log("Download",data.length,Date.now()-start);
data=inflate(data);
console.log("Deflate",data.length,Date.now()-start);
data=derle(data,atlas.encoding);
console.log("Decode",data.length,Date.now()-start);
voldata=data;
next();
// };
// xhr.send();
}
function dataslice(ouv){
var width=Math.round(Math.sqrt(ouv.ux*ouv.ux+ouv.uy*ouv.uy+ouv.uz*ouv.uz));
var height=Math.round(Math.sqrt(ouv.vx*ouv.vx+ouv.vy*ouv.vy+ouv.vz*ouv.vz));
var data=new Uint16Array(width*height);
var xdim=atlas.xdim;
var ydim=atlas.ydim;
var zdim=atlas.zdim;
var zslice=xdim*ydim;
var i=0;
for(var y=0;y<height;y++){
var hx=ouv.ox+ouv.vx*y/height;
var hy=ouv.oy+ouv.vy*y/height;
var hz=ouv.oz+ouv.vz*y/height;
for(var x=0;x<width;x++,i++){
var lx=Math.round(hx+ouv.ux*x/width);
var ly=Math.round(hy+ouv.uy*x/width);
var lz=Math.round(hz+ouv.uz*x/width);
if( (lx>=0) && (lx<xdim) && (ly>=0) && (ly<ydim) && (lz>=0) && (lz<zdim) )
data[i]=voldata[lx+ly*xdim+lz*zslice];
}
}
return {data:data,width:width,height:height};
}
function slice(ouv){
var data=dataslice(ouv);
var canvas=document.createElement("canvas");
var w=canvas.width=data.width;
var h=canvas.height=data.height;
var ctx=canvas.getContext("2d");
var slice=ctx.createImageData(w,h);
var slicedata=slice.data;
var d=data.data;
for(var i=0,j=0;i<d.length;i++){
var lbl=atlas.labels[d[i]];
slicedata[j++]=lbl.r;
slicedata[j++]=lbl.g;
slicedata[j++]=lbl.b;
slicedata[j++]=255;
}
ctx.putImageData(slice,0,0);
// return canvas;
var ret=document.createElement("canvas");
ret.width=128;
ret.height=128*h/w;
ret.getContext("2d").drawImage(canvas,0,0,ret.width,ret.height);
return ret;
}