<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.netindonesia.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">aris_feryanto</title><subtitle type="html" /><id>http://geeks.netindonesia.net/blogs/aris_feryanto/atom.aspx</id><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/aris_feryanto/default.aspx" /><link rel="self" type="application/atom+xml" href="http://geeks.netindonesia.net/blogs/aris_feryanto/atom.aspx" /><generator uri="http://communityserver.org" version="3.1.20917.1142">Community Server</generator><updated>2009-06-26T12:22:00Z</updated><entry><title>WPF Effect: Adding Parameter to Custom Effect</title><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/25/wpf-effect-adding-parameter-to-custom-effect.aspx" /><id>http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/25/wpf-effect-adding-parameter-to-custom-effect.aspx</id><published>2009-07-25T05:44:25Z</published><updated>2009-07-25T05:44:25Z</updated><content type="html">&lt;p&gt;Pada &lt;a href="http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/23/wpf-effect-creating-a-custom-effect.aspx"&gt;postingan sebelumnya&lt;/a&gt;, kita telah mengetahui bagaimana membuat sebuah GrayscaleEffect yang “menghilangkan” warna dari elemen UI. Dalam Effect ini kita tidak menggunakan parameter apapun (hanya &lt;font face="consolas"&gt;&amp;lt;fx:GrayscaleEffect /&amp;gt;&lt;/font&gt; saja). Kali ini saya akan mencoba menjelaskan sedikit, bagaimana menambahkan parameter untuk GrayscaleEffect. Kita akan menambahkan parameter GrayStrength yang mengatur seberapa banyak warna yang akan diubah menjadi grayscale. Dan dengan sedikit mengutak-atik, kita bahkan bisa membuat animasi UI yang perlahan-lahan berubah dari berwarna menjadi grayscale, sama seperti Windows XP ketika akan di-shutdown.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;KODE SHADER&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Dari program yang telah dibuat pada &lt;a href="http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/23/wpf-effect-creating-a-custom-effect.aspx"&gt;postingan sebelumnya&lt;/a&gt;, pertama-tama kita ubah kode Grayscale.fx menjadi seperti di bawah:&lt;/p&gt;  &lt;p&gt;&lt;font size="1"&gt;&lt;font face="Consolas"&gt;sampler2D implicitInput : register(s0);       &lt;br /&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;float grayStrength : register(c0); &lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Consolas"&gt;float4 main(float2 uv : TEXCOORD) : COLOR     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; float4 color = tex2D(implicitInput, uv.xy);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; float4 newcolor;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; newcolor = (color.r + color.g + color.b) * 0.33333333&lt;font color="#0000ff"&gt;&lt;strong&gt; * grayStrength&lt;/strong&gt;&lt;/font&gt;;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;&lt;strong&gt;newcolor.rgb += color.rgb * (1 - grayStrength);         &lt;br /&gt;&lt;/strong&gt;&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160; newcolor.a = color.a;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return newcolor;      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;kode shader di atas:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;menambahkan parameter grayStrength pada register “c0”&lt;/li&gt;    &lt;li&gt;mengalikan grayStrength sebagai intensitas warna grayscale, dan&lt;/li&gt;    &lt;li&gt;menambahkan komponen RGB dengan intensitas (1 – grayStrength)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;nilai grayStrength adalah bilangan desimal dari 0.0 sampai 1.0.&lt;/p&gt;  &lt;p&gt;Kemudian kompilasi lagi kode .fx ini dengan DirectX (fxc.exe) menjadi file .ps dengan cara yang sama seperti pada tutorial sebelumnya.&lt;/p&gt;  &lt;p&gt;NB: untuk lebih detail mengenai kode HLSL bisa dilihat di MSDN&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;PEMBUNGKUS EFFECT DALAM C#&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Untuk pembungkus dalam C#, kita cukup menambahkan property GrayStrength, property GrayStrengthProperty, dan kode UpdateShaderValue untuk GrayStrengthProperty dalam konstruktor GrayscaleEffect.&lt;/p&gt;  &lt;div style="padding-bottom:5px;padding-left:5px;width:523px;padding-right:5px;display:block;float:none;margin-left:auto;margin-right:auto;padding-top:5px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:4e3031fe-1d68-4e49-b1f1-a10e4220018d" class="wlWriterEditableSmartContent"&gt;
&lt;div style="border:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt;
&lt;div style="background:#ddd;max-height:300px;overflow:scroll;padding:0;"&gt;
&lt;ol style="background:#ffffff;margin:0 0 0 35px;white-space:nowrap;"&gt;
&lt;li&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System;&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Windows;&lt;/li&gt;&lt;li&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Windows.Media;&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Windows.Media.Effects;&lt;/li&gt;&lt;li&gt; &lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; &lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; GrayscaleEffect&lt;/li&gt;&lt;li&gt; {&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;GrayscaleEffect&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;ShaderEffect&lt;/span&gt;&lt;/li&gt;&lt;li&gt;     {&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; GrayscaleEffect()&lt;/li&gt;&lt;li&gt;         {&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;             PixelShader =&lt;/li&gt;&lt;li&gt;                 &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;PixelShader&lt;/span&gt;()&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;                 {&lt;/li&gt;&lt;li&gt;                     UriSource = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Uri&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;pack://application:,,,/GrayscaleEffect;component/Grayscale.ps&amp;quot;&lt;/span&gt;)&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;                 };&lt;/li&gt;&lt;li&gt;             UpdateShaderValue(InputProperty);&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;             UpdateShaderValue(GrayStrengthProperty);&lt;/li&gt;&lt;li&gt;         }&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; &lt;/li&gt;&lt;li&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Brush&lt;/span&gt; Input&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;         {&lt;/li&gt;&lt;li&gt;             &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;Brush&lt;/span&gt;)GetValue(InputProperty); }&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;             &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt; { SetValue(InputProperty, &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;); }&lt;/li&gt;&lt;li&gt;         }&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; &lt;/li&gt;&lt;li&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;double&lt;/span&gt; GrayStrength&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;         {&lt;/li&gt;&lt;li&gt;             &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;double&lt;/span&gt;)GetValue(GrayStrengthProperty); }&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;             &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt; { SetValue(GrayStrengthProperty, &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;); }&lt;/li&gt;&lt;li&gt;         }&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; &lt;/li&gt;&lt;li&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DependencyProperty&lt;/span&gt; InputProperty =&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;             &lt;span style="color:#2b91af;"&gt;ShaderEffect&lt;/span&gt;.RegisterPixelShaderSamplerProperty(&lt;span style="color:#a31515;"&gt;&amp;quot;Input&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;GrayscaleEffect&lt;/span&gt;), 0);&lt;/li&gt;&lt;li&gt; &lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DependencyProperty&lt;/span&gt; GrayStrengthProperty =&lt;/li&gt;&lt;li&gt;             &lt;span style="color:#2b91af;"&gt;DependencyProperty&lt;/span&gt;.Register(&lt;span style="color:#a31515;"&gt;&amp;quot;GrayStrength&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;double&lt;/span&gt;), &lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;GrayscaleEffect&lt;/span&gt;),&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;             &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;UIPropertyMetadata&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;double&lt;/span&gt;(), PixelShaderConstantCallback(0)));&lt;/li&gt;&lt;li&gt;     }&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; }&lt;/li&gt;&lt;li&gt; &lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;  &lt;p&gt;Pada kode di atas, assignment untuk GrayStrengthProperty cukup panjang. Dan terdapat kode seperti&lt;/p&gt;  &lt;div style="padding-bottom:5px;padding-left:5px;width:523px;padding-right:5px;display:block;float:none;margin-left:auto;margin-right:auto;padding-top:5px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:f699e3a8-9778-496f-bb8c-d6185db47786" class="wlWriterEditableSmartContent"&gt;
&lt;div style="border:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt;
&lt;div style="background:#fff;max-height:300px;overflow:scroll;padding:2px 5px;"&gt;
&lt;ol style="background:#ffffff;margin:0 0 0 0;white-space:nowrap;"&gt;
&lt;li&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;UIPropertyMetadata&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;double&lt;/span&gt;(), PixelShaderConstantCallback(0))&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;  &lt;p&gt;Ini digunakan untuk menyinkronkan penambahan parameter grayStrength pada kode shader Grayscale.fx yang ditempatkan pada (register “c&lt;strong&gt;0&lt;/strong&gt;” == PixelShaderConstantCallback(&lt;strong&gt;0&lt;/strong&gt;) ). Apabila terdapat lebih dari 1 parameter yang ditambahkan, maka bisa digunakan register c1, c2, dst…. Tentu saja dengan penambahan juga pada pembungkus C#.&lt;/p&gt;  &lt;p&gt;Setelah selesai menambahkan kode di atas, rebuild project Class Library GrayscaleEffect.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;KODE WPF APPLICATION&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Sekarang, apabila kita meng-apply GrayscaleEffect pada sebuah image dengan sintaks sebagai berikut:&lt;/p&gt;  &lt;div style="padding-bottom:5px;padding-left:5px;width:523px;padding-right:5px;display:block;float:none;margin-left:auto;margin-right:auto;padding-top:5px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:8b8715bd-5b0a-43e0-a138-312f6d8c6724" class="wlWriterEditableSmartContent"&gt;
&lt;div style="border:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt;
&lt;div style="background:#fff;max-height:300px;overflow:scroll;padding:2px 5px;"&gt;
&lt;ol style="background:#ffffff;margin:0 0 0 0;white-space:nowrap;"&gt;
&lt;li&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Image&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;12,12,66,100&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;image1&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Stretch&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Fill&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Source&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;nature.jpg&amp;quot;&amp;gt;&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Image.Effect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/li&gt;&lt;li&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;fx&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;GrayscaleEffect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; /&amp;gt;&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Image.Effect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/li&gt;&lt;li&gt; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Image&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;  &lt;p&gt;maka image akan terlihat berwarna, bukan grayscale. Hal ini terjadi karena kita belum mengeset parameter GrayStrength pada kode XAML. Apabila ditambahkan parameter GrayStrength pada XAML seperti di bawah,&lt;/p&gt;  &lt;div style="padding-bottom:5px;padding-left:5px;width:523px;padding-right:5px;display:block;float:none;margin-left:auto;margin-right:auto;padding-top:5px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:edf2ebd8-2d19-46a5-b71d-619b714a0fef" class="wlWriterEditableSmartContent"&gt;
&lt;div style="border:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt;
&lt;div style="background:#fff;max-height:300px;overflow:scroll;padding:2px 5px;"&gt;
&lt;ol style="background:#ffffff;margin:0 0 0 0;white-space:nowrap;"&gt;
&lt;li&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;fx&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;GrayscaleEffect&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; GrayStrength&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0.8&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;  &lt;p&gt;maka akan terlihat image berubah menjadi sedikit grayscale, namun masih sedikit berwarna.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/aris_feryanto/image_26A47EB1.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://geeks.netindonesia.net/blogs/aris_feryanto/image_thumb_3BA212F2.png" width="244" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;ANIMASI EFFECT&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Sekarang, bagian serunya. Kita akan membuat animasi image yang perlahan-lahan menjadi grayscale. &lt;/p&gt;  &lt;p&gt;Pertama-tama, ubah Effect pada kode XAML&lt;/p&gt;  &lt;div style="padding-bottom:5px;padding-left:5px;width:523px;padding-right:5px;display:block;float:none;margin-left:auto;margin-right:auto;padding-top:5px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a17ad4f0-b857-4993-b715-20b6a7fb26fb" class="wlWriterEditableSmartContent"&gt;
&lt;div style="border:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt;
&lt;div style="background:#fff;max-height:300px;overflow:scroll;padding:2px 5px;"&gt;
&lt;ol style="background:#ffffff;margin:0 0 0 0;white-space:nowrap;"&gt;
&lt;li&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;fx&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;GrayscaleEffect&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;gsfx&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;  &lt;p&gt;Lalu, tambahkan kode event handler untuk komponen Window pada UI untuk Event Window_Loaded seperti di bawah.&lt;/p&gt;  &lt;div style="padding-bottom:5px;padding-left:5px;width:523px;padding-right:5px;display:block;float:none;margin-left:auto;margin-right:auto;padding-top:5px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:1b21a6f7-4840-46b8-884f-a48f1ad6f65c" class="wlWriterEditableSmartContent"&gt;
&lt;div style="border:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt;
&lt;div style="background:#fff;max-height:300px;overflow:scroll;padding:2px 5px;"&gt;
&lt;ol style="background:#ffffff;margin:0 0 0 0;white-space:nowrap;"&gt;
&lt;li&gt; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Window_Loaded(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af;"&gt;RoutedEventArgs&lt;/span&gt; e)&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; {&lt;/li&gt;&lt;li&gt;     gsfx.BeginAnimation(GrayscaleEffect.&lt;span style="color:#2b91af;"&gt;GrayscaleEffect&lt;/span&gt;.GrayStrengthProperty,&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;         &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DoubleAnimation&lt;/span&gt;(0.0, 1.0, &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Duration&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;(0, 0, 3))));&lt;/li&gt;&lt;li&gt; }&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; &lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;  &lt;p&gt;Jalankan program dengan menekan F5, dan lihat image yang perlahan-lahan berubah menjadi grayscale dalam 3 detik ( TimeSpan(0,0,3) ). :D&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/25/wpf-effect-adding-parameter-to-custom-effect.aspx&amp;amp;subject=WPF Effect: Adding Parameter to Custom Effect" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/25/wpf-effect-adding-parameter-to-custom-effect.aspx&amp;amp;t=WPF+Effect%3a+Adding+Parameter+to+Custom+Effect" target="_blank" title="Submit WPF Effect: Adding Parameter to Custom Effect to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/25/wpf-effect-adding-parameter-to-custom-effect.aspx&amp;amp;title=WPF+Effect%3a+Adding+Parameter+to+Custom+Effect" target="_blank" title="Submit WPF Effect: Adding Parameter to Custom Effect to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/25/wpf-effect-adding-parameter-to-custom-effect.aspx&amp;amp;phase=2" target="_blank" title="Submit WPF Effect: Adding Parameter to Custom Effect to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/25/wpf-effect-adding-parameter-to-custom-effect.aspx&amp;amp;title=WPF+Effect%3a+Adding+Parameter+to+Custom+Effect" target="_blank" title="Add WPF Effect: Adding Parameter to Custom Effect to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=182780" width="1" height="1"&gt;</content><author><name>aris_feryanto</name><uri>http://geeks.netindonesia.net/members/aris_5F00_feryanto.aspx</uri></author><category term="MIC ITB" scheme="http://geeks.netindonesia.net/blogs/aris_feryanto/archive/tags/MIC+ITB/default.aspx" /><category term="WPF" scheme="http://geeks.netindonesia.net/blogs/aris_feryanto/archive/tags/WPF/default.aspx" /></entry><entry><title>WPF Effect: Creating A Custom Effect</title><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/23/wpf-effect-creating-a-custom-effect.aspx" /><id>http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/23/wpf-effect-creating-a-custom-effect.aspx</id><published>2009-07-23T10:59:18Z</published><updated>2009-07-23T10:59:18Z</updated><content type="html">&lt;p&gt;Beberapa tutorial berbahasa Inggris tentang WPF Effect yang saya lihat, tidak menampilkan bagaimana langkah-langkah yang cukup jelas untuk membuat Custom Effect. Akhirnya saya mencoba-coba mengutak-atik sana sini di Visual C# 2008 Express Edition saya dan berhasil membuat sebuah Effect yang sederhana. Di sini saya akan mencoba berbagi bagaimana caranya…&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Bersiap…&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Pertama-tama harus diinstall beberapa tool yang dibutuhkan untuk membuat Custom Effect, yaitu:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Microsoft Visual C# 2008 (Express Edition) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=24a541d6-0486-4453-8641-1eee9e21b282&amp;amp;displaylang=en"&gt;Microsoft DirectX SDK&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Selain itu, dibutuhkan pengetahuan membuat pixel shader dalam bahasa HLSL yang akan coba saya bahas sedikit nantinya (jika ada waktu :p).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Mulai…!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Custom Effect yang akan kita buat kali ini adalah Grayscale Effect.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/aris_feryanto/image_5683C8F8.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://geeks.netindonesia.net/blogs/aris_feryanto/image_thumb_34877F00.png" width="244" height="244" /&gt;&lt;/a&gt;&amp;#160; ==&amp;gt; &lt;a href="http://geeks.netindonesia.net/blogs/aris_feryanto/image_163975B2.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://geeks.netindonesia.net/blogs/aris_feryanto/image_thumb_634923A3.png" width="244" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;MEMBUAT SHADER&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Buka notepad (atau editor kesayangan Anda yang lain) &lt;/li&gt;    &lt;li&gt;Ketikkan kode program shader berikut:      &lt;br /&gt;&lt;font size="1" face="Consolas"&gt;       &lt;br /&gt;sampler2D implicitInput : register(s0); &lt;/font&gt;      &lt;p&gt;&lt;font size="1" face="Consolas"&gt;float4 main(float2 uv : TEXCOORD) : COLOR          &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; float4 color = tex2D(implicitInput, uv.xy);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; float4 newcolor;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; newcolor = (color.r + color.g + color.b) * 0.33333333;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; newcolor.a = color.a;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return newcolor;           &lt;br /&gt;}           &lt;br /&gt;          &lt;br /&gt;&lt;font size="2" face="tahoma"&gt;NB: kode program shader di atas bekerja untuk setiap pixel. newcolor di-set menjadi campuran warna rgb yang intensitasnya dibagi rata 1/3.            &lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;Simpan dengan nama file Grayscale.fx (ingat: gunakan encoding ANSI, jangan unicode, compiler shader dari DirectX hanya bisa mengkompilasi kode dengan encoding ANSI) &lt;/li&gt;    &lt;li&gt;Buka DirextX SDK Command Prompt, pindahkan CWD (Current Working Directory) ke tempat penyimpanan file .fx sebelumnya. &lt;/li&gt;    &lt;li&gt;Ketikkan      &lt;br /&gt;      &lt;br /&gt;&lt;font size="1"&gt;fxc /T ps_2_0 /E main /Fo Grayscale.ps Grayscale.fx        &lt;br /&gt;        &lt;br /&gt;&lt;font size="2"&gt;untuk mengkompilasi file .fx yang telah dibuat dan meng-output kan hasilnya ke Grayscale.ps.&lt;/font&gt;&lt;/font&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;MEMBUAT PEMBUNGKUS EFFECT DI C#&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Buat project baru di Visual C# 2008, File –&amp;gt; New Project, pilih template Class Library. Beri nama GrayscaleEffect. &lt;/li&gt;    &lt;li&gt;Rename dokumen Class1.cs menjadi GrayscaleEffect.cs. &lt;/li&gt;    &lt;li&gt;Tambahkan file .ps yang telah dikompilasi ke dalam project      &lt;br /&gt;&lt;a href="http://geeks.netindonesia.net/blogs/aris_feryanto/image_49DD2650.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://geeks.netindonesia.net/blogs/aris_feryanto/image_thumb_27C15265.png" width="244" height="225" /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Set Property “Build Action” pada file .ps yang telah ditambahkan menjadi Resource      &lt;br /&gt;&lt;a href="http://geeks.netindonesia.net/blogs/aris_feryanto/image_30415F57.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://geeks.netindonesia.net/blogs/aris_feryanto/image_thumb_455A3F5D.png" width="244" height="228" /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Tambahkan References “WindowsBase”, “PresentationCore”, dan “PresentationFramework”      &lt;br /&gt;&lt;a href="http://geeks.netindonesia.net/blogs/aris_feryanto/image_4FE7254B.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://geeks.netindonesia.net/blogs/aris_feryanto/image_thumb_01CEA009.png" width="244" height="144" /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;font size="2"&gt;Ketikkan kode berikut dalam file Grayscale.cs        &lt;br /&gt;&lt;/font&gt;      &lt;div style="padding-bottom:5px;padding-left:5px;width:483px;padding-right:5px;display:block;float:none;margin-left:auto;margin-right:auto;padding-top:5px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:79d7758d-9207-4157-90d9-69069d48a518" class="wlWriterEditableSmartContent"&gt;
&lt;div style="border:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt;
&lt;div style="background:#ddd;max-height:300px;overflow:scroll;padding:0;"&gt;
&lt;ol style="background:#ffffff;margin:0 0 0 35px;white-space:wrap;"&gt;
&lt;li&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System;&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Windows;&lt;/li&gt;&lt;li&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Windows.Media;&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Windows.Media.Effects;&lt;/li&gt;&lt;li&gt; &lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; &lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; GrayscaleEffect&lt;/li&gt;&lt;li&gt; {&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;GrayscaleEffect&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;ShaderEffect&lt;/span&gt;&lt;/li&gt;&lt;li&gt;     {&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; GrayscaleEffect()&lt;/li&gt;&lt;li&gt;         {&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;             PixelShader =&lt;/li&gt;&lt;li&gt;                 &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;PixelShader&lt;/span&gt;()&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;                 {&lt;/li&gt;&lt;li&gt;                     UriSource = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Uri&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;pack://application:,,,/GrayscaleEffect;component/Grayscale.ps&amp;quot;&lt;/span&gt;)&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;                 };&lt;/li&gt;&lt;li&gt;             UpdateShaderValue(InputProperty);&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;         }&lt;/li&gt;&lt;li&gt; &lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Brush&lt;/span&gt; Input&lt;/li&gt;&lt;li&gt;         {&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;             &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;Brush&lt;/span&gt;)GetValue(InputProperty); }&lt;/li&gt;&lt;li&gt;             &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt; { SetValue(InputProperty, &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;); }&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;         }&lt;/li&gt;&lt;li&gt; &lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DependencyProperty&lt;/span&gt; InputProperty =&lt;/li&gt;&lt;li&gt;             &lt;span style="color:#2b91af;"&gt;ShaderEffect&lt;/span&gt;.RegisterPixelShaderSamplerProperty(&lt;span style="color:#a31515;"&gt;&amp;quot;Input&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;GrayscaleEffect&lt;/span&gt;), 0);&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;     }&lt;/li&gt;&lt;li&gt; }&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; &lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;      &lt;br /&gt;Sedikit penjelasan: Kode di atas membuat kelas GrayscaleEffect yang merupakan turunan dari kelas ShaderEffect. Dalam konstruktornya, property PixelShader di-set dengan shader dari file .ps hasil kompilasi fxc sebelumnya. Property Input dan InputProperty (DependencyProperty-nya) dari kelas ini merupakan “penghubung” dengan implicitInput dalam kode program shader sebelumnya.       &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="2"&gt;Build project dengan menekan F6&lt;/font&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;MEMBUAT APLIKASI WPF YANG MENGGUNAKAN EFFECT YANG TELAH DIBUAT&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Tambahkan project baru ke dalam solution, Klik kanan solution –&amp;gt; Add –&amp;gt; New Project.      &lt;br /&gt;&lt;a href="http://geeks.netindonesia.net/blogs/aris_feryanto/image_2028BB25.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://geeks.netindonesia.net/blogs/aris_feryanto/image_thumb_7872192D.png" width="244" height="177" /&gt;&lt;/a&gt;       &lt;br /&gt;Karena project library GrayscaleEffect tadi belum disimpan, maka VS akan menanyakan tempat penyimpanan. Pilih directory yang diinginkan, simpan, dan lanjutkan membuat project baru. &lt;/li&gt;    &lt;li&gt;Pilih template WPF Application, beri nama GrayscaleTest. &lt;/li&gt;    &lt;li&gt;Tambahkan Reference GrayscaleEffect pada project, Klik kanan pada References GrayscaleTest –&amp;gt; Add Reference –&amp;gt; Tab Projects –&amp;gt; GrayscaleEffect –&amp;gt; OK &lt;/li&gt;    &lt;li&gt;Tambahkan namespace dalam kode XAML untuk library GrayscaleEffect yang telah dibuat.      &lt;div style="padding-bottom:5px;padding-left:5px;width:483px;padding-right:5px;display:block;float:none;margin-left:auto;margin-right:auto;padding-top:5px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:eab31400-a7f4-4116-95ed-6a9aa4a9e649" class="wlWriterEditableSmartContent"&gt;
&lt;div style="border:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt;
&lt;div style="background:#fff;max-height:300px;overflow:scroll;padding:2px 5px;"&gt;
&lt;ol style="background:#ffffff;margin:0 0 0 0;white-space:nowrap;"&gt;
&lt;li&gt; &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;fx&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;clr-namespace:GrayscaleEffect;assembly=GrayscaleEffect&amp;quot;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;Tambahkan sebuah image dari file gambar ke dalam Grid yang telah ada secara default. Kemudian tambahkan property Grid.Effect sebagai berikut:      &lt;div style="padding-bottom:5px;padding-left:5px;width:483px;padding-right:5px;display:block;float:none;margin-left:auto;margin-right:auto;padding-top:5px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:87a65419-7926-4719-8cc9-575aa3d5e7b8" class="wlWriterEditableSmartContent"&gt;
&lt;div style="border:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt;
&lt;div style="background:#fff;max-height:300px;overflow:scroll;padding:2px 5px;"&gt;
&lt;ol style="background:#ffffff;margin:0 0 0 0;white-space:wrap;"&gt;
&lt;li&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.Effect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;fx&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;GrayscaleEffect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; /&amp;gt;&lt;/li&gt;&lt;li&gt; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.Effect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;Kode XAML keseluruhannya akan mirip seperti berikut:      &lt;div style="padding-bottom:5px;padding-left:5px;width:483px;padding-right:5px;display:block;float:none;margin-left:auto;margin-right:auto;padding-top:5px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:8a85f314-5d02-42a6-9888-7e96e1d28945" class="wlWriterEditableSmartContent"&gt;
&lt;div style="border:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt;
&lt;div style="background:#ddd;max-height:300px;overflow:scroll;padding:0;"&gt;
&lt;ol style="background:#ffffff;margin:0 0 0 35px;white-space:nowrap;"&gt;
&lt;li&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;Class&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;GrayscaleTest.Window1&amp;quot;&lt;/span&gt;&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#ff0000;"&gt; xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;    &lt;span style="color:#ff0000;"&gt; xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#ff0000;"&gt; xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;fx&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;clr-namespace:GrayscaleEffect;assembly=GrayscaleEffect&amp;quot;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;    &lt;span style="color:#ff0000;"&gt; Title&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Window1&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;300&amp;quot;&amp;gt;&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/li&gt;&lt;li&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.Effect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;fx&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;GrayscaleEffect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; /&amp;gt;&lt;/li&gt;&lt;li&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.Effect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Image&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;12,12,66,100&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;image1&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Stretch&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Fill&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Source&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;nature.jpg&amp;quot; /&amp;gt;&lt;/li&gt;&lt;li&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/li&gt;&lt;li&gt; &lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;Set GrayscaleTest sebagai StartupProject      &lt;br /&gt;&lt;a href="http://geeks.netindonesia.net/blogs/aris_feryanto/image_54E54EFB.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://geeks.netindonesia.net/blogs/aris_feryanto/image_thumb_6EA95F5D.png" width="244" height="210" /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Jalankan dengan menekan tombol F5. Lihat Image berubah warna menjadi grayscale. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Demikian tutorial membuat GrayscaleEffect. Pada &lt;a href="http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/25/wpf-effect-adding-parameter-to-custom-effect.aspx"&gt;postingan selanjutnya&lt;/a&gt;, saya akan membahas bagaimana menganimasikan GrayscaleEffect ini menjadi seperti background Windows XP yang menjadi grayscale saat akan di shutdown.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/23/wpf-effect-creating-a-custom-effect.aspx&amp;amp;subject=WPF Effect: Creating A Custom Effect" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/23/wpf-effect-creating-a-custom-effect.aspx&amp;amp;t=WPF+Effect%3a+Creating+A+Custom+Effect" target="_blank" title="Submit WPF Effect: Creating A Custom Effect to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/23/wpf-effect-creating-a-custom-effect.aspx&amp;amp;title=WPF+Effect%3a+Creating+A+Custom+Effect" target="_blank" title="Submit WPF Effect: Creating A Custom Effect to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/23/wpf-effect-creating-a-custom-effect.aspx&amp;amp;phase=2" target="_blank" title="Submit WPF Effect: Creating A Custom Effect to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/23/wpf-effect-creating-a-custom-effect.aspx&amp;amp;title=WPF+Effect%3a+Creating+A+Custom+Effect" target="_blank" title="Add WPF Effect: Creating A Custom Effect to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=182722" width="1" height="1"&gt;</content><author><name>aris_feryanto</name><uri>http://geeks.netindonesia.net/members/aris_5F00_feryanto.aspx</uri></author><category term="MIC ITB" scheme="http://geeks.netindonesia.net/blogs/aris_feryanto/archive/tags/MIC+ITB/default.aspx" /><category term="WPF" scheme="http://geeks.netindonesia.net/blogs/aris_feryanto/archive/tags/WPF/default.aspx" /></entry><entry><title>WPF Effect: Introduction</title><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/22/wpf-effect-introduction.aspx" /><id>http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/22/wpf-effect-introduction.aspx</id><published>2009-07-22T10:20:00Z</published><updated>2009-07-22T10:20:00Z</updated><content type="html">&lt;p&gt;Tergolong sesuatu yang sudah cukup lama ada dalam WPF, tapi saya penasaran dan ingin mencoba mengutak-atik. Setelah menemukan beberapa referensi (di bawah), saya tertarik sekali untuk mencoba “GPU-accelerated custom effect”. ^^&lt;/p&gt;  &lt;p&gt;Dengan adanya .NET framework 3.5 SP1, banyak fitur dan peningkatan telah ditambahkan. Salah satunya untuk memperkaya user exprience dalam hal interface untuk WPF. GPU (Graphics Proccessing Unit) pada perangkat komputer telah semakin berkembang. Hal inilah yang menjadi faktor pendukung sehingga pada .NET framework 3.5 SP1 ini, WPF mendukung “GPU-accelerated effect” (untuk selanjutnya disebut “Effect”). Untuk fitur ini, WPF 3.5 SP1 hanya mendukung Pixel Shader versi 2.0 dan tidak ada dukungan untuk Vertex Shader.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Contoh Effect sederhana&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Contoh Effect yang sederhana dan telah built-in di dalam WPF adalah DropShadowEffect. Untuk membuat sebuah label seperti di bawah&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/aris_feryanto/image_6D66441B.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://geeks.netindonesia.net/blogs/aris_feryanto/image_thumb_39BDD7BD.png" width="244" height="77" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;menjadi seperti ini&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/aris_feryanto/image_10668FBF.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://geeks.netindonesia.net/blogs/aris_feryanto/image_thumb_5FF00B48.png" width="244" height="74" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;cukup dilakukan dengan menambahkan property Effect dari label dalam kode XAML seperti di bawah.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom:5px;padding-left:5px;width:523px;padding-right:5px;display:block;float:none;margin-left:auto;margin-right:auto;padding-top:5px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:dc178e5d-f95c-4b96-991a-962e67ceb3d3" class="wlWriterEditableSmartContent"&gt;
&lt;div style="border:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt;
&lt;div style="background:#fff;max-height:300px;overflow:scroll;padding:2px 5px;"&gt;
&lt;ol style="background:#ffffff;margin:0 0 0 0;white-space:wrap;"&gt;
&lt;li&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Label&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;66,93,92,141&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;label1&amp;quot;&amp;gt;&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Label.Effect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/li&gt;&lt;li&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DropShadowEffect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; /&amp;gt;&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Label.Effect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/li&gt;&lt;li&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;    Hello World...!!&lt;/li&gt;&lt;li style="background:#f3f3f3;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt; &lt;strong&gt;&lt;/strong&gt;  &lt;p&gt;Ini hanya satu contoh dari Effect yang sudah built-in. Developer bisa mengembangkan berbagai macam Effect sendiri. Beberapa developer telah membuat library berisi Effect yang umum digunakan di &lt;a title="CodePlex" href="http://www.codeplex.com/wpffx"&gt;http://www.codeplex.com/wpffx&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Apa bedanya dengan BitmapEffect?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Ketika WPF dirilis, awalnya terdapat sebuah kelas bernama BitmapEffect yang pada dasarnya sama seperti Effect. Hanya saja terdapat isu performansi untuk BitmapEffect. BitmapEffect menggunakan thread UI untuk memproses, sehingga akan timbul masalah saat efek yang digunakan cukup kompleks. Penggunaan CPU akan meningkat. Sedangkan Effect memanfaatkan kemampuan GPU untuk “mempercantik” UI program. Semua proses menggambarkan Effect, ditangani oleh GPU, sehingga tidak memberikan kerja “extra” bagi CPU.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Komponen apa saja yang bisa diberi Effect?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Ini salah satu hal yang menarik di WPF. Effect bisa diaplikasikan pada setiap komponen UI yang merupakan turunan dari UIElement (Grid, Panel, Button, Image, dll). Effect bekerja per pixel. Ketika sebuah Effect diaplikasikan pada UIElement, WPF me-rasterize UIElement pada ukuran tertentu menjadi bitmap, dan kemudian mengaplikasikan Effect untuk setiap pixel bitmap nya.&lt;/p&gt;  &lt;p&gt;Dengan memanfaatkan kemampuan pemrosesan GPU, aplikasi WPF bisa menggunakan Effect yang membuat:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Modifikasi warna &lt;/li&gt;    &lt;li&gt;Efek gerakan &lt;/li&gt;    &lt;li&gt;Efek yang menghasilkan pola-pola fraktal yang dihasilkan menggunakan algoritma &lt;/li&gt;    &lt;li&gt;Efek yang multiple-input &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Effect ditulis dalam bahasa HLSL (High Level Shading Language), dikompilasi dengan DirectX SDK (fxc.exe), kemudian dibungkus dengan kode C# (atau VB, dalam hal ini saya menggunakan C#), dan akhirnya siap digunakan dalam UI.&lt;/p&gt;  &lt;p&gt;Pada &lt;a href="http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/23/wpf-effect-creating-a-custom-effect.aspx"&gt;postingan berikutnya&lt;/a&gt;, saya akan mencoba menjelaskan step by step untuk membuat Custom Effect. Jika ada kekurangan, mohon kritik dan sarannya..&lt;/p&gt;  &lt;p&gt;Sumber:    &lt;br /&gt;&lt;a href="http://blogs.msdn.com/greg_schechter/archive/2008/05/09/a-series-on-gpu-based-effects-for-wpf.aspx"&gt;Greg Schechter&amp;#39;s Blog&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://geeks.netindonesia.net/files/folders/hol/entry84596.aspx"&gt;Membuat Shader Effect pada WPF by Wely&lt;/a&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/22/wpf-effect-introduction.aspx&amp;amp;subject=WPF Effect: Introduction" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/22/wpf-effect-introduction.aspx&amp;amp;t=WPF+Effect%3a+Introduction" target="_blank" title="Submit WPF Effect: Introduction to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/22/wpf-effect-introduction.aspx&amp;amp;title=WPF+Effect%3a+Introduction" target="_blank" title="Submit WPF Effect: Introduction to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/22/wpf-effect-introduction.aspx&amp;amp;phase=2" target="_blank" title="Submit WPF Effect: Introduction to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/22/wpf-effect-introduction.aspx&amp;amp;title=WPF+Effect%3a+Introduction" target="_blank" title="Add WPF Effect: Introduction to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=182690" width="1" height="1"&gt;</content><author><name>aris_feryanto</name><uri>http://geeks.netindonesia.net/members/aris_5F00_feryanto.aspx</uri></author><category term="MIC ITB" scheme="http://geeks.netindonesia.net/blogs/aris_feryanto/archive/tags/MIC+ITB/default.aspx" /><category term="WPF" scheme="http://geeks.netindonesia.net/blogs/aris_feryanto/archive/tags/WPF/default.aspx" /></entry><entry><title>Windows Live Writer – GREAT Tool for Blogging..!!</title><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/05/windows-live-writer-great-tool-for-blogging.aspx" /><id>http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/05/windows-live-writer-great-tool-for-blogging.aspx</id><published>2009-07-05T06:21:02Z</published><updated>2009-07-05T06:21:02Z</updated><content type="html">&lt;p&gt;Tadi pagi, isenk2 melihat-lihat postingan blog di geeks, saya tidak sengaja melihat postingan mengenai server geeks yang pernah down karena disk failure (para sesepuh yang uda lama pasti tau n salut buat tim Gulver atas dedikasinya ^^). Pas baca,&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“Semoga&lt;/em&gt; &lt;em&gt;para blogger baik di geeks maupun wss-id memanfaatkan fasilitas Windows Live Writer, sehingga masih memilki backup di hardisk masing-masing dan mohon untuk melakukan reposting.”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;saya langsung penasaran dengan Windows Live Writer.. Apa itu??&lt;/p&gt;  &lt;p&gt;Trus, lanjut baca2 lagi komen2 dari geeks yang lain, baca komen dari &lt;a href="http://geeks.netindonesia.net/blogs/jimmy"&gt;Jimmy Chandra&lt;/a&gt;,&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“Untung ngeblog pake Windows Live Writer, gua bisa recover semua post yang hilang, hehehe.&amp;#160; Tinggal direpublish aja :)”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Wah, makin penasaran buat nyobain Windows Live Writer.&lt;/p&gt;  &lt;p&gt;Langsung download Windows Live Writer di &lt;a title="http://download.live.com/writer" href="http://download.live.com/writer"&gt;http://download.live.com/writer&lt;/a&gt;. Setup pertama kali juga gampang, tinggal masukin URL blog ini, username, n password. Setting yang telah ada di blog juga diunduh ke dalam Writer (termasuk setting tampilan, themes), sehingga kita bisa melakukan editing dengan lingkungan yang sama seperti di blog (font, themes, lebar page, dll). Untuk melihat hasil editan, tersedia fasilitas preview. Kita juga bisa mengedit kode html dari post kita.&lt;/p&gt;  &lt;p&gt;Untuk publishing, cukup klik tombol Publish, dan kita bisa langsung melihat post yang baru saja kita lakukan. Jika ingin membuka postingan yang sudah ada juga bisa. Tinggal klik tombol Open, dan pilih blog yang ingin diedit postingannya.&lt;/p&gt;  &lt;p&gt;Keren deh Windows Live Writer…! ^^&lt;/p&gt;  &lt;p&gt;NB: Postingan ini dibuat n dipublish pake Writer. :)&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/05/windows-live-writer-great-tool-for-blogging.aspx&amp;amp;subject=Windows Live Writer – GREAT Tool for Blogging..!!" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/05/windows-live-writer-great-tool-for-blogging.aspx&amp;amp;t=Windows+Live+Writer+%e2%80%93+GREAT+Tool+for+Blogging..!!" target="_blank" title="Submit Windows Live Writer – GREAT Tool for Blogging..!! to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/05/windows-live-writer-great-tool-for-blogging.aspx&amp;amp;title=Windows+Live+Writer+%e2%80%93+GREAT+Tool+for+Blogging..!!" target="_blank" title="Submit Windows Live Writer – GREAT Tool for Blogging..!! to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/05/windows-live-writer-great-tool-for-blogging.aspx&amp;amp;phase=2" target="_blank" title="Submit Windows Live Writer – GREAT Tool for Blogging..!! to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/07/05/windows-live-writer-great-tool-for-blogging.aspx&amp;amp;title=Windows+Live+Writer+%e2%80%93+GREAT+Tool+for+Blogging..!!" target="_blank" title="Add Windows Live Writer – GREAT Tool for Blogging..!! to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=182299" width="1" height="1"&gt;</content><author><name>aris_feryanto</name><uri>http://geeks.netindonesia.net/members/aris_5F00_feryanto.aspx</uri></author><category term="Windows Tool" scheme="http://geeks.netindonesia.net/blogs/aris_feryanto/archive/tags/Windows+Tool/default.aspx" /></entry><entry><title>Membuat jam sederhana dengan WPF – Part 2 (DispatcherTimer untuk update UI)</title><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/06/27/membuat-jam-sederhana-dengan-wpf-part-2-dispatchertimer-untuk-update-ui.aspx" /><id>http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/06/27/membuat-jam-sederhana-dengan-wpf-part-2-dispatchertimer-untuk-update-ui.aspx</id><published>2009-06-27T08:17:00Z</published><updated>2009-06-27T08:17:00Z</updated><content type="html">&lt;p&gt;Dari tutorial bagian sebelumnya, kita tambahkan kode untuk update jarum jam dengan DispatcherTimer.&lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="" src="http://geeks.netindonesia.net/blogs/aris_feryanto/MIC_ITB/Clock/snapshot/MIC.clock.move.PNG" width="520" height="257" /&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;DispatcherTimer digunakan agar tidak perlu lagi menambahkan kode untuk menangani masalah UI yang memiliki thread tersendiri pada aplikasi WPF (apabila menggunakan Timer biasa). &lt;/p&gt;  &lt;p&gt;Pertama-tama tambahkan kode untuk inisialisasi sudut setiap jarum jam di konstruktor Window1 setelah inisialisasi komponen. Selanjutnya buat objek DispatcherTimer yang baru untuk mengupdate jarum jam setiap detiknya. Kita tambahkan EventHandler yang kita beri nama timer_Tick untuk event Tick. Dalam handler ini, kita update sudut dari setiap jarum jam.&lt;/p&gt;  &lt;p&gt;Demikian tutorial membuat jam pada part 2. Semoga bermanfaat...&lt;/p&gt;  &lt;p&gt;Pada bagian selanjutnya, kita akan menggerakkan jarum jam dengan menggunakan animasi.    &lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/06/27/membuat-jam-sederhana-dengan-wpf-part-2-dispatchertimer-untuk-update-ui.aspx&amp;amp;subject=Membuat jam sederhana dengan WPF – Part 2 (DispatcherTimer untuk update UI)" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/06/27/membuat-jam-sederhana-dengan-wpf-part-2-dispatchertimer-untuk-update-ui.aspx&amp;amp;t=Membuat+jam+sederhana+dengan+WPF+%e2%80%93+Part+2+(DispatcherTimer+untuk+update+UI)" target="_blank" title="Submit Membuat jam sederhana dengan WPF – Part 2 (DispatcherTimer untuk update UI) to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/06/27/membuat-jam-sederhana-dengan-wpf-part-2-dispatchertimer-untuk-update-ui.aspx&amp;amp;title=Membuat+jam+sederhana+dengan+WPF+%e2%80%93+Part+2+(DispatcherTimer+untuk+update+UI)" target="_blank" title="Submit Membuat jam sederhana dengan WPF – Part 2 (DispatcherTimer untuk update UI) to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/06/27/membuat-jam-sederhana-dengan-wpf-part-2-dispatchertimer-untuk-update-ui.aspx&amp;amp;phase=2" target="_blank" title="Submit Membuat jam sederhana dengan WPF – Part 2 (DispatcherTimer untuk update UI) to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/06/27/membuat-jam-sederhana-dengan-wpf-part-2-dispatchertimer-untuk-update-ui.aspx&amp;amp;title=Membuat+jam+sederhana+dengan+WPF+%e2%80%93+Part+2+(DispatcherTimer+untuk+update+UI)" target="_blank" title="Add Membuat jam sederhana dengan WPF – Part 2 (DispatcherTimer untuk update UI) to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=182019" width="1" height="1"&gt;</content><author><name>aris_feryanto</name><uri>http://geeks.netindonesia.net/members/aris_5F00_feryanto.aspx</uri></author><category term="MIC ITB" scheme="http://geeks.netindonesia.net/blogs/aris_feryanto/archive/tags/MIC+ITB/default.aspx" /><category term="WPF" scheme="http://geeks.netindonesia.net/blogs/aris_feryanto/archive/tags/WPF/default.aspx" /></entry><entry><title>Membuat jam sederhana dengan WPF – Part 1 (UI)</title><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/06/26/membuat-aplikasi-jam-sederhana-dengan-windows-presentation-foundation-wpf-part-1-ui.aspx" /><id>http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/06/26/membuat-aplikasi-jam-sederhana-dengan-windows-presentation-foundation-wpf-part-1-ui.aspx</id><published>2009-06-26T05:22:00Z</published><updated>2009-06-26T05:22:00Z</updated><content type="html">&lt;p&gt;&lt;img border="0" alt="" src="http://geeks.netindonesia.net/blogs/aris_feryanto/MIC_ITB/Clock/snapshot/MIC.clock.PNG" width="304" height="304" /&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;User Interface (UI) yang lebih baik. Itulah salah satu nilai lebih yang dimiliki WPF. Berikut ini merupakan tutorial membuat jam sederhana dengan WPF. Dalam tutorial ini akan dipelajari bagaimana membuat elemen UI secara visual (dengan drag n drop dari toolbox dan mengubah-ubah nilai property), melalui kode XAML, dan melalui kode C#.    &lt;br /&gt;Karena ditujukan untuk pemula WPF (karena saya juga masih pemula ), maka akan terdapat penjelasan langkah-langkah yang cukup detail.     &lt;br /&gt;Sedikit pengenalan WPF. Dalam WPF, UI dan kode merupakan dua bagian yang terpisah. UI secara umum dibangun di atas kode XAML (walaupun dapat juga melalui kode). Sedangkan kode merupakan file tersendiri tergantung bahasa yang digunakan. UI dan kode yang terpisah ini mengizinkan developer dan designer dapat bekerja secara paralel yang membuat waktu pengembangan aplikasi menjadi lebih singkat. XAML menggunakan format XML yang sekarang telah banyak digunakan. Dalam file XAML, terdapat tag-tag yang mendeskripsikan elemen UI aplikasi. Elemen yang dapat dideskripsikan dalam XAML cukup banyak, meliputi bentuk-bentuk sederhana (line, rectangle, ellipse, dll), komponen seperti dalam aplikasi windows berbasis form (textbox, button, label, dll), hingga Viewport3D untuk menampilkan objek 3 dimensi dalam UI.     &lt;br /&gt;Pertama-tama, buka Microsoft Visual C# (yang saya gunakan Microsoft Visual C# 2008 Express Edition). Buat project baru (Ctrl + Shift + N), pilih Template WPF Application, dan beri nama Clock.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img border="0" alt="" src="http://geeks.netindonesia.net/blogs/aris_feryanto/MIC_ITB/Clock/snapshot/MIC.clock.newproj.PNG" width="515" height="309" /&gt;&lt;/p&gt;  &lt;p&gt;Klik tombol OK. Akan terbentuk 2 tab baru, yaitu Window1.xaml (desain UI) dan Window1.xaml.cs (kode). Secara default, akan ditampilkan tab Window1.xaml. Klik kanan pada Window1 pada layar Design, pilih Properties, kemudian ganti Title menjadi Clock.&lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="" src="http://geeks.netindonesia.net/blogs/aris_feryanto/MIC_ITB/Clock/snapshot/MIC.clock.window.PNG" width="528" height="312" /&gt; &lt;/p&gt;  &lt;p&gt;Selanjutnya, ganti &amp;lt;Grid&amp;gt; dan &amp;lt;/Grid&amp;gt; pada layar XAML (bagian bawah) yang merupakan elemen default menjadi &amp;lt;Canvas&amp;gt; dan &amp;lt;/Canvas&amp;gt; karena kita hanya akan menggambar jam di dalamnya. Grid lebih diperuntukkan bila ingin menata elemen UI berdasarkan kolom dan baris.    &lt;br /&gt;Pilih Ellipse dari Toolbox di sebelah kiri, kemudian buat sembarang Ellipse dalam area Canvas. Ubah Canvas.Left = 40, Canvas.Top = 35, serta Height dan Width-nya menjadi 200. Dengan cara yang sama, buat sebuah Ellipse lagi dengan Canvas.Left = 35, Canvas.Top = 30, Height dan Width 210.     &lt;br /&gt;Selanjutnya kita akan mengedit UI melalui XAML. Kita akan menambahkan warna pada elemen-elemen yang telah dibuat. Tambahkan kode berikut ke bagian XAML.&lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="" src="http://geeks.netindonesia.net/blogs/aris_feryanto/MIC_ITB/Clock/snapshot/MIC.clock.xaml.PNG" width="504" height="252" /&gt; &lt;/p&gt;  &lt;p&gt;Dua buah Ellipse yang telah kita buat, merupakan background dan highlight untuk jam. Dengan mengatur property Ellipse.Fill, ellipse1 diisi dengan gradient yang linear dari warna #555555 (Red = 0x55, Green = 0x55, Blue = 0x55) ke warna #000000 (hitam). Sedangkan ellipse2 diisi dengan gradient radial untuk effek bayangan dalam jam dan bingkai jam berwarna putih.    &lt;br /&gt;Selanjutnya kita akan menambahkan jarum jam. Berikut kodenya:&lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="" src="http://geeks.netindonesia.net/blogs/aris_feryanto/MIC_ITB/Clock/snapshot/MIC.clock.hourhand.PNG" width="474" height="145" /&gt; &lt;/p&gt;  &lt;p&gt;Kode yang ditampilkan di sini hanya untuk membuat jarum penunjuk jam, karena untuk menit dan detik pada dasarnya sama. Di sini jarum jam dibangun dari Rectangle. Rectangle dipercantik dengan menambahkan RadiusX dan RadiusY (sudutnya tidak siku-siku) dan efek drop shadow. Untuk menempatkan jarum jam pada posisi di tengah-tengah jam, dilakukan transformasi. Ada 3 buah transformasi yang perlu dilakukan:    &lt;br /&gt;1.&amp;#160;&amp;#160;&amp;#160; Translasi untuk menempatkan sudut kiri atas Rectangle sebagai titik pusat rotasi jarum jam.     &lt;br /&gt;2.&amp;#160;&amp;#160;&amp;#160; Rotasi yang diberi nama “hour” (agar bisa diakses dari kode C#) untuk mengatur sudut putaran jarum jam (digunakan dalam tutorial part 2).     &lt;br /&gt;3.&amp;#160;&amp;#160;&amp;#160; Translasi untuk menempatkan pusat rotasi jarum jam di tengah-tengah bingkai jam (berdasarkan perhitungan).     &lt;br /&gt;Buat untuk menit dan detik dengan cara yang sama, lalu menyesuaikan ukuran dan property lainnya.     &lt;br /&gt;Selanjutnya kita akan menggambar penanda jam (penanda angka 1-12). Karena akan merepotkan apabila menggambar pada layar langsung (sulit mengatur posisi) dan mengedit kode XAML (kode terlalu panjang karena ada 60 elemen), maka kita akan menggambar UI melalui kode C#. Pertama-tama tambahkan elemen Canvas terlebih dahulu pada XAML seperti di bawah ini:&lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="" src="http://geeks.netindonesia.net/blogs/aris_feryanto/MIC_ITB/Clock/snapshot/MIC.clock.cvsMarker.PNG" width="207" height="25" /&gt; &lt;/p&gt;  &lt;p&gt;Kemudian tambahkan potongan kode berikut dalam kode C#. &lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="" src="http://geeks.netindonesia.net/blogs/aris_feryanto/MIC_ITB/Clock/snapshot/MIC.clock.csharp.PNG" width="502" height="313" /&gt; &lt;/p&gt;  &lt;p&gt;Dalam kode ini kita membuat lingkaran dengan ukuran yang lebih besar untuk penanda setiap 5 menitnya, mentransformasikan posisinya, dan menambahkannya untuk digambar dalam Canvas cvsMarker.    &lt;br /&gt;Untuk melihat hasilnya, jalankan dengan menekan F5.&lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="" src="http://geeks.netindonesia.net/blogs/aris_feryanto/MIC_ITB/Clock/snapshot/MIC.clock.part1.PNG" width="304" height="304" /&gt;&lt;/p&gt;  &lt;p&gt;Demikian tutorial membuat UI jam pada part 1. Semoga bermanfaat...    &lt;br /&gt;Pada bagian selanjutnya, kita akan menggerakkan jarum jam.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/06/26/membuat-aplikasi-jam-sederhana-dengan-windows-presentation-foundation-wpf-part-1-ui.aspx&amp;amp;subject=Membuat jam sederhana dengan WPF – Part 1 (UI)" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/06/26/membuat-aplikasi-jam-sederhana-dengan-windows-presentation-foundation-wpf-part-1-ui.aspx&amp;amp;t=Membuat+jam+sederhana+dengan+WPF+%e2%80%93+Part+1+(UI)" target="_blank" title="Submit Membuat jam sederhana dengan WPF – Part 1 (UI) to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/06/26/membuat-aplikasi-jam-sederhana-dengan-windows-presentation-foundation-wpf-part-1-ui.aspx&amp;amp;title=Membuat+jam+sederhana+dengan+WPF+%e2%80%93+Part+1+(UI)" target="_blank" title="Submit Membuat jam sederhana dengan WPF – Part 1 (UI) to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/06/26/membuat-aplikasi-jam-sederhana-dengan-windows-presentation-foundation-wpf-part-1-ui.aspx&amp;amp;phase=2" target="_blank" title="Submit Membuat jam sederhana dengan WPF – Part 1 (UI) to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/aris_feryanto/archive/2009/06/26/membuat-aplikasi-jam-sederhana-dengan-windows-presentation-foundation-wpf-part-1-ui.aspx&amp;amp;title=Membuat+jam+sederhana+dengan+WPF+%e2%80%93+Part+1+(UI)" target="_blank" title="Add Membuat jam sederhana dengan WPF – Part 1 (UI) to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=181978" width="1" height="1"&gt;</content><author><name>aris_feryanto</name><uri>http://geeks.netindonesia.net/members/aris_5F00_feryanto.aspx</uri></author><category term="MIC ITB" scheme="http://geeks.netindonesia.net/blogs/aris_feryanto/archive/tags/MIC+ITB/default.aspx" /><category term="WPF" scheme="http://geeks.netindonesia.net/blogs/aris_feryanto/archive/tags/WPF/default.aspx" /></entry></feed>