Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 /* Flot plugin for plotting images. | |
| 2 | |
| 3 Copyright (c) 2007-2013 IOLA and Ole Laursen. | |
| 4 Licensed under the MIT license. | |
| 5 | |
| 6 The data syntax is [ [ image, x1, y1, x2, y2 ], ... ] where (x1, y1) and | |
| 7 (x2, y2) are where you intend the two opposite corners of the image to end up | |
| 8 in the plot. Image must be a fully loaded Javascript image (you can make one | |
| 9 with new Image()). If the image is not complete, it's skipped when plotting. | |
| 10 | |
| 11 There are two helpers included for retrieving images. The easiest work the way | |
| 12 that you put in URLs instead of images in the data, like this: | |
| 13 | |
| 14 [ "myimage.png", 0, 0, 10, 10 ] | |
| 15 | |
| 16 Then call $.plot.image.loadData( data, options, callback ) where data and | |
| 17 options are the same as you pass in to $.plot. This loads the images, replaces | |
| 18 the URLs in the data with the corresponding images and calls "callback" when | |
| 19 all images are loaded (or failed loading). In the callback, you can then call | |
| 20 $.plot with the data set. See the included example. | |
| 21 | |
| 22 A more low-level helper, $.plot.image.load(urls, callback) is also included. | |
| 23 Given a list of URLs, it calls callback with an object mapping from URL to | |
| 24 Image object when all images are loaded or have failed loading. | |
| 25 | |
| 26 The plugin supports these options: | |
| 27 | |
| 28 series: { | |
| 29 images: { | |
| 30 show: boolean | |
| 31 anchor: "corner" or "center" | |
| 32 alpha: [ 0, 1 ] | |
| 33 } | |
| 34 } | |
| 35 | |
| 36 They can be specified for a specific series: | |
| 37 | |
| 38 $.plot( $("#placeholder"), [{ | |
| 39 data: [ ... ], | |
| 40 images: { ... } | |
| 41 ]) | |
| 42 | |
| 43 Note that because the data format is different from usual data points, you | |
| 44 can't use images with anything else in a specific data series. | |
| 45 | |
| 46 Setting "anchor" to "center" causes the pixels in the image to be anchored at | |
| 47 the corner pixel centers inside of at the pixel corners, effectively letting | |
| 48 half a pixel stick out to each side in the plot. | |
| 49 | |
| 50 A possible future direction could be support for tiling for large images (like | |
| 51 Google Maps). | |
| 52 | |
| 53 */(function(e){function n(e,t,n){var r=e.getPlotOffset();if(!n.images||!n.images .show)return;var i=n.datapoints.points,s=n.datapoints.pointsize;for(var o=0;o<i. length;o+=s){var u=i[o],a=i[o+1],f=i[o+2],l=i[o+3],c=i[o+4],h=n.xaxis,p=n.yaxis, d;if(!u||u.width<=0||u.height<=0)continue;a>l&&(d=l,l=a,a=d),f>c&&(d=c,c=f,f=d), n.images.anchor=="center"&&(d=.5*(l-a)/(u.width-1),a-=d,l+=d,d=.5*(c-f)/(u.heigh t-1),f-=d,c+=d);if(a==l||f==c||a>=h.max||l<=h.min||f>=p.max||c<=p.min)continue;v ar v=0,m=0,g=u.width,y=u.height;a<h.min&&(v+=(g-v)*(h.min-a)/(l-a),a=h.min),l>h. max&&(g+=(g-v)*(h.max-l)/(l-a),l=h.max),f<p.min&&(y+=(m-y)*(p.min-f)/(c-f),f=p.m in),c>p.max&&(m+=(m-y)*(p.max-c)/(c-f),c=p.max),a=h.p2c(a),l=h.p2c(l),f=p.p2c(f) ,c=p.p2c(c),a>l&&(d=l,l=a,a=d),f>c&&(d=c,c=f,f=d),d=t.globalAlpha,t.globalAlpha* =n.images.alpha,t.drawImage(u,v,m,g-v,y-m,a+r.left,f+r.top,l-a,c-f),t.globalAlph a=d}}function r(e,t,n,r){if(!t.images.show)return;r.format=[{required:!0},{x:!0, number:!0,required:!0},{y:!0,number:!0,required:!0},{x:!0,number:!0,required:!0} ,{y:!0,number:!0,required:!0}]}function i(e){e.hooks.processRawData.push(r),e.ho oks.drawSeries.push(n)}var t={series:{images:{show:!1,alpha:1,anchor:"corner"}}} ;e.plot.image={},e.plot.image.loadDataImages=function(t,n,r){var i=[],s=[],o=n.s eries.images.show;e.each(t,function(t,n){if(!o&&!n.images.show)return;n.data&&(n =n.data),e.each(n,function(e,t){typeof t[0]=="string"&&(i.push(t[0]),s.push(t))} )}),e.plot.image.load(i,function(t){e.each(s,function(e,n){var r=n[0];t[r]&&(n[0 ]=t[r])}),r()})},e.plot.image.load=function(t,n){var r=t.length,i={};r==0&&n({}) ,e.each(t,function(t,s){var o=function(){--r,i[s]=this,r==0&&n(i)};e("<img />"). load(o).error(o).attr("src",s)})},e.plot.plugins.push({init:i,options:t,name:"im age",version:"1.1"})})(jQuery); | |
| OLD | NEW |