Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 93489db

Browse files
committed
image: scale up pixel manually in javascript
1 parent 58b0355 commit 93489db

File tree

2 files changed

+34
-14
lines changed

2 files changed

+34
-14
lines changed

src/traces/image/calc.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,6 @@ module.exports = function calc(gd, trace) {
2121
var h = trace.z.length;
2222
var w = trace.z[0].length;
2323

24-
// xa.makeCalcdata(trace, 'x');
25-
// ya.makeCalcdata(trace, 'y');
26-
2724
trace._extremes[xa._id] = Axes.findExtremes(xa, [x, x + w * trace.xscale]);
2825
trace._extremes[ya._id] = Axes.findExtremes(ya, [y, y - h * trace.yscale]);
2926

src/traces/image/plot.js

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ module.exports = function(gd, plotinfo, cdimage, imageLayer) {
2020
var cd0 = cd[0];
2121
var trace = cd0.trace;
2222

23+
var z = cd0.z;
24+
var tupleLength = trace.colormodel.length;
2325
var x = cd0.x;
2426
var y = cd0.y;
2527
var w = cd0.w;
@@ -34,16 +36,26 @@ module.exports = function(gd, plotinfo, cdimage, imageLayer) {
3436
var imageWidth = Math.round(right - left);
3537
var imageHeight = Math.round(top - bottom);
3638

39+
// Reduce image size when zoomed in to save memory
40+
var extra = 0.5; // half the axis size
41+
left = Math.max(-extra * xa._length, left);
42+
right = Math.min((1 + extra) * xa._length, right);
43+
top = Math.max(-extra * ya._length, top);
44+
bottom = Math.max((1 + extra) * ya._length, bottom);
45+
46+
imageWidth = Math.round(right - left);
47+
imageHeight = Math.round(bottom - top);
48+
3749
var canvas = document.createElement('canvas');
38-
var z = cd0.z;
39-
canvas.width = cd0.w;
40-
canvas.height = cd0.h;
50+
canvas.width = imageWidth;
51+
canvas.height = imageHeight;
4152
var context = canvas.getContext('2d');
42-
var tupleLength = trace.colormodel.length;
53+
var ipx = function(i) {return Lib.constrain(Math.round(xa.c2p(x + i * xscale) - left), 0, imageWidth);};
54+
var jpx = function(j) {return Lib.constrain(Math.round(ya.c2p(y - j * yscale) - top), 0, imageHeight);};
4355
for(var i = 0; i < cd0.w; i++) {
4456
for(var j = 0; j < cd0.h; j++) {
4557
context.fillStyle = trace.colormodel + '(' + z[j][i].slice(0, tupleLength).join(',') + ')';
46-
context.fillRect(i, j, 1, 1);
58+
context.fillRect(ipx(i), jpx(j), ipx(i + 1) - ipx(i), jpx(j + 1) - jpx(j));
4759
}
4860
}
4961

@@ -55,18 +67,29 @@ module.exports = function(gd, plotinfo, cdimage, imageLayer) {
5567
preserveAspectRatio: 'none'
5668
});
5769

70+
// var canvas = document.createElement('canvas');
71+
// canvas.width = cd0.w;
72+
// canvas.height = cd0.h;
73+
// var context = canvas.getContext('2d');
74+
// for(var i = 0; i < cd0.w; i++) {
75+
// for(var j = 0; j < cd0.h; j++) {
76+
// context.fillStyle = trace.colormodel + '(' + z[j][i].slice(0, tupleLength).join(',') + ')';
77+
// context.fillRect(i, j, 1, 1);
78+
// }
79+
// }
80+
//
81+
// TODO: support additional smoothing options
82+
// https://developer.mozilla.org/en-US/docs/Web/CSS/image-rendering
83+
// http://phrogz.net/tmp/canvas_image_zoom.html
84+
// image3
85+
// .attr('style', 'image-rendering: optimizeSpeed; image-rendering: -o-crisp-edges; image-rendering: -webkit-optimize-contrast; image-rendering: optimize-contrast; image-rendering: crisp-edges; image-rendering: pixelated;');
86+
5887
image3.attr({
5988
height: imageHeight,
6089
width: imageWidth,
6190
x: left,
6291
y: top,
6392
'xlink:href': canvas.toDataURL('image/png')
6493
});
65-
66-
// TODO: support additional smoothing options
67-
// https://developer.mozilla.org/en-US/docs/Web/CSS/image-rendering
68-
// http://phrogz.net/tmp/canvas_image_zoom.html
69-
image3
70-
.attr('style', 'image-rendering: optimizeSpeed; image-rendering: -o-crisp-edges; image-rendering: -webkit-optimize-contrast; image-rendering: optimize-contrast; image-rendering: crisp-edges; image-rendering: pixelated;');
7194
});
7295
};

0 commit comments

Comments
 (0)