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

Side by Side Diff: chrome/browser/resources/file_manager/js/image_editor/image_util.js

Issue 7552035: Adding simple filters to ChromeOS Image Editor. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments Created 9 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 5
6 // Namespace object for the utilities. 6 // Namespace object for the utilities.
7 function ImageUtil() {} 7 function ImageUtil() {}
8 8
9 // Performance trace. 9 // Performance trace.
10 ImageUtil.trace = (function() { 10 ImageUtil.trace = (function() {
(...skipping 30 matching lines...) Expand all
41 41
42 ImageUtil.clamp = function(min, value, max) { 42 ImageUtil.clamp = function(min, value, max) {
43 return Math.max(min, Math.min(max, value)); 43 return Math.max(min, Math.min(max, value));
44 }; 44 };
45 45
46 ImageUtil.between = function(min, value, max) { 46 ImageUtil.between = function(min, value, max) {
47 return (value - min) * (value - max) <= 0; 47 return (value - min) * (value - max) <= 0;
48 }; 48 };
49 49
50 /** 50 /**
51 * Computes the function for every integer value between 0 and max and stores
52 * the results. Rounds and clips the results to fit the [0..255] range.
53 * Used to speed up pixel manipulations.
54 * @param {Function} func Function returning a number.
55 * @param {Number} max Maximum argument value (inclusive).
56 * @return {Array<Number>} Computed results
57 */
58
59 ImageUtil.precomputeByteFunction = function(func, max) {
60 var results = [];
61 for (var arg = 0; arg <= max; arg ++) {
62 results.push(Math.max(0, Math.min(0xFF, Math.round(func(arg)))));
63 }
64 return results;
65 }
66
67 /**
68 * Rectangle class. 51 * Rectangle class.
69 */ 52 */
70 53
71 /** 54 /**
72 * Rectange constructor takes 0, 1, 2 or 4 arguments. 55 * Rectange constructor takes 0, 1, 2 or 4 arguments.
73 * Supports following variants: 56 * Supports following variants:
74 * new Rect(left, top, width, height) 57 * new Rect(left, top, width, height)
75 * new Rect(width, height) 58 * new Rect(width, height)
76 * new Rect(rect) // anything with left, top, width, height properties 59 * new Rect(rect) // anything with left, top, width, height properties
77 * new Rect(bounds) // anything with left, top, right, bottom properties 60 * new Rect(bounds) // anything with left, top, right, bottom properties
(...skipping 12 matching lines...) Expand all
90 73
91 case 2: 74 case 2:
92 this.left = 0; 75 this.left = 0;
93 this.top = 0; 76 this.top = 0;
94 this.width = arguments[0]; 77 this.width = arguments[0];
95 this.height = arguments[1]; 78 this.height = arguments[1];
96 return; 79 return;
97 80
98 case 1: { 81 case 1: {
99 var source = arguments[0]; 82 var source = arguments[0];
100 if (source.hasOwnProperty('left') && source.hasOwnProperty('top')) { 83 if ('left' in source && 'top' in source) {
101 this.left = source.left; 84 this.left = source.left;
102 this.top = source.top; 85 this.top = source.top;
103 if (source.hasOwnProperty('right') && source.hasOwnProperty('bottom')) { 86 if ('right' in source && 'bottom' in source) {
104 this.width = source.right - source.left; 87 this.width = source.right - source.left;
105 this.height = source.bottom - source.top; 88 this.height = source.bottom - source.top;
106 return; 89 return;
107 } 90 }
108 } else { 91 } else {
109 this.left = 0; 92 this.left = 0;
110 this.top = 0; 93 this.top = 0;
111 } 94 }
112 if (source.hasOwnProperty('width') && source.hasOwnProperty('height')) { 95 if ('width' in source && 'height' in source) {
113 this.width = source.width; 96 this.width = source.width;
114 this.height = source.height; 97 this.height = source.height;
115 return; 98 return;
116 } 99 }
117 break; // Fall through to the error message. 100 break; // Fall through to the error message.
118 } 101 }
119 102
120 case 0: 103 case 0:
121 this.left = 0; 104 this.left = 0;
122 this.top = 0; 105 this.top = 0;
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 } 180 }
198 181
199 return rect; 182 return rect;
200 }; 183 };
201 184
202 /* 185 /*
203 * Useful shortcuts for drawing (static functions). 186 * Useful shortcuts for drawing (static functions).
204 */ 187 */
205 188
206 /** 189 /**
207 * Draws the image in context with appropriate scaling. 190 * Draw the image in context with appropriate scaling.
208 */ 191 */
209 Rect.drawImage = function(context, image, opt_dstRect, opt_srcRect) { 192 Rect.drawImage = function(context, image, opt_dstRect, opt_srcRect) {
210 opt_dstRect = opt_dstRect || new Rect(context.canvas); 193 opt_dstRect = opt_dstRect || new Rect(context.canvas);
211 opt_srcRect = opt_srcRect || new Rect(image); 194 opt_srcRect = opt_srcRect || new Rect(image);
212 context.drawImage(image, 195 context.drawImage(image,
213 opt_srcRect.left, opt_srcRect.top, opt_srcRect.width, opt_srcRect.height, 196 opt_srcRect.left, opt_srcRect.top, opt_srcRect.width, opt_srcRect.height,
214 opt_dstRect.left, opt_dstRect.top, opt_dstRect.width, opt_dstRect.height); 197 opt_dstRect.left, opt_dstRect.top, opt_dstRect.width, opt_dstRect.height);
215 }; 198 };
216 199
217 /** 200 /**
218 * Strokes the rectangle. 201 * Draw a box around the rectangle.
219 */ 202 */
220 Rect.stroke = function(context, rect) { 203 Rect.outline = function(context, rect) {
221 context.strokeRect(rect.left, rect.top, rect.width, rect.height); 204 context.strokeRect(
205 rect.left - 0.5, rect.top - 0.5, rect.width + 1, rect.height + 1);
222 }; 206 };
223 207
224 /** 208 /**
209 * Fill the rectangle.
210 */
211 Rect.fill = function(context, rect) {
212 context.fillRect(rect.left, rect.top, rect.width, rect.height);
213 };
214
215 /**
225 * Fills the space between the two rectangles. 216 * Fills the space between the two rectangles.
226 */ 217 */
227 Rect.fillBetween= function(context, inner, outer) { 218 Rect.fillBetween= function(context, inner, outer) {
228 var inner_right = inner.left + inner.width; 219 var inner_right = inner.left + inner.width;
229 var inner_bottom = inner.top + inner.height; 220 var inner_bottom = inner.top + inner.height;
230 var outer_right = outer.left + outer.width; 221 var outer_right = outer.left + outer.width;
231 var outer_bottom = outer.top + outer.height; 222 var outer_bottom = outer.top + outer.height;
232 if (inner.top > outer.top) { 223 if (inner.top > outer.top) {
233 context.fillRect( 224 context.fillRect(
234 outer.left, outer.top, outer.width, inner.top - outer.top); 225 outer.left, outer.top, outer.width, inner.top - outer.top);
(...skipping 20 matching lines...) Expand all
255 this.x = x; 246 this.x = x;
256 this.y = y; 247 this.y = y;
257 this.squaredR = R * R; 248 this.squaredR = R * R;
258 } 249 }
259 250
260 Circle.prototype.inside = function(x, y) { 251 Circle.prototype.inside = function(x, y) {
261 x -= this.x; 252 x -= this.x;
262 y -= this.y; 253 y -= this.y;
263 return x * x + y * y <= this.squaredR; 254 return x * x + y * y <= this.squaredR;
264 }; 255 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698