<div dir="ltr">Cool <div><br></div><div>Karl</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Apr 17, 2015 at 2:37 PM, <span dir="ltr"><<a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Tim Felgentreff uploaded a new version of Graphics to project The Trunk:<br>
<a href="http://source.squeak.org/trunk/Graphics-tfel.310.mcz" target="_blank">http://source.squeak.org/trunk/Graphics-tfel.310.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: Graphics-tfel.310<br>
Author: tfel<br>
Time: 17 April 2015, 2:37:38.42 pm<br>
UUID: dcfe87bc-46ca-c04e-b99b-5a711f8a8c9e<br>
Ancestors: Graphics-tk.309<br>
<br>
add convolution to forms and some common kernels for blurring, sharpening and so on<br>
<br>
=============== Diff against Graphics-tk.309 ===============<br>
<br>
Item was added:<br>
+ ----- Method: Form>>approxGaussianBlur (in category 'processing') -----<br>
+ approxGaussianBlur<br>
+<br>
+ ^ self processUsingKernel: (Matrix rows: 3 columns: 3 contents: #(<br>
+ 1 2 1<br>
+ 2 4 2<br>
+ 1 2 1<br>
+ ) * 0.0625)!<br>
<br>
Item was added:<br>
+ ----- Method: Form>>edgeDetect (in category 'processing') -----<br>
+ edgeDetect<br>
+<br>
+ ^ self processUsingKernel: (Matrix rows: 3 columns: 3 contents: #(<br>
+ -1 -1 -1<br>
+ -1 8 -1<br>
+ -1 -1 -1<br>
+ ))!<br>
<br>
Item was added:<br>
+ ----- Method: Form>>emboss (in category 'processing') -----<br>
+ emboss<br>
+<br>
+ ^ self processUsingKernel: (Matrix rows: 3 columns: 3 contents: #(<br>
+ -2 -1 0<br>
+ -1 1 1<br>
+ 0 1 2<br>
+ ))!<br>
<br>
Item was added:<br>
+ ----- Method: Form>>processUsingKernel: (in category 'processing') -----<br>
+ processUsingKernel: filter<br>
+<br>
+ ^ self processUsingKernel: filter factor: 1.0 bias: 0.0!<br>
<br>
Item was added:<br>
+ ----- Method: Form>>processUsingKernel:factor:bias: (in category 'processing') -----<br>
+ processUsingKernel: filter factor: factor bias: bias<br>
+ | image result |<br>
+<br>
+ image := self.<br>
+ result := Form extent: image extent depth: image depth.<br>
+<br>
+ 0 to: image height - 1 do: [:y |<br>
+ 0 to: image width - 1 do: [:x |<br>
+ | r g b |<br>
+ r := g := b := 0.0.<br>
+<br>
+ 0 to: filter rowCount - 1 do: [:filterY |<br>
+ 0 to: filter columnCount - 1 do: [:filterX |<br>
+ | imageX imageY |<br>
+ imageX := (x - (filter columnCount // 2) + filterX + image width) \\<br>
+ image width.<br>
+ imageY := (y - (filter rowCount // 2) + filterY + image height) \\<br>
+ image height.<br>
+ r := r + ((image colorAt: imageX@imageY) red *<br>
+ (filter at: filterY + 1 at: filterX + 1)).<br>
+ g := g + ((image colorAt: imageX@imageY) green *<br>
+ (filter at: filterY + 1 at: filterX + 1)).<br>
+ b := b + ((image colorAt: imageX@imageY) blue *<br>
+ (filter at: filterY + 1 at: filterX + 1))]].<br>
+<br>
+ result colorAt: x@y put: (Color<br>
+ r: ((factor * r + bias) min: 1.0 max: 0.0)<br>
+ g: ((factor * g + bias) min: 1.0 max: 0.0)<br>
+ b: ((factor * b + bias) min: 1.0 max: 0.0))]].<br>
+ ^ result<br>
+ !<br>
<br>
Item was added:<br>
+ ----- Method: Form>>sharpen (in category 'processing') -----<br>
+ sharpen<br>
+<br>
+ ^ self processUsingKernel: (Matrix rows: 3 columns: 3 contents: #(<br>
+ 0 -1 0<br>
+ -1 5 -1<br>
+ 0 -1 0<br>
+ ))!<br>
<br>
<br>
</blockquote></div><br></div>