<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog de Jérémie Bertrand &#187; PInvoke</title>
	<atom:link href="https://blog.developpez.com/laedit/pcategory/pinvoke/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/laedit</link>
	<description></description>
	<lastBuildDate>Tue, 22 Mar 2011 14:30:08 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Dessiner un PNG avec le Compact Framework</title>
		<link>https://blog.developpez.com/laedit/p9247/c/dessiner_un_png_avec_le_compact_framewor</link>
		<comments>https://blog.developpez.com/laedit/p9247/c/dessiner_un_png_avec_le_compact_framewor#comments</comments>
		<pubDate>Wed, 01 Sep 2010 13:09:25 +0000</pubDate>
		<dc:creator><![CDATA[laedit]]></dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[PInvoke]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Qui n&#8217;a jamais dû dessiner une image transparente avec le Compact Framework sur Windows Mobile ou pire Windows CE ? Le plus simple est d&#8217;utiliser une image PNG. Le problème étant que le Compact Framework ne prend pas en charge la transparence. Il faut donc utiliser les dlls de l&#8217;OS afin de remédier à ce petit problème. Après un petit tour sur le web,on trouve assez rapidement qu&#8217;il faut utiliser l&#8217;API Imaging. On peut également [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Qui n&rsquo;a jamais dû dessiner une image transparente avec le Compact Framework sur Windows Mobile ou pire Windows CE ?<br />
Le plus simple est d&rsquo;utiliser une image PNG. Le problème étant que le Compact Framework ne prend pas en charge la transparence.</p>
<p>Il faut donc utiliser les dlls de l&rsquo;OS afin de remédier à ce petit problème.</p>
<p><span id="more-11"></span></p>
<p>Après un petit tour sur le web,on trouve assez rapidement qu&rsquo;il faut utiliser l&rsquo;API Imaging. On peut également utiliser l&rsquo;API Alpha blend afin de rendre transparente une image qui ne l&rsquo;est pas, mais les possibilités ne sont pas aussi étendues qu&rsquo;avec une image PNG.</p>
<p>Une fois cette info en poche, un petit tour sur <a href="http://pinvoke.net/">PInvoke.net</a> nous apprend qu&rsquo;il faut utiliser un object COM nous permettant par la suite d&rsquo;avoir une interface IImage, représentant une image transparente, et une interface IImagingFactory, permettant de créer des objets de type IImage.<br />
L&rsquo;imprémentation en est très bien expliqué dans le post <a href="http://blogs.msdn.com/b/chrislorton/archive/2006/04/07/570649.aspx">Alphablending with NETCF</a> de Chris Lorton.</p>
<p>Une fois les diverses structures et interfaces en place, on lance le projet et tout marche, on a de la transparence !</p>
<p>Enfin, pas pour tous. Vous n&rsquo;êtes peut-être pas tombé dessus, mais en changeant les coordonnées du rectangle de destination d&rsquo;une IImage l&rsquo;exception ArgumentException avec le message très explicite &laquo;&nbsp;0x80070057&Prime; peut être levée.<br />
Une fois connue, la raison en est simple : le rectangle de destination ne fonctionne pas exactement de la même manière que dans les autres fonctions de dessin.<br />
Le rectangle est normalement composé de 4 entiers : X et Y représentent les coordonnées du point situé en haut à gauche de la zone à dessiner et Width et Height représentent la largeur et la hauteur de la zone à dessiner.</p>
<p>Mais dans le cas présent, si X et Y gardent la même fonction, c&rsquo;est Width et Height qui sont différents. En effet, ils ne correspondent pas à la largeur et la hauteur du rectangle dont le point en haut à gauche est situé à X,Y  mais à 0,0.</p>
<p>Il faut donc ajouter X à la largeur voulue et Y à la hauteur voulue : </p>
<p><code class="codecolorer text default"><span class="text">Rectangle(X, Y, X + Width, Y + Height)</span></code></p>
<p>Par exemple, j&rsquo;ai une image avec ce rectangle de destination: 0, 0, 50 ,50.</p>
<p>Si je souhaite la déplacer, j&rsquo;aurais donc ce rectangle de destination: 20, 30, 20 + 50, 30 + 50, afin de conserver les proportions de l&rsquo;image.</p>
<p><strong>Update :</strong><br />
Un petit plus afin de gagner du temps lors du dessin, pensez à utiliser la méthode SetImageFlags avec en paramètre ImageFlagsCaching de l&rsquo;objet IImage.<br />
Plus d&rsquo;informations <a href="http://e-consystems.com/blog/creating-an-effective-image-viewer-in-windows-ce/">ici</a> (attention, code non-managé).</p>
<p>Bonne chance avec vos projets Compact Framework !</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
