Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(452)

Unified Diff: ui/file_manager/gallery/js/image_editor/filter.js

Issue 1608143002: support animated GIF (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698