Chromium Code Reviews| Index: ui/file_manager/gallery/js/image_editor/filter.js |
| diff --git a/ui/file_manager/gallery/js/image_editor/filter.js b/ui/file_manager/gallery/js/image_editor/filter.js |
| index a68fff846ab1fd2ef40eea0fb908892b1f1a923d..fdb71c062140d42ecbd6e2267a7492c1ecbbef5f 100644 |
| --- a/ui/file_manager/gallery/js/image_editor/filter.js |
| +++ b/ui/file_manager/gallery/js/image_editor/filter.js |
| @@ -26,30 +26,50 @@ filter.create = function(name, options) { |
| }; |
| /** |
| + * Ensures argument is canvas. If it's not, creates new canvas and copy. |
| + * |
| + * @param {!HTMLCanvasElement|!HTMLImageElement} imgOrCanvas |
| + * imageOrCanvas |
| + * @return {!HTMLCanvasElement} canvas. |
|
yawano
2016/01/20 06:23:09
nit: @private
ryoh
2016/01/21 03:19:55
Done.
|
| + */ |
| +filter.ensureCanvas_ = function(imgOrCanvas) { |
| + if(imgOrCanvas.tagName === 'canvas') { |
| + return assertInstanceof(imgOrCanvas, HTMLCanvasElement); |
| + } |
| + var canvas = assertInstanceof(document.createElement('canvas'), |
| + HTMLCanvasElement); |
| + canvas.width = imgOrCanvas.width; |
| + canvas.height = imgOrCanvas.height; |
| + var context = canvas.getContext('2d'); |
| + context.drawImage(imgOrCanvas, 0, 0); |
| + return canvas; |
| +}; |
| + |
| +/** |
| * Apply a filter to a image by splitting it into strips. |
| * |
| * To be used with large images to avoid freezing up the UI. |
| * |
| * @param {!HTMLCanvasElement} dstCanvas Destination canvas. |
| - * @param {!HTMLCanvasElement} srcCanvas Source canvas. |
| + * @param {!HTMLCanvasElement|!HTMLImageElement} srcImage Source image. |
| * @param {function(!ImageData,!ImageData,number,number)} filterFunc Filter. |
| * @param {function(number, number)} progressCallback Progress callback. |
| * @param {number=} opt_maxPixelsPerStrip Pixel number to process at once. |
| */ |
| filter.applyByStrips = function( |
| - dstCanvas, srcCanvas, filterFunc, progressCallback, opt_maxPixelsPerStrip) { |
| + dstCanvas, srcImage, filterFunc, progressCallback, opt_maxPixelsPerStrip) { |
| // 1 Mpix is a reasonable default. |
| var maxPixelsPerStrip = opt_maxPixelsPerStrip || 1000000; |
| var dstContext = dstCanvas.getContext('2d'); |
| - var srcContext = srcCanvas.getContext('2d'); |
| - var source = srcContext.getImageData(0, 0, srcCanvas.width, srcCanvas.height); |
| + var srcContext = filter.ensureCanvas_(srcImage).getContext('2d'); |
| + var source = srcContext.getImageData(0, 0, srcImage.width, srcImage.height); |
| - var stripCount = Math.ceil(srcCanvas.width * srcCanvas.height / |
| + var stripCount = Math.ceil(srcImage.width * srcImage.height / |
| maxPixelsPerStrip); |
| var strip = srcContext.getImageData(0, 0, |
| - srcCanvas.width, Math.ceil(srcCanvas.height / stripCount)); |
| + srcImage.width, Math.ceil(srcImage.height / stripCount)); |
| var offset = 0; |