<?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>Handnotes &#187; AS3</title>
	<atom:link href="http://memmie.lenglet.name/category/flash/as3/feed" rel="self" type="application/rss+xml" />
	<link>http://memmie.lenglet.name</link>
	<description>Some tests, tricks and sugar</description>
	<lastBuildDate>Sat, 03 Oct 2009 14:49:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Font streaming</title>
		<link>http://memmie.lenglet.name/flash/actionscript/font-streaming</link>
		<comments>http://memmie.lenglet.name/flash/actionscript/font-streaming#comments</comments>
		<pubDate>Sun, 19 Jul 2009 01:32:26 +0000</pubDate>
		<dc:creator>Mem's</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Typography]]></category>
		<category><![CDATA[fstream]]></category>

		<guid isPermaLink="false">http://memmie.lenglet.name/?p=64</guid>
		<description><![CDATA[Update: Now the project is on google code A promise is a promise Now you can download sources of my library handling progressive download of fonts for Flash. I clean up all to separate different works. 1. Waterfall demo Main demo proof of concept. Demonstrate the system with non embed fonts where chars are loaded [...]]]></description>
			<content:encoded><![CDATA[<p><ins>Update: Now the project is on <a href="http://code.google.com/p/fstream/">google code</a></ins></p>
<p>A promise is a promise <img src='http://memmie.lenglet.name/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Now you can download sources of my library handling progressive download of fonts for Flash.</p>
<p>I clean up all to separate different works.</p>
<h3>1. Waterfall demo</h3>
<p><a href="http://memmie.lenglet.name/documents/lab/fontstream/waterfall_demo.html"><img src="http://memmie.lenglet.name/wp-content/uploads/2009/07/fontstream.png" alt="Font stream waterfall demo" title="Font stream waterfall demo" /></a></p>
<p>Main demo proof of concept. Demonstrate the system with non embed fonts where chars are loaded when them entered. Also give an example to the usage with Flex on custom components (through <code>Text.fontContext</code>)</p>
<h3>2. Font cache generator</h3>
<p>An AS3 Command line executable (made with <a href="http://code.google.com/p/redtamarin/">redtamarin</a>) allow quickly generate fonts cache. A binary file format used to serve fast small amount of font data (optionaly a format used to storage data).</p>
<p>Use it to add more supported fonts for build in test (Waterfall demo). For generate font cache files simply use console: <code>fcgen embed_fonts.swf</code> (or use <code>--help</code> for display help), put generated files (by default <code>*.foncache</code>) in fontcache folder and update <code>fontlist.xml</code></p>
<p>This contains also 2 others version, an old version in AS3/SWF by passing the SWF file by clicking on stage first and save the result by click second, and an not working flex alternative (read only some information about the SWF file passing through the button &#8220;open&#8221;).</p>
<h3>3. SWF template base</h3>
<p>Not realy important but used for generated the template used in library for generate dynamically SWF file contain fonts data.</p>
<p>Here miss an other part used to modify the SWF template for keep only needed informations (remove debug, metadata &#8230;)</p>
<p>And finally an example to embed font with Flex SDK.</p>
<h3>Notice</h3>
<p>I&#8217;m currently work on a big multilingual project which use it. But the server get in trouble (we suppose) with PHP when handling huge file like for Arial Unicode MS for <abbr title="Chinese Japanese and Korean">CJK</abbr> texts. We use a (temporary ?) solution by caching requested files and serve again for same requests. This not include in sources.</p>
<p>Beyond, is hard to get styles applied on HTML text. This for what, I had create a class handling HTML text and parsing it to know used text/fonts, improve HTML support by TextField (by some hack and HTML transformations). Is not yet include in souces.</p>
<ul>
<li>Can have memory impact or CPU time when intensive usage for large range of chars (need be more tested)</li>
<li>Not all font information supported, but maybe no real impact (Small text ? and language code ? )</li>
<li><strong>Server performance</strong> (PHP parsing and generating are time consumer) (need enhance by optimizing the script or use an other language like C/C++ or use a DB for stocking gyphs data instead a unique file)</li>
<li>Only TextField can use it, not supported by new Flash 10 TextEngine, it use an other way to embed font (CFF Fonts) (need support DefineFont4 tag)</li>
<li>The font embedded by Flash are cleaner than Flex SDK, but Flash CS3 allow generate fake italic and bold whereas Flash CS4 allow used real font styles (Light, Condensed, Heavy &#8230;)</li>
</ul>
<p>No licence explicitly declared but sure i think as GPL, no AS3 package, more examples, SVN, dedicated page, real name, logo &#8230; this will come.</p>
<p><del><a href="http://memmie.lenglet.name/documents/lab/fontstream/FontStream.zip">Download it</a> ~50Mo</del> <ins><a href="http://code.google.com/p/fstream/downloads/list">Download it on google code</a></ins></p>
]]></content:encoded>
			<wfw:commentRss>http://memmie.lenglet.name/flash/actionscript/font-streaming/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Streaming de polices</title>
		<link>http://memmie.lenglet.name/flash/actionscript/streaming-de-polices</link>
		<comments>http://memmie.lenglet.name/flash/actionscript/streaming-de-polices#comments</comments>
		<pubDate>Sun, 15 Mar 2009 18:36:01 +0000</pubDate>
		<dc:creator>Mem's</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Typography]]></category>
		<category><![CDATA[fstream]]></category>

		<guid isPermaLink="false">http://memmie.lenglet.name/?p=33</guid>
		<description><![CDATA[Je viens de mettre au point un système qui permet d&#8217;utiliser des polices embarquées, mais seulement de charger les caractères nécessaires. Le système est simple : Le server de streaming Il va s&#8217;occuper de la sélection des caractères à retourner en fonction de ceux demandés. Le client Il va s&#8217;occuper de faire le choix des [...]]]></description>
			<content:encoded><![CDATA[<p>Je viens de mettre au point un système qui permet d&#8217;utiliser des polices embarquées, mais seulement de charger les caractères nécessaires.</p>
<p>Le système est simple :</p>
<dl>
<dt>Le server de streaming</dt>
<dd>Il va s&#8217;occuper de la sélection des caractères à retourner en fonction de ceux demandés.</dd>
<dt>Le client</dt>
<dd>Il va s&#8217;occuper de faire le choix des caractères nécessaires (en fonction du texte à afficher) ainsi que le leur rapatriement et l&#8217;intégration aux polices à utiliser.</dd>
</dl>
<p><img src="http://memmie.lenglet.name/wp-content/uploads/2009/03/scheme.png" alt="SWF to Font cache to SWF" title="Font stream scheme" /></p>
<p><a href="/documents/lab/fontstream/waterfall_demo.html">Voir la démo</a></p>
<p>La police Arial Unicode MS, contient la majorité des plages unicodes : Latin, CJK (Chinois, Japonais, Coréen), Cyrillique, Hébreu, &#8230;</p>
<p>A titre d&#8217;information :</p>
<ul>
<li>ShinGoPro-Medium_regular.fontcache 3,38Mo (A-OTF-ShinGoPro-Medium.otf 3,11Mo)</li>
<li>Arial Unicode MS_regular.fontcache 9,96Mo (Arial Unicode MS.otf 23,28Mo)</li>
<li>CodingFontTobi_regular.fontcache 53Ko (cft.ttf 47Ko)</li>
<li>Coca Cola ii_regular.fontcacheCoca 20Ko (Cola ii.ttf 58Ko)</li>
<li>Futura_boldItalic.fontcache 27Ko (Futura Bold Italic.ttf 35Ko)</li>
<li>Futura_bold.fontcache 25Ko (Futura Bold.ttf 34Ko)</li>
<li>Futura Heavy_regular.fontcache 28Ko (Futura-Heavy.otf 17Ko)</li>
<li>Futura Heavy_italic.fontcache 29Ko (Futura-HeavyOblique.otf 17Ko)</li>
<li>Futura Light_regular.fontcache 29Ko (Futura-Light.otf 17Ko)</li>
<li>Futura_italic.fontcache 29Ko (Futura-Oblique.otf 16Ko)</li>
<li>Futura Heavy_regular.fontcache 28Ko (Futura.otf 16Ko)</li>
<li>Futura Condensed_regular.fontcache 28Ko (FuturaCondMedium.otf 22Ko)</li>
<li>Microsoft YaHei_bold.fontcache 8,7Mo (Microsoft YaHei Bold.otf 14,69Mo)</li>
<li>Microsoft YaHei_regular.fontcache 8,89Mo (Microsoft YaHei.otf 15,04Mo)</li>
<li>SegoeUI_regular.fontcache 252Ko (segoeui.ttf 415Ko)</li>
</ul>
<p>Total 31,48Mo (56,81Mo)</p>
]]></content:encoded>
			<wfw:commentRss>http://memmie.lenglet.name/flash/actionscript/streaming-de-polices/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>[How to] Create SVN managed project with 3rd part library on SVN</title>
		<link>http://memmie.lenglet.name/flash/as3/how-to-create-svn-managed-project-with-3rd-part-library-on-svn</link>
		<comments>http://memmie.lenglet.name/flash/as3/how-to-create-svn-managed-project-with-3rd-part-library-on-svn#comments</comments>
		<pubDate>Sat, 13 Sep 2008 11:54:59 +0000</pubDate>
		<dc:creator>Mem's</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[SVN]]></category>

		<guid isPermaLink="false">http://memmie.lenglet.name/?p=26</guid>
		<description><![CDATA[SVN has a smart fonctionality : Externals. The objective is import files from an other SVN repository Instead of download all of them and keep it in a folder (only one for all your project using this lib or a duplicate inside each projects), make only a link to the repository. For example, my project [...]]]></description>
			<content:encoded><![CDATA[<p>SVN has a smart fonctionality : Externals. The objective is import files from an other SVN repository<br />
Instead of download all of them and keep it in a folder (only one for all your project using this lib or a duplicate inside each projects), make only a link to the repository.<br />
For example, my project use <a href="http://blog.papervision3d.org/" title="Papervision 3D blog">Papervision 3D</a>. I need juste add &#8220;svn:externals&#8221; property to my root folder of classes.</p>
<p>On Window with Turtoise SVN : Right click on folder and select &#8220;TurtoiseSNV&#8221; > &#8220;Properties &#8230;&#8221;<br />
<img src="http://memmie.lenglet.name/wp-content/uploads/2008/09/turtoisesvn_menu.png" alt="Turtoise SVN folder menu" title="Turtoise SVN folder menu" /><br />
Click on &#8220;Add&#8221; button, select &#8220;svn:externals&#8221; for property name and set property value to :</p>
<pre>org/papervision3d http://papervision3d.googlecode.com/svn/trunk/as3/trunk/src/org/papervision3d/
org/ascollada http://papervision3d.googlecode.com/svn/trunk/as3/trunk/src/org/ascollada/
nochump http://papervision3d.googlecode.com/svn/trunk/as3/trunk/src/nochump/</pre>
<p><img src="http://memmie.lenglet.name/wp-content/uploads/2008/09/turtoisesvn_properties.png" alt="Turtoise SVN folder properties window" title="Turtoise SVN folder properties window" /><br />
Now commit and update your local copy.</p>
<p>Now indicated folders/files are synconized when you update your local copy with external(s) SVN(s)</p>
<p>For use a specific revision, use <code>-r</code> indicator. For example work with revision 727 of Papervision 3D, use property value :</p>
<pre>org/papervision3d <strong>-r727</strong> http://papervision3d.googlecode.com/svn/trunk/as3/trunk/src/org/papervision3d/
org/ascollada <strong>-r727</strong> http://papervision3d.googlecode.com/svn/trunk/as3/trunk/src/org/ascollada/
nochump <strong>-r727</strong> http://papervision3d.googlecode.com/svn/trunk/as3/trunk/src/nochump/</pre>
<p>You can also use SVN tags.</p>
<p>Resources:</p>
<ul>
<li><a href="http://svnbook.red-bean.com/nightly/en/svn.advanced.externals.html">SVN externals</a> on SVN book</li>
<li><a href="http://subversion.tigris.org/svn_1.5_releasenotes.html#externals">Externals</a> on SVN 1.5 release notes</li>
<li><a href="http://en.wikipedia.org/wiki/Subversion_(software)">Subversion</a> on Wikipedia</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://memmie.lenglet.name/flash/as3/how-to-create-svn-managed-project-with-3rd-part-library-on-svn/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Random non-uniform distribution</title>
		<link>http://memmie.lenglet.name/flash/actionscript/random-non-uniform-distribution</link>
		<comments>http://memmie.lenglet.name/flash/actionscript/random-non-uniform-distribution#comments</comments>
		<pubDate>Sun, 22 Jun 2008 13:58:09 +0000</pubDate>
		<dc:creator>Mem's</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[ActionScript]]></category>

		<guid isPermaLink="false">http://memmie.lenglet.name/?p=24</guid>
		<description><![CDATA[Ces graphiques sont généré à partir de 1 000 000 valeurs (à chaque affichage). Le rouge est la valeur moyenne et le rose est la répartition moyenne de probabilité (tout les valeurs on le même probabilité de sortir) Sources Ce qui serai excellent c&#8217;est de faire la même chose mais avec des points de contrôles [...]]]></description>
			<content:encoded><![CDATA[<p>
<object type="application/x-shockwave-flash" data="/documents/lab/random/RandomDistributionDemo.swf" style="width: 256px; height: 512px;"><param name="movie" value="/documents/lab/random/RandomDistributionDemo.swf" /></object><br />
Ces graphiques sont généré à partir de 1 000 000 valeurs (à chaque affichage). Le rouge est la valeur moyenne et le rose est la répartition moyenne de probabilité (tout les valeurs on le même probabilité de sortir)</p>
<p><a href="/documents/lab/random/random_distribution.zip">Sources</a></p>
<p>Ce qui serai excellent c&#8217;est de faire la même chose mais avec des points de contrôles comme pour les courbes de bézier.</p>
<p>Des liens :</p>
<ul>
<li><a href="http://lab.polygonal.de/index.php?s=seed">A good Pseudo-Random Number Generator (PRNG)</a></li>
<li><a href="http://www.gskinner.com/blog/archives/2008/01/source_code_see.html">Source Code: Seeded Random in ActionScript 3</a></li>
<li><a href="http://pixelero.wordpress.com/2008/04/24/various-functions-and-various-distributions-with-mathrandom/">various functions with different distributions for Math.random()</a></li>
<li><a href="http://www.gskinner.com/blog/archives/2008/01/source_code_ran.html">Source Code: Random Methods Utility Class</a></li>
<li><a href="http://mathworld.wolfram.com/UniformSumDistribution.html">Uniform Sum Distribution</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://memmie.lenglet.name/flash/actionscript/random-non-uniform-distribution/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cadratin &#8211; part 1</title>
		<link>http://memmie.lenglet.name/flash/actionscript/cadratin-part-1</link>
		<comments>http://memmie.lenglet.name/flash/actionscript/cadratin-part-1#comments</comments>
		<pubDate>Mon, 26 May 2008 23:35:32 +0000</pubDate>
		<dc:creator>Mem's</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[fstream]]></category>

		<guid isPermaLink="false">http://memmie.lenglet.name/?p=21</guid>
		<description><![CDATA[L&#8217;AS3 à permis d&#8217;ouvrir la porte à pas mal de choses dont 2 intéressantes : la gestion native de ByteArray et le chargement dynamique de SWF à partir de données contenu dans un ByteArray. Dit comme ça, ça n&#8217;a pas forcément d&#8217;intérêt immédiat. Seulement, le fait de pouvoir modifier/générer les données binaires d&#8217;un SWF et [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;AS3 à permis d&#8217;ouvrir la porte à pas mal de choses dont 2 intéressantes : la gestion native de ByteArray et le chargement dynamique de SWF à partir de données contenu dans un ByteArray.</p>
<p>Dit comme ça, ça n&#8217;a pas forcément d&#8217;intérêt immédiat. Seulement, le fait de pouvoir modifier/générer les données binaires d&#8217;un SWF et de les charger pour les récuperer sous forme native, ça change pas mal de choses !<br />
Image, vidéo ou vectoriel bon ça on peut déjà le faire nativement avec BitmapData et Video ou Shape. Mais on peux aussi le faire pour du <a href="http://www.flashcodersbrighton.org/wordpress/?p=9">son</a>, du code <a href="http://eval.hurlant.com/">ActionScript</a>, ou pour une police embarquée. C&#8217;est ce dernier point, qui m&#8217;intéresse et qui n&#8217;a pas encore vraiment été exploré.</p>
<p>Pour ce faire, j&#8217;ai appris à lire les données brut du format SWF : <a href="/documents/lab/cadratin/index.html">demo</a>, <a href="/documents/lab/cadratin/Cadratin.zip">sources</a><br />
Attention les logs générés sont assez lourds ~1Mo pour un SWF d&#8217;environ 30Ko contenant seulement une police embarqué.</p>
<p>Ca lit les données global d&#8217;un SWF (dimensions, couleur de fond, bibliothèque) ainsi que tout la partie qui gère les polices (le nom de la police, les données de dessins des glyphs &#8230;). Il faudra ensuite que je fasse l&#8217;opération inverse : génerer les données nécéssaire à l&#8217;intégration d&#8217;une police dans un SWF.</p>
<p>Liens :</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Em_%28typography%29">Em</a></li>
<li><a href="http://fr.wikipedia.org/wiki/Cadratin">Cadratin</a></li>
<li><a href="http://www.m2osw.com/fr/swf_alexref.html">Alexis&#8217; SWF Reference</a> <a href="/web-archive/swf_alexref.html">Mirror</a></li>
<li><a href="http://developer.apple.com/textfonts/TTRefMan/RM08/appendixE.html">Converting Outlines to the TrueType Format</a></li>
<li><a href="http://code.google.com/p/flash-decompiler/">flash-decompiler</a></li>
<li><a href="http://steve.hollasch.net/cgindex/curves/cbez-quadspline.html">Converting Bezier Curves to Quadratic Splines</a></li>
<li><a href="http://lab.libspark.org/trac/browser/as3/ByteCodeDisassembler">ByteCodeDisassembler</a></li>
<li><a href="http://xmlgraphics.apache.org/fop/">Formatting Objects Processor</a></li>
<li><a href="http://jnode.org/">JNode</a></li>
<li><a href="http://www.pdfbox.org/">PDFBox</a></li>
<li><a href="http://www.libming.org">Ming</a></li>
<li><a href="http://sourceforge.net/projects/jarexplorer/">Jar Explorer (with JODE)</a></li>
<li><a href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Font.html#createFont(int,%20java.io.InputStream)">java.awt.Font</a></li>
<li><a href="http://www.sephiroth.it/weblog/archives/2007/07/fontreader_convert_truetype_fonts_in.php">Ming</a> – by sephiroth / Alessandro Crugnola</li>
<li><a href="http://www.adobe.com/devnet/swf/pdf/swf_file_format_spec_v9.pdf">SWF file format specification</a></li>
<li><a href="http://www.half-serious.com/swf/format/">Macromedia Flash File Format (SWF)</a></li>
<li><a href="http://www.codeplex.com/swf">SWF.Net</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://memmie.lenglet.name/flash/actionscript/cadratin-part-1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[How to] Image format</title>
		<link>http://memmie.lenglet.name/flash/actionscript/image-format</link>
		<comments>http://memmie.lenglet.name/flash/actionscript/image-format#comments</comments>
		<pubDate>Mon, 26 May 2008 17:16:33 +0000</pubDate>
		<dc:creator>Mem's</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://memmie.lenglet.name/?p=22</guid>
		<description><![CDATA[Un problème auquel j&#8217;ai été confronté récemment, c&#8217;est le poids que font des PNG 32bits de taille moyen ~ 400px * 500px pour ~ 200Ko. En passant par PNGOUT on gagne une ou deux dizaine de kilooctet au maximum. Seulement, ces images au nombre d&#8217;une vingtaine était utilisé simultanément (ou presque). Rien qu&#8217;une image au [...]]]></description>
			<content:encoded><![CDATA[<p>Un problème auquel j&#8217;ai été confronté récemment, c&#8217;est le poids que font des PNG 32bits de taille moyen ~ 400px * 500px pour ~ 200Ko. En passant par PNGOUT on gagne une ou deux dizaine de kilooctet au maximum.<br />
Seulement, ces images au nombre d&#8217;une vingtaine était utilisé simultanément (ou presque). Rien qu&#8217;une image au poids de 200Ko dépasse largement le poids normal conseillé d&#8217;une page HTML (JS + CSS + images compris).</p>
<p>Pourtant je devais absolument disposer d&#8217;images transparente. Hélas seul le format acceptable dans ce cas est le PNG. Le BMP, TIFF ou encore TGA étant encore plus lourd, de plus non géré nativement dans Flash. Comment réduire le poid (compression lossy ?) et tout en conservant la transparence (une palette gris ?) tout ça en utilisant un containers supportés par Flash ou en passant par une librairies (si faut pas la faire une sois même) ?</p>
<p>Je suis pas allé très loin pour trouver la solution : utiliser 2 images au lieu d&#8217;une. Un JPEG pour les canneaux rouge, vert, bleu, plus un PNG 8bits (voir moins) en palette de gris pour la transparence. Restait plus qu&#8217;a les gérer dans flash.</p>
<pre>var rgb:BitmapData = myRGBBitmapData;
var alpha:BitmapData = myAlphaBitmapData;

//Loaded JPEG BitmapData are not transparent
argb = new BitmapData(rgb.width, rgb.height, true, 0x00000000);
//Copy RGB
argb.copyPixels
(
	rgb,
	new Rectangle(0, 0, rgb.width, rgb.height),
	new Point(0, 0)
)

//Apply alpha channel
argb.copyChannel
(
	alpha,
	new Rectangle(0, 0, alpha.width, alpha.height),
	new Point(0, 0),
	BitmapDataChannel.RED,//r = g = b = gray
	BitmapDataChannel.ALPHA
);

//ARGB is ready to use
argb;</pre>
<p>Le réslutat :<br />
<object type="application/x-shockwave-flash" data="/documents/lab/jpng/ReadJPNG.swf" id="ReadJPNG" name="ReadJPNG" style="width: 100%; height: 400px; display:block; margin-top: 0.2em;"><param name="movie" value="/documents/lab/jpng/ReadJPNG.swf" /><param name="allowScriptAccess" value="always" /><param name="flashvars" value="rgb=/documents/lab/jpng/rgb.jpg&#038;alpha=/documents/lab/jpng/alpha.png" /></object></p>
<p><a href="/documents/lab/jpng/rgb.jpg">RGB (JPEG)</a> (<strong>32&nbsp;024</strong> octets) + <a href="/documents/lab/jpng/alpha.png">Alpha (PNG8)</a> (<strong>12&nbsp;037</strong> octets) = <strong>44&nbsp;061</strong> octets vs. <a href="/documents/lab/jpng/argb.png">Result (PNG32)</a> (<strong>58&nbsp;618</strong> octets). Soit un gain de 25% par rapport à l&#8217;original. On peut même atteindre un gain de 90%.<br />
On pourrai aller encore plus loin en les compressant dans un fichier 7zip. Dans notre cas celui ci permet de gagner encore 10&nbsp;422 octets, soit au final 57% de la taille originale.</p>
<p>Dans tout ça, le problème après, c&#8217;est le temps de calcul nécessaire à la lecture et la décompression du(des) fichier(s) chargé(s) plus le temps de calcul pour que Flash fasse la fusion des 2 images.</p>
<p>Les sources :</p>
<ul>
<li><a href="/documents/lab/jpng/ReadJPNG.as">ActionScript source</a></li>
<li><a href="/documents/lab/jpng/JPNG.zip">All sources (Zip)</a></li>
</ul>
<p>Mais sinon pourquoi pas ?</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Comparison_of_graphics_file_formats">Comparison of graphics file formats</a> – by Wikipedia</li>
<li><a href="http://en.wikipedia.org/wiki/Progressive_Graphics_File">Progressive Graphics File</a> – by Wikipedia</li>
<li><a href="http://sourceforge.net/projects/libpgf/">libPGF</a></li>
<li><a href="http://en.wikipedia.org/wiki/HD_Photo">HD Photo</a> – by Wikipedia</li>
<li><a href="http://www.bytearray.org/?p=105">ASZip</a></li>
<li><a href="http://www.nochump.com/blog/?p=15">ZipLib</a> – by nochump</li>
<li><a href="http://codeazur.com.br/lab/fzip/">FZip</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://memmie.lenglet.name/flash/actionscript/image-format/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Impossible de réconcilier int et String &#8211; Flash Bug</title>
		<link>http://memmie.lenglet.name/flash/actionscript/impossible-de-reconcilier-2-freres-flash-bug</link>
		<comments>http://memmie.lenglet.name/flash/actionscript/impossible-de-reconcilier-2-freres-flash-bug#comments</comments>
		<pubDate>Wed, 05 Mar 2008 09:50:13 +0000</pubDate>
		<dc:creator>Mem's</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://memmie.lenglet.name/?p=11</guid>
		<description><![CDATA[Taper (1 &#124;&#124; "").toString(); dans le code d&#8217;une classe ou dans la timeline et compiler &#8230; Ca donne un erreur 1068 : Impossible de réconcilier int et String. D&#8217;après la doc ça doit donner &#8220;int et String ne peuvent pas être rapprochés.&#8221; A mon avis c&#8217;est un &#8220;bug&#8221; du compileur qui ne fait pas de [...]]]></description>
			<content:encoded><![CDATA[<p>Taper <code>(1 || "").toString();</code> dans le code d&#8217;une classe ou dans la timeline et compiler &#8230;</p>
<p>Ca donne un erreur 1068 : Impossible de réconcilier int et String.<br />
D&#8217;après la doc ça doit donner &#8220;int et String ne peuvent pas être rapprochés.&#8221;</p>
<p>A mon avis c&#8217;est un &#8220;bug&#8221; du compileur qui ne fait pas de check de ce qu&#8217;il y a dans les parenthèses. Le VM elle quand elle vois ça elle sais pas si toString c&#8217;est de int, de String ou de leur parent Object.</p>
<p>Pour résoudre le problème suffit de forcer la conversion dans un type définit :</p>
<pre>Object(1 || "").toString();</pre>
]]></content:encoded>
			<wfw:commentRss>http://memmie.lenglet.name/flash/actionscript/impossible-de-reconcilier-2-freres-flash-bug/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash Player 9 Update 3, Version 9.0.115.0</title>
		<link>http://memmie.lenglet.name/flash/actionscript/flash-player-9-update-3-version-901150</link>
		<comments>http://memmie.lenglet.name/flash/actionscript/flash-player-9-update-3-version-901150#comments</comments>
		<pubDate>Sun, 13 Jan 2008 00:04:48 +0000</pubDate>
		<dc:creator>Mem's</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://memmie.lenglet.name/?p=7</guid>
		<description><![CDATA[Outre les ajouts connu tels que le support des codecs H.264/HE-AAC, de la gestion du multicore dans les tâches de rendu (vectoriel, travail par pixel &#8230;) de flash player et la régression sur certaines choses comme l&#8217;evenement Event.SOUND_COMPLETE ou des bug toujours pas corrigés. Certains ajout sont apparus sans qu&#8217;on en parle trop, dont une [...]]]></description>
			<content:encoded><![CDATA[<p>Outre les ajouts connu tels que le support des codecs H.264/HE-AAC, de la gestion du multicore dans les tâches de rendu (vectoriel, travail par pixel &#8230;) de flash player et la régression sur certaines choses comme <a href="http://blog.andre-michelle.com/2007/198/">l&#8217;evenement Event.SOUND_COMPLETE</a> ou <a href="http://chennney.com/2006/12/08/security-sandbox-violation-bitmapdatadraw-on-rtmp-source/">des bug</a> toujours pas corrigés.<br />
Certains ajout sont apparus sans qu&#8217;on en parle trop, dont une que je viens de découvrir : <code>LoaderInfo::getLoaderInfoByDefinition()</code>.<br />
Cette méthode statique permet récuperer le <code>LoaderInfo</code> de n&#8217;importe quel <code>Object</code> associé à un SWF. En fait c&#8217;est n&#8217;importe quel objet(<code>Object</code>), classe (<code>Class</code>), méthode de la racine (top level) &#8230; tout sauf de type <code>Number</code>, <code>int</code> et <code>uint</code>, <code>null</code>, <code>undefined</code>, <code>String</code> et <code>Boolean</code> (j&#8217;en oublie peut être d&#8217;autres).</p>
<p>L&#8217;un des avantages que j&#8217;ai tout de suite vu, que je cherchais à faire depuis un bout de temps : récuperer l&#8217;url du flash chargé (<code>LoaderInfo.loaderURL</code> ou <code>LoaderInfo.url</code>) dans lequel mon code s&#8217;execute, sans avoir un accès direct au Stage, par exemple pour une classe qui n&#8217;est pas un <code>DisplayObject</code>.</p>
<pre>var target:Object = new Object();// new Sprite()|Number|int|Class|this|new Array()|[]|...
var loaderInfo:LoaderInfo = LoaderInfo.getLoaderInfoByDefinition(target);
// loaderInfo === &lt;root&gt;.loaderInfo
trace(loaderInfo.loaderURL);</pre>
<p>Attention l&#8217;accès ne peut ce faire qu&#8217;après l&#8217;evenement <code>Event.COMPLETE</code> du root du SWF sinon le code d&#8217;erreur d&#8217;execution 2099 est retourné pour la majorité des propriété du <code>LoaderInfo</code></p>
<pre>package
{
	import flash.display.Sprite;
	import flash.display.LoaderInfo;
	import flash.events.Event;

	public class GetLoaderInfoByDefinitionDemo extends Sprite
	{
		public function GetLoaderInfoByDefinitionDemo():void
		{
			this.loaderInfo.addEventListener(Event.COMPLETE, this.traceLoaderInfoProperties, false, 0, false);
		}
		private function traceLoaderInfoProperties(event:Event):void
		{
			var loaderInfo = LoaderInfo.getLoaderInfoByDefinition([]);
			trace("actionScriptVersion: " + loaderInfo.actionScriptVersion);
			trace("applicationDomain: " + loaderInfo.applicationDomain);
			trace("bytes: " + loaderInfo.bytes);
			trace("bytesLoaded: " + loaderInfo.bytesLoaded);
			trace("bytesTotal: " + loaderInfo.bytesTotal);
			trace("childAllowsParent: " + loaderInfo.childAllowsParent);
			trace("content: " + loaderInfo.content);
			trace("contentType: " + loaderInfo.contentType);
			trace("frameRate: " + loaderInfo.frameRate);
			trace("height: " + loaderInfo.height);
			trace("loader: " + loaderInfo.loader);
			trace("loaderURL: " + loaderInfo.loaderURL);
			trace("parameters: " + loaderInfo.parameters);
			trace("parentAllowsChild: " + loaderInfo.parentAllowsChild);
			trace("sameDomain: " + loaderInfo.sameDomain);
			trace("sharedEvents: " + loaderInfo.sharedEvents);
			trace("swfVersion: " + loaderInfo.swfVersion);
			trace("url: " + loaderInfo.url);
			trace("width: " + loaderInfo.width);
		}
	}
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://memmie.lenglet.name/flash/actionscript/flash-player-9-update-3-version-901150/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>As3 Eval 0.2</title>
		<link>http://memmie.lenglet.name/flash/actionscript/as3-eval-02</link>
		<comments>http://memmie.lenglet.name/flash/actionscript/as3-eval-02#comments</comments>
		<pubDate>Sat, 12 Jan 2008 23:18:27 +0000</pubDate>
		<dc:creator>Mem's</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://memmie.lenglet.name/?p=6</guid>
		<description><![CDATA[L&#8217;ouverture du code (Tamarin) de la Machine Virtuel ActionScript 2 (AVM2) ne pouvais être que bénéfique. En voici une preuve ! Une librairie qui permet d&#8217;évaluer du code ActionScript 3 EcmaScript 4 au run-time tout écrit en AS3. On a la possibilité en plus de générer le bytecode, décompiler du bytecode, de récuperer les erreurs [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;ouverture du code (<a href="http://www.mozilla.org/projects/tamarin/">Tamarin</a>) de la Machine Virtuel ActionScript 2 (AVM2) ne pouvais être que bénéfique. En voici une preuve !</p>
<p>Une librairie qui permet d&#8217;évaluer du code <del>ActionScript 3</del> <ins>EcmaScript 4</ins> au run-time tout écrit en AS3.<br />
On a la possibilité en plus de générer le bytecode, décompiler du bytecode, de récuperer les erreurs d&#8217;execution (tout ça à la volé) :<br />
<a href="http://eval.hurlant.com/demo/">La démo !</a></p>
<p>Une <a href="http://www.riaone.com/deval/">autre librairie</a> permettais déjà de le faire depuis quelques temps, mais l&#8217;inconvénient c&#8217;est qu&#8217;elle est payante et ne bénéficie pas du projet Tamarin.</p>
<p>Moi qui veux dans un futur plus ou moins loin voir parallèle <img src='http://memmie.lenglet.name/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  réaliser un moteur AS3/ES4 en JavaScript qui puisse utiliser le même code JavaEcmaActionScript sur presque n&#8217;import quel navigateur (IE!, FF, Opera, Safari &#8230;) ça ne peut qu&#8217;aider !<br />
J&#8217;ai aussi dans l&#8217;idée de faire un moteur Web (like Geko, Tridion, WebKit &#8230;) permettant en plus d&#8217;avoir une page HTML(+CSS +IMG +SWF) dans Flash de pouvoir supporter le JavaScript (voir même de l&#8217;ES4), avec ça ça sera beaucoup plus facile !</p>
<p><a href="http://eval.hurlant.com/">Eval on hurlant.com</a></p>
<p><a href="http://eval.hurlant.com/demo/srcview/EvalES4UI.zip">[Original]</a> <a href="/web-archive/EvalES4UI_2.0.zip">[Web archive] Eval 0.2 sources</a></p>
]]></content:encoded>
			<wfw:commentRss>http://memmie.lenglet.name/flash/actionscript/as3-eval-02/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>As3Crypto</title>
		<link>http://memmie.lenglet.name/flash/actionscript/as3crypto</link>
		<comments>http://memmie.lenglet.name/flash/actionscript/as3crypto#comments</comments>
		<pubDate>Tue, 18 Dec 2007 16:45:14 +0000</pubDate>
		<dc:creator>Mem's</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Cryptography]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://memmie.lenglet.name/?p=4</guid>
		<description><![CDATA[Package AS3 supportant beaucoup d&#8217;algorithmes de cryptage/hashage/sécurité Protocols: TLS 1.0 support (partial) Certificates: X.509 Certificate parsing and validation, built-in Root CAs. Public Key Encryption: RSA (encrypt/decrypt, sign/verify) Secret Key Encryption: AES, DES, 3DES, BlowFish, XTEA, RC4 Confidentiality Modes: ECB, CBC, CFB, CFB8, OFB, CTR Hashing Algorithms: MD2, MD5, SHA-1, SHA-224, SHA-256 Paddings available: PKCS#5, PKCS#1 [...]]]></description>
			<content:encoded><![CDATA[<p>Package AS3 supportant beaucoup d&#8217;algorithmes de cryptage/hashage/sécurité</p>
<ul>
<li>Protocols: TLS 1.0 support (partial)</li>
<li>Certificates: X.509 Certificate parsing and validation, built-in Root CAs.</li>
<li>Public Key Encryption: RSA (encrypt/decrypt, sign/verify)</li>
<li>Secret Key Encryption: AES, DES, 3DES, BlowFish, XTEA, RC4</li>
<li>Confidentiality Modes: ECB, CBC, CFB, CFB8, OFB, CTR</li>
<li>Hashing Algorithms: MD2, MD5, SHA-1, SHA-224, SHA-256</li>
<li>Paddings available: PKCS#5, PKCS#1 type 1 and 2</li>
<li>Other Useful Stuff: HMAC, Random, TLS-PRF, some ASN-1/DER parsing</li>
</ul>
<p>Beaucoup mieux que <a href="http://labs.adobe.com/wiki/index.php/ActionScript_3:resources:apis:libraries#corelib">Adobe Core Lib</a> !</p>
<p><a href="http://crypto.hurlant.com/">As3Crypto on hurlant.com</a></p>
<p><a href="http://crypto.hurlant.com/demo/srcview/Crypto.zip">[Original]</a> <a href="/web-archive/Crypto.zip">[Web archive] AS3 Crypto sources</a></p>
]]></content:encoded>
			<wfw:commentRss>http://memmie.lenglet.name/flash/actionscript/as3crypto/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
