<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Blog de Grégory GHEZ</title><link>http://blogs.labo-dotnet.com/gg00xiv/</link><description>Pour chaque [ingénieur logiciel] qui affirme : "Personne ne s'embêtera à faire çà", vous trouverez un gamin en Finlande qui s'embêtera à le faire.&amp;nbsp;&amp;nbsp;&lt;i&gt;- Alex Mayfield&lt;/i&gt;</description><managingEditor>Grégory Ghez</managingEditor><dc:language>fr-FR</dc:language><generator>.Text Version 0.95.2004.101</generator><item><dc:creator>Grégory Ghez</dc:creator><title>Changement d'adresse</title><link>http://blogs.labo-dotnet.com/gg00xiv/archive/2006/04/18/10561.aspx</link><pubDate>Tue, 18 Apr 2006 15:13:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/gg00xiv/archive/2006/04/18/10561.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/gg00xiv/comments/10561.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/gg00xiv/archive/2006/04/18/10561.aspx#Feedback</comments><slash:comments>19</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/gg00xiv/comments/commentRss/10561.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/gg00xiv/services/trackbacks/10561.aspx</trackback:ping><description>&lt;P&gt;Mon blog a desormais changer d'adresse :&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.gregoryghez.com/blog.aspx"&gt;http://www.gregoryghez.com/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;A bientot !&lt;/P&gt;&lt;img src ="http://blogs.labo-dotnet.com/gg00xiv/aggbug/10561.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Grégory Ghez</dc:creator><title>Présentation du format de fichier XML d'Excel</title><link>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/10/05/10334.aspx</link><pubDate>Wed, 05 Oct 2005 22:23:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/10/05/10334.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/gg00xiv/comments/10334.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/10/05/10334.aspx#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/gg00xiv/comments/commentRss/10334.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/gg00xiv/services/trackbacks/10334.aspx</trackback:ping><description>Je viens de terminer la r&amp;#233;daction d'un article sur ce sujet, disponible d&amp;#232;s &amp;#224; pr&amp;#233;sent sur le site du laboratoire .net &amp;#224; cette adresse : &lt;A href="http://www.labo-dotnet.com/Articles/Office/Spreadsheet%20ML%20et%20g&amp;#233;n&amp;#233;ration%20de%20fichier%20Excel/0/1547.aspx"&gt;http://www.labo-dotnet.com/Articles/Office/Spreadsheet%20ML%20et%20g&amp;#233;n&amp;#233;ration%20de%20fichier%20Excel/0/1547.aspx&lt;/A&gt;&lt;img src ="http://blogs.labo-dotnet.com/gg00xiv/aggbug/10334.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Grégory Ghez</dc:creator><title>Qui a dit que Visual Studio était une IDE gourmande ? :)</title><link>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/23/10326.aspx</link><pubDate>Fri, 23 Sep 2005 14:30:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/23/10326.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/gg00xiv/comments/10326.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/23/10326.aspx#Feedback</comments><slash:comments>21</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/gg00xiv/comments/commentRss/10326.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/gg00xiv/services/trackbacks/10326.aspx</trackback:ping><description>&lt;P&gt;&lt;IMG height=486 src="/gg00xiv/images/processes.JPG" width=502 border=0&gt;&lt;/P&gt;&lt;img src ="http://blogs.labo-dotnet.com/gg00xiv/aggbug/10326.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Grégory Ghez</dc:creator><title>Ajouter du style dans votre conversation GTalk</title><link>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/19/10315.aspx</link><pubDate>Mon, 19 Sep 2005 19:29:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/19/10315.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/gg00xiv/comments/10315.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/19/10315.aspx#Feedback</comments><slash:comments>112</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/gg00xiv/comments/commentRss/10315.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/gg00xiv/services/trackbacks/10315.aspx</trackback:ping><description>&lt;P&gt;Voici deux petites astuces qui vous permettront d'&amp;#233;crire en gras et italique des mots de votre conversation avec le client de messagerie de google.&lt;/P&gt;
&lt;P&gt;_mot_ : &lt;EM&gt;mot&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;*mot* : &lt;STRONG&gt;mot&lt;/STRONG&gt;&lt;/P&gt;&lt;img src ="http://blogs.labo-dotnet.com/gg00xiv/aggbug/10315.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Grégory Ghez</dc:creator><title>Télécharger uniquement quand ma connexion Internet est inactive !?</title><link>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/18/10310.aspx</link><pubDate>Sun, 18 Sep 2005 17:26:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/18/10310.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/gg00xiv/comments/10310.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/18/10310.aspx#Feedback</comments><slash:comments>20</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/gg00xiv/comments/commentRss/10310.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/gg00xiv/services/trackbacks/10310.aspx</trackback:ping><description>&lt;P&gt;On se demande comment et d'o&amp;#249; :)&lt;/P&gt;
&lt;P&gt;&lt;IMG height=200 src="/gg00xiv/images/adobe.jpg" width=511 border=0&gt;&lt;/P&gt;&lt;img src ="http://blogs.labo-dotnet.com/gg00xiv/aggbug/10310.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Grégory Ghez</dc:creator><title>HP adopte Linux sur ses portables professionnels</title><link>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/15/10304.aspx</link><pubDate>Thu, 15 Sep 2005 01:13:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/15/10304.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/gg00xiv/comments/10304.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/15/10304.aspx#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/gg00xiv/comments/commentRss/10304.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/gg00xiv/services/trackbacks/10304.aspx</trackback:ping><description>&lt;P&gt;Le constructeur se lance dans le syst&amp;#232;me open source pour une gamme de portables destin&amp;#233;s aux PME.&lt;BR&gt;La distribution de Linux utilis&amp;#233;e dans ces ordinateurs est la Mandriva Linux Discovery 10.1. HP a voulu offrir dans ces ordinateurs une version de Linux poss&amp;#233;dant un environnement de travail le plus abouti possible pour rivaliser avec Windows.&lt;/P&gt;
&lt;P&gt;Un Dual boot avec Windows XP Pro est propos&amp;#233; par d&amp;#233;faut au cas ou... ;)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Les d&amp;#233;tails de l'offre:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://h41087.www4.hp.com/solutions/administrations/hpeduc/linux/offre_nc6120.html"&gt;http://h41087.www4.hp.com/solutions/administrations/hpeduc/linux/offre_nc6120.html&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://blogs.labo-dotnet.com/gg00xiv/aggbug/10304.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Grégory Ghez</dc:creator><title>Les premières images d'Office 12</title><link>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/13/10285.aspx</link><pubDate>Tue, 13 Sep 2005 13:24:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/13/10285.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/gg00xiv/comments/10285.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/13/10285.aspx#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/gg00xiv/comments/commentRss/10285.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/gg00xiv/services/trackbacks/10285.aspx</trackback:ping><description>&lt;P&gt;Microsoft sort prochainement une nouvelle version de sa suite Office, la version 12 (La 11 correspondait &amp;#224; Office 2003).&lt;/P&gt;
&lt;P&gt;Voici un lien ou vous pourrez d&amp;#233;couvrir des captures d'&amp;#233;crans de ce nouvel opus:&lt;BR&gt;&lt;A href="http://pdc.xbetas.com/?page=o12preview1"&gt;http://pdc.xbetas.com/?page=o12preview1&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;La nouvelle barre d'outils Word:&lt;/P&gt;
&lt;P&gt;&lt;IMG height=142 src="/gg00xiv/images/word12-1.PNG" width=685 border=0&gt;&lt;/P&gt;&lt;img src ="http://blogs.labo-dotnet.com/gg00xiv/aggbug/10285.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Grégory Ghez</dc:creator><title>Manipuler le contenu d'une image en .NET</title><link>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/12/10279.aspx</link><pubDate>Mon, 12 Sep 2005 17:18:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/12/10279.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/gg00xiv/comments/10279.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/12/10279.aspx#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/gg00xiv/comments/commentRss/10279.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/gg00xiv/services/trackbacks/10279.aspx</trackback:ping><description>&lt;P&gt;Je sais d&amp;#233;j&amp;#224; que je vais me retrouver comme avec mon post sur le goto avec des 10aines de commentaires de d&amp;#233;fenseur des principes divins du .NET, mais &amp;#231;&amp;#224; m'est &amp;#233;gal, j'adore vous voir dans cet &amp;#233;tat :)&lt;/P&gt;
&lt;P&gt;Je me lance, dans ce post je vais vous montrer comment manipuler le contenu d'une image en .NET de la mani&amp;#232;re la plus rapide qu'il me semble faisable de faire: l'utilisation de code unsafe (pointeurs) mais toujours dans le but de gagner en performance et non d'obscurcir le code.&lt;BR&gt;&lt;BR&gt;En effet, il existe une m&amp;#233;thode de traitement dans la classe &lt;STRONG&gt;&lt;EM&gt;Bitmap&lt;/EM&gt;&lt;/STRONG&gt; qui permet de r&amp;#233;cup&amp;#233;rer les donn&amp;#233;es de l'image en m&amp;#233;moire. Il s'agit de la m&amp;#233;thode &lt;STRONG&gt;&lt;EM&gt;LockBits&lt;/EM&gt;&lt;/STRONG&gt; :&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;Rectangle bmpRect = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; Rectangle(0, 0, bmp.Width, bmp.Height); &lt;FONT color=#008000&gt;// bmp est de type Bitmap&lt;/FONT&gt;&lt;BR&gt;BitmapData bmpData = bmp.&lt;STRONG&gt;LockBits&lt;/STRONG&gt;(bmpRect, ImageLockMode.ReadOnly, bmp.PixelFormat);&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;L'objet &lt;STRONG&gt;&lt;EM&gt;BitmapData&lt;/EM&gt;&lt;/STRONG&gt; contient les donn&amp;#233;es internes de l'image et notament un pointeur vers le d&amp;#233;but des donn&amp;#233;es de l'image en m&amp;#233;moire. La propri&amp;#233;t&amp;#233; &lt;STRONG&gt;&lt;EM&gt;Scan0&lt;/EM&gt;&lt;/STRONG&gt; remplit ce r&amp;#244;le:&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;byte&lt;/FONT&gt;&lt;FONT size=2&gt;* data = (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;byte&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;*)bmpData.&lt;STRONG&gt;Scan0&lt;/STRONG&gt;;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;Inutile de pr&amp;#233;ciser qu'&amp;#224; partir de ce moment, nous passons en mode non manag&amp;#233; car nous faisons un acc&amp;#232;s direct &amp;#224; la m&amp;#233;moire via &lt;EM&gt;data&lt;/EM&gt;. C'est pourquoi la m&amp;#233;thode contenant ce code doit comporter le mot cl&amp;#233; &lt;STRONG&gt;&lt;EM&gt;unsafe&lt;/EM&gt;&lt;/STRONG&gt; (Le projet doit &amp;#233;galement &amp;#234;tre compil&amp;#233; avec l'attribut /unsafe afin d'accepter ce code, voir les propri&amp;#233;t&amp;#233;s du projet dans VS.NET).&lt;BR&gt;&lt;BR&gt;Nous avons donc acc&amp;#232;s &amp;#224; une zone m&amp;#233;moire lin&amp;#233;aire qu'il va falloir comprendre comme un tableau &amp;#224; deux dimensions contenant les pixels aux coordonn&amp;#233;es x,y de notre image. Voici comment est stock&amp;#233;e l'image en m&amp;#233;moire et la relation entre cette repr&amp;#233;sentation et les propri&amp;#233;t&amp;#233;s &lt;STRONG&gt;&lt;EM&gt;Stride&lt;/EM&gt;&lt;/STRONG&gt; et &lt;STRONG&gt;&lt;EM&gt;Scan0&lt;/EM&gt;&lt;/STRONG&gt;&amp;nbsp;de la classe &lt;STRONG&gt;&lt;EM&gt;BitmapData&lt;/EM&gt;&lt;/STRONG&gt;:&lt;/P&gt;
&lt;P&gt;&lt;IMG height=349 src="/gg00xiv/images/lockin1.gif" width=379 border=0&gt;&amp;nbsp;(source: &lt;A href="http://www.bobpowell.net/lockingbits.htm"&gt;http://www.bobpowell.net/lockingbits.htm&lt;/A&gt;)&lt;/P&gt;
&lt;P&gt;On utilisera donc le code suivant pour parcourir les pixels de notre image:&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; i = 0;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;for&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; x=0; x&amp;lt;bmp.Width; x++)&lt;BR&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; for&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; y=0; y&amp;lt;bmp.Height; y++)&lt;BR&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = y * bmpData.&lt;STRONG&gt;Stride&lt;/STRONG&gt; + x * 3;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#008000&gt;// manipulation du pixel ;)&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Il suffit donc d'indexer notre pointeur que l'on peut consid&amp;#233;rer comme un tableau afin d'obtenir les nuances rouge, vert et bleu (et alpha &amp;#233;ventuellement)&amp;nbsp;de notre pixel. Dans le cas pr&amp;#233;sent mon image est enregistr&amp;#233; en 24bpp donc les pixels se trouvent tous les &lt;EM&gt;x * 3&lt;/EM&gt; bytes.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;data[i+2] &lt;FONT color=#008000&gt;// rouge&lt;BR&gt;&lt;/FONT&gt;data[i+1] &lt;FONT color=#008000&gt;// vert&lt;BR&gt;&lt;/FONT&gt;data[i] &lt;FONT color=#008000&gt;// bleu&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Remarque&lt;/U&gt;: Lorsque vous cr&amp;#233;ez une image avec l'instruction &lt;STRONG&gt;&lt;EM&gt;new Bitmap(...)&lt;/EM&gt;&lt;/STRONG&gt; sans pr&amp;#233;ciser le param&amp;#232;tre &lt;STRONG&gt;&lt;EM&gt;PixelFormat&lt;/EM&gt;&lt;/STRONG&gt;, l'image est cr&amp;#233;&amp;#233;e en 32bpp et il faut donc utiliser &lt;EM&gt;x * 4&lt;/EM&gt; pour parcourir l'image dans la formule pr&amp;#233;c&amp;#233;dente pour &lt;EM&gt;i&lt;/EM&gt; (data[i+3] repr&amp;#233;sente alors la nuance alpha).&lt;BR&gt;Si vous souhaitez changer le contenu de data, cela est possible, il faut pr&amp;#233;ciser le param&amp;#232;tre &lt;STRONG&gt;&lt;EM&gt;ImageLockMode&lt;/EM&gt;&lt;/STRONG&gt; de &lt;STRONG&gt;&lt;EM&gt;LockBits&lt;/EM&gt;&lt;/STRONG&gt; &amp;#224; &lt;STRONG&gt;&lt;EM&gt;ImageLockMode.ReadWrite&lt;/EM&gt;&lt;/STRONG&gt; ou &lt;STRONG&gt;&lt;EM&gt;ImageLockMode.WriteOnly&lt;/EM&gt;&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;Une fois que vous avez fini votre traitement, n'oubliez surtout pas d'appeler la m&amp;#233;thode &lt;STRONG&gt;&lt;EM&gt;UnlockBits&lt;/EM&gt;&lt;/STRONG&gt; afin de permettre au Garbage Collector de disposer de cet espace m&amp;#233;moire &amp;#224; sa guise pour sa gestion.&lt;/P&gt;&lt;FONT face="Courier New" size=2&gt;
&lt;P&gt;bmp.&lt;STRONG&gt;UnlockBits&lt;/STRONG&gt;(bmpData);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Voici la mani&amp;#232;re la plus simple en code manag&amp;#233; pour parcourir une image:&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;for&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; x=0; x&amp;lt;bmp.Width; x++)&lt;BR&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; for&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; y=0; y&amp;lt;bmp.Height; y++)&lt;BR&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Color c = bmp.GetPixel(x, y);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#008000&gt;// code de manipulation&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Le probl&amp;#232;me avec cette m&amp;#233;thode se pose lorsque l'on doit manipuler des images de grande taille. On se trouve alors &amp;#224; effectuer &lt;EM&gt;bmp.Width * bmp.Height&lt;/EM&gt; appels &amp;#224; la m&amp;#233;thode &lt;STRONG&gt;&lt;EM&gt;GetPixel()&lt;/EM&gt;&lt;/STRONG&gt; ce qui ralentit consid&amp;#233;rablement l'&amp;#233;x&amp;#233;cution de la routine.&lt;/P&gt;
&lt;P&gt;Une autre m&amp;#233;thode&lt;EM&gt;&amp;nbsp;&lt;/EM&gt;encore consiste &amp;#224;&amp;nbsp;parcourir les&amp;nbsp;informations&amp;nbsp;accessibles par &lt;STRONG&gt;&lt;EM&gt;Scan0&lt;/EM&gt;&lt;/STRONG&gt;&amp;nbsp;via la m&amp;#233;thode &lt;STRONG&gt;&lt;EM&gt;System.Runtime.InteropServices.Marshal.ReadByte(bmpData.Scan0, i)&lt;/EM&gt;&lt;/STRONG&gt;. Mais vous voyez que le probl&amp;#232;me de &lt;STRONG&gt;&lt;EM&gt;GetPixel&lt;/EM&gt;&lt;/STRONG&gt; se retrouve ici car pour chaque nuance il va falloir faire appel &amp;#224; cette m&amp;#233;thode.&lt;/P&gt;
&lt;P&gt;N'h&amp;#233;sitez pas &amp;#224; me soumettre vos id&amp;#233;es sur le sujet.&lt;FONT size=2&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;img src ="http://blogs.labo-dotnet.com/gg00xiv/aggbug/10279.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Grégory Ghez</dc:creator><title>L'instruction goto en C#</title><link>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/11/10246.aspx</link><pubDate>Sun, 11 Sep 2005 02:37:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/11/10246.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/gg00xiv/comments/10246.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/11/10246.aspx#Feedback</comments><slash:comments>39</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/gg00xiv/comments/commentRss/10246.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/gg00xiv/services/trackbacks/10246.aspx</trackback:ping><description>&lt;P&gt;Il s'agit d'une instruction tr&amp;#232;s peu utilis&amp;#233;e mais qui peut s'av&amp;#233;rer fort utile dans certains cas.&lt;BR&gt;&lt;STRONG&gt;&lt;EM&gt;goto&lt;/EM&gt;&lt;/STRONG&gt; sert &amp;#224; faire saut non-conditionnel vers un label r&amp;#233;f&amp;#233;renc&amp;#233; autre part dans le code.&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Exemple:&lt;BR&gt;&lt;/U&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;[] tab = {"Bonjour", "les", "gens"};&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;foreach&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;in&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; tab)&lt;BR&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; foreach&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;char&lt;/FONT&gt;&lt;FONT size=2&gt; c &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;in&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; s)&lt;BR&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&amp;nbsp;(c == 'e')&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; Suite;&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;BR&gt;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;Suite:&lt;BR&gt;&amp;nbsp;&amp;nbsp; MessageBox.Show("Le caract&amp;#232;re 'e' a &amp;#233;t&amp;#233; trouv&amp;#233; dans une des cha&amp;#238;nes.");&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Dans cet exemple, on comprends bien l'int&amp;#233;r&amp;#234;t du &lt;STRONG&gt;&lt;EM&gt;goto&lt;/EM&gt;&lt;/STRONG&gt;, qui permet de passer directement &amp;#224; la suite du code si le test est concluant. Si nous n'avions pas utiliser le &lt;STRONG&gt;&lt;EM&gt;goto&lt;/EM&gt;&lt;/STRONG&gt;, on aurait eu la construction suivante:&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;[] tab = {"Bonjour", "les", "gens"};&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;bool&lt;/FONT&gt;&lt;FONT size=2&gt; present = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;false&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;foreach&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt; s &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;in&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; tab)&lt;BR&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; foreach&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;char&lt;/FONT&gt;&lt;FONT size=2&gt; c &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;in&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; s)&lt;BR&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; (c == 'e')&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; present = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; if&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; (present)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;;&lt;BR&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; (present)&lt;BR&gt;&amp;nbsp;&amp;nbsp; MessageBox.Show("Le caract&amp;#232;re 'e' a &amp;#233;t&amp;#233; trouv&amp;#233; dans une des cha&amp;#238;nes.");&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;On voit bien qu'au niveau de la lisibilit&amp;#233; et des performances, l'instruction &lt;STRONG&gt;&lt;EM&gt;goto&lt;/EM&gt;&lt;/STRONG&gt; l'emporte, en effet, vous&amp;nbsp;&amp;#233;vitez un saut non-conditionnel ainsi qu'un test conditionnel. Vous gagnez &amp;#233;galement quelques lignes de code, ce qui n'est pas pour d&amp;#233;plaire lorsque l'on traite avec des fichiers contenant plusieurs milliers de lignes.&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Remarques:&lt;/U&gt;&lt;BR&gt;Lorsque vous d&amp;#233;clarez un label (&lt;EM&gt;Suite&lt;/EM&gt; dans notre exemple), vous devez imp&amp;#233;rativement le faire suivre d'une instruction. En effet, s'il n'y avait pas d'instruction entre le label et la fin de notre m&amp;#233;thode, cela reviendrait &amp;#224; faire appel &amp;#224; l'instruction &lt;STRONG&gt;&lt;EM&gt;return&lt;/EM&gt;&lt;/STRONG&gt; directement.&lt;BR&gt;Vous ne pouvez pas non plus faire un saut non-conditionnel &lt;STRONG&gt;&lt;EM&gt;goto&lt;/EM&gt;&lt;/STRONG&gt; vers un endroit du code qui ne serait pas dans la port&amp;#233;e du code &amp;#233;x&amp;#233;cutant l'instruction &lt;STRONG&gt;&lt;EM&gt;goto&lt;/EM&gt;&lt;/STRONG&gt; (On ne peut pas faire un saut du dehors d'une boucle vers l'int&amp;#233;rieure de celle-ci par exemple).&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrfthegotostatement.asp"&gt;Lien MSDN&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://blogs.labo-dotnet.com/gg00xiv/aggbug/10246.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Grégory Ghez</dc:creator><title>Asynchronous JavaScript Technology and XML (AJAX)</title><link>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/09/10235.aspx</link><pubDate>Fri, 09 Sep 2005 14:53:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/09/10235.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/gg00xiv/comments/10235.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/gg00xiv/archive/2005/09/09/10235.aspx#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/gg00xiv/comments/commentRss/10235.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/gg00xiv/services/trackbacks/10235.aspx</trackback:ping><description>&lt;P&gt;Vous devez d&amp;#233;j&amp;#224; en avoir entendu parler un tout petit peu, il s'agit d'une m&amp;#233;thode de d&amp;#233;veloppement web permettant de rendre les int&amp;#233;ractions entre la page web (application web) et l'internaute plus fluides, comme s'il travaillait sur une application de bureau.&lt;/P&gt;
&lt;P&gt;AJAX permet en effet en rendre transparent &amp;#224; l'utilisateur le chargement des diff&amp;#233;rentes zones dynamiques de la page. Par exemple, supposez que l'on&amp;nbsp;est un listing de produits sur un site ecommerce et que l'utilisateur cliques sur la fiche d'un produit. Il n'est pas n&amp;#233;cessaire dans ce cas de figure de recharger tous les &amp;#233;l&amp;#233;ments d&amp;#233;coratifs et de navigation (tels que les menus) du site.&lt;BR&gt;Dans un site traditionnel, la page est recharg&amp;#233;e avec&amp;nbsp;un contenu central diff&amp;#233;rent.&amp;nbsp;Avec l'utilisation&amp;nbsp;de la m&amp;#233;thode AJAX, l'utilisateur ne voit que le contenu central qui change sans que la page ait eu besoin de se recharger.&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Explication&lt;/U&gt;:&lt;BR&gt;Lorsque l'utilisateur cliques sur le bouton pour afficher la fiche du produit, un code javascript s'&amp;#233;x&amp;#233;cute, ce dernier va r&amp;#233;cup&amp;#233;rer la fiche produit sur le serveur web puis remplacer le contenu du &lt;STRONG&gt;&lt;EM&gt;div&lt;/EM&gt;&lt;/STRONG&gt; central par le contenu de la fiche produit qu'il vient de r&amp;#233;cup&amp;#233;rer dans une variable.&lt;BR&gt;C'est donc le javascript qui va aller chercher la page &amp;#224; afficher.
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Gmail est un tr&amp;#232;s bon exemple de site utilisant AJAX. &lt;EM&gt;(Si vous poss&amp;#233;dez un compte pour tester bien s&amp;#251;r ;))&lt;/EM&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;C'est une description tr&amp;#232;s simplifi&amp;#233;e de ce que permet de faire AJAX et je vous invite &amp;#224; lire cet article technique du site de Sun : &lt;A href="http://java.sun.com/developer/technicalArticles/J2EE/AJAX/"&gt;http://java.sun.com/developer/technicalArticles/J2EE/AJAX/&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://blogs.labo-dotnet.com/gg00xiv/aggbug/10235.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>