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; |