<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang=""><title type="html">MediaMash</title><subtitle type="html" /><id>http://blogs.msdn.com/b/cmarchal/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/cmarchal/" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/b/cmarchal/atom.aspx" /><generator uri="http://telligent.com" version="5.6.50428.7875">Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><updated>2006-08-23T14:43:00Z</updated><entry><title>Code for WIC WMPhoto</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/cmarchal/archive/2006/09/22/766485.aspx" /><id>http://blogs.msdn.com/b/cmarchal/archive/2006/09/22/766485.aspx</id><published>2006-09-22T20:08:00Z</published><updated>2006-09-22T20:08:00Z</updated><content type="html">&lt;P&gt;The sample code for the previous post is available &lt;A href="http://mediamash.members.winisp.net/code/WICWMPhoto.zip"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;If you're looking into&amp;nbsp;developing with WIC or image processing on Vista, check out the WPF Imaging&amp;nbsp;&lt;A href="http://channel9.msdn.com/Showpost.aspx?postid=168916"&gt;video &lt;/A&gt;on channel 9.&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=766485" width="1" height="1"&gt;</content><author><name>ChrisADM</name><uri>http://blogs.msdn.com/chrismarchal/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>Windows Media Photo and WIC</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/cmarchal/archive/2006/09/13/752136.aspx" /><id>http://blogs.msdn.com/b/cmarchal/archive/2006/09/13/752136.aspx</id><published>2006-09-13T17:14:00Z</published><updated>2006-09-13T17:14:00Z</updated><content type="html">&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT color=#000000&gt;Vista includes support for a new image format named &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/windows/windowsmedia/forpros/wmphoto/default.aspx"&gt;&lt;FONT color=#0000ff&gt;Windows Media Photo&lt;/FONT&gt;&lt;/A&gt;&lt;FONT color=#000000&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This image format consists of a codec (offering features such as lossless encoding, high dynamic range encoding, highly efficient operation…) and a new container format.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In other words, lots of features to make you want to try it out.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;My aim for this post was to write some code to create my first Window Media Photo file.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The tools at our disposal to write this application are the Windows Media Photo (I’d like to abbreviate to WMP but that’s taken so I’ll go with WMPhoto) codec itself and the Windows Imaging Component (WIC) that will allow us to access that codec.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;WIC is another new feature for Vista, documented in the Windows SDK)&amp;nbsp;so we get to play with two new technologies for the price of one!&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT color=#000000&gt;WIC abstracts away the specifics of discovering and working with still image codecs.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For this application it will allow us to locate a codec for our source image, decode it, locate the WMPhoto codec, pass the decoded source image for encoding and save to a file.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The bulk of the application is with WIC and the steps it takes are as follows:&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT color=#000000&gt;WIC defines a factory object (IWICImagingFactory) that allows an application to create the specific objects needed to do its work.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For decoding an image we can ask the factory to create the required decoder object (IWICBitmapDecoder) from an exiting file by passing a filename.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Other than looking at the file extension, &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;each codec registered with WIC can include one or more entries that contain the first few bytes that uniquely identify an image format (JPEG would be FF D8).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Using this WIC can ‘sniff’ for the correct codec.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Once we have the decoder object we can ask it for a frame object (IWICBitmapFrameDecode) &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;that will allow access to the decoded image. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;The concept of frames exists because an image container can contain more than one image (TIFF being the prime example).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The frame object inherits from the most fundamental image object in WIC (IWICBitmapSource) which can be thought of as corresponding to an image as it would be understood in GDI+.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT color=#000000&gt;That’s decoding covered, but we still need to get things into the WMPhoto format.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Do this we first use the factory object to create a stream object (IWICStream) and initialise it to a file on the disk.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We then use the factory again to ask it to create the WMPhoto encoding object (IWICBitmapEncoder) specifying the WMPhoto container identifier.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Just we decompressed a frame from a decoder in the last paragraph, we will now ask the encoding object for a frame (IWICBitmapFrameEncode) that will store the encoded image.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Because we specified the WMPhoto container, we encoding frame will use the WMPhoto codec and it will pass us an object to allow us to configure the codec with the options we choose.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT color=#000000&gt;I’ll break from WIC briefly to discuss the options passed to the codec.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The options are configured through named properties.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Some are defined by WIC and some are specific to the codec being used.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For this application I’ll configure ‘ImageQuality’ (defined by WIC) to govern the level of lossy compression, a value between 0 and 1.0.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Alternatively you could specify ‘lossless’ (defined by WIC) but that’s probably only worth doing if you have immaculate source images (RAW from a digital camera for example).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;I’ll also specify ‘UseCodecOptions’ (defined by WMPhoto) and set that to false.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This tells the WMPhoto codec to pick default values for other properties we could configure, based on the ImageQuality value.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT color=#000000&gt;Continuing with the encoding, we can now set the pixel format and dimensions of the source frame, on the encoding frame.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We ask the encoding frame to encode from the source frame (a chaining feature of WIC) and the image data is compressed.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The finish off we then call commit on the frame and encoder objects, to flush everything out to the stream and close it.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT color=#000000&gt;WIC is a COM based API so to code this application I followed the same pattern as the WebCam code.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;That is to create a C++ class to do the COM work, wrap that it a C++\CLI class to expose it to the managed world (forward calls, convert parameters, handle errors) and then a C# application to make use of it.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I created a simple command line app that takes an input file and an output file and successfully created my first WMPhoto image using the highest quality encoding.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT color=#000000&gt;There is a lot more to WMPhoto.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I’ve only used JPG images as sources which is a bit pointless as quality has already been lost.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Converting from RAW source would be interesting, as would looking at the functionality of the container format.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The most interesting perhaps being the operations you can perform in the compressed domain.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For example, to create a JPG thumbnail in GDI+ you would typically have to decode the JPEG, resize the decoded image and then re-encode it.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;With WMPhoto there is the prospect of performing this and other operations without decompressing, saving memory and CPU time.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For more information about WMPhoto check out Bill Crow’s &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/billcrow/"&gt;&lt;FONT color=#0000ff&gt;blog&lt;/FONT&gt;&lt;/A&gt;&lt;FONT color=#000000&gt;.&lt;/FONT&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=752136" width="1" height="1"&gt;</content><author><name>ChrisADM</name><uri>http://blogs.msdn.com/chrismarchal/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>Code for WPF WebCam</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/cmarchal/archive/2006/09/01/735526.aspx" /><id>http://blogs.msdn.com/b/cmarchal/archive/2006/09/01/735526.aspx</id><published>2006-09-01T19:47:00Z</published><updated>2006-09-01T19:47:00Z</updated><content type="html">&lt;P&gt;The sample code for the previous post is available &lt;A href="http://mediamash.members.winisp.net/code/webcamcontrol.zip"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;What would I change about this sample?&amp;nbsp; The main thing is that the DirectShow initialisation occurs inside BuildWindowCore, which occurs very early in the creation of the UI.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This initialisation could fail looking for a WebCam, or having found one fail to build a suitable graph.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;As the sample stands, the test application will not fail nicely.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;To handle these conditions, it would be better to have it behind an initialisation method so that a consumer of the control can control it and design a more graceful failure path.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=735526" width="1" height="1"&gt;</content><author><name>ChrisADM</name><uri>http://blogs.msdn.com/chrismarchal/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>Using a webcam in WPF</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/cmarchal/archive/2006/08/25/724224.aspx" /><id>http://blogs.msdn.com/b/cmarchal/archive/2006/08/25/724224.aspx</id><published>2006-08-25T18:01:00Z</published><updated>2006-08-25T18:01:00Z</updated><content type="html">&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;SPAN lang=EN-GB style="mso-ansi-language: EN-GB"&gt;A colleague asked how to capture video from a webcam in WPF.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I find it’s a lot more enjoyable to learn about a technology by having something to aim for and this seemed an ideal project.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;SPAN lang=EN-GB style="mso-ansi-language: EN-GB"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;SPAN lang=EN-GB style="mso-ansi-language: EN-GB"&gt;So what tools are at our disposal to write a WPF application that will show the live output from a web cam attached locally to the machine?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;My first thought was the Media Foundation API new in Vista.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This is a replacement for the venerable DirectShow which is powerful but very closely tied to COM (if you develop in managed code and wanted to use DirectShow, you’re no doubt aware that there is no official managed wrapper).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Media Foundation looked ideal until I found that it doesn’t support hardware devices as yet.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It supports creating your own sources and there is a WAV source sample in the SDK, but creating a source filter for a hardware device will take you to the kernel and that’s a step too far for me.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;SPAN lang=EN-GB style="mso-ansi-language: EN-GB"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;SPAN lang=EN-GB style="mso-ansi-language: EN-GB"&gt;OK, it needs to be DirectShow.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This will allow code to enumerate the system for hardware and connect all the necessary components to show the camera output on the screen (termed a graph - if you’ve not used DirectShow, play around with the GraphEdit tool in the SDK bin folder, all will be revealed).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;As its DirectShow, it will also mean C++.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Using interop is possible but its a dark tunnel to go down before you see light, so I chose managed C++ to bridge WPF to DirectShow.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;SPAN lang=EN-GB style="mso-ansi-language: EN-GB"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;SPAN lang=EN-GB style="mso-ansi-language: EN-GB"&gt;DirectShow will render the images from the camera using a component (called a filter in DirectShow) called the Video Mixing Renderer.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This is a DirectX based component that will push the pixels around (see last post!) and in its default form likes to work with window handles and other non WPF concepts.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This pointed me to the HwndHost control which gives a window handle to host things in.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We can subclass this control and override a few methods on the control to hook things up.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Enough background, here’s how I put things together:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;SPAN lang=EN-GB style="mso-ansi-language: EN-GB"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;SPAN lang=EN-GB style="mso-ansi-language: EN-GB"&gt;I’ve got two classes: one managed that will subclass HwndHost and be a managed class, and another that will be unmanaged to do all the DirectShow magic.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The managed class will instantiate and call methods on the undamaged class.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;First the managed class:&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I override the BuildWindowCore to create my own window using CreateWindowEx(), instantiate the unmanaged class and ask it to use DirectShow and hook it to our newly created window.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I override DestroyWindowCore to clean-up the unmanaged class and our created window.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The ArrangeOverride method also needs to be overridden (terminology meltdown!) so that we know the final size of the control when it is rendered to the screen as its not know on the call to BuildWindowCore.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;That, plus methods to start and stop the preview is all that’s in the managed class.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;SPAN lang=EN-GB style="mso-ansi-language: EN-GB"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;SPAN lang=EN-GB style="mso-ansi-language: EN-GB"&gt;The unmanaged class exposes a setup method that will (DirectShow terminology warning) enumerate for video input class devices, create an instance of a device filter, add it to a graph and render its output pin.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It then queries the graph for its COM interface to configure the video output and it’s at this point we can return to hooking in with WPF.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This method was passed the window handle of our created window and we can configure DirectShow to render within the window area (i.e. our new WPF control).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This class also exposes a method to do the final sizing of the video output and this is called from the ArrangeOverride method mentioned above.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Some further methods to start, stop and cleanup and this class is done.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;SPAN lang=EN-GB style="mso-ansi-language: EN-GB"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;SPAN lang=EN-GB style="mso-ansi-language: EN-GB"&gt;But does it work?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The end result is a control we can place in our WPF application that will show the webcam output, nice! Yes, it seems to work well.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The order in which you configure window properties as part of the creation process has an effect on Aero Glass. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;The Desktop Window Manager service controlling Aero Glass will fall over (with a event log details to tell you that it did) if the order is incorrect. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;SPAN lang=EN-GB style="mso-ansi-language: EN-GB"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;SPAN lang=EN-GB style="mso-ansi-language: EN-GB"&gt;That’s all well and good, I hear you all cry, but there’s no code!&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;You could have made all this up!&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;A fair point and my answer is that including code snippets would have made writing this up much more complicated and even longer.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;When I can find a spot to host the sample code I’ll make it available if people are interested and you can pick over it at your leisure.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;SPAN lang=EN-GB style="mso-ansi-language: EN-GB"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=724224" width="1" height="1"&gt;</content><author><name>ChrisADM</name><uri>http://blogs.msdn.com/chrismarchal/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>That tricky first post</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/cmarchal/archive/2006/08/23/714621.aspx" /><id>http://blogs.msdn.com/b/cmarchal/archive/2006/08/23/714621.aspx</id><published>2006-08-23T16:43:00Z</published><updated>2006-08-23T16:43:00Z</updated><content type="html">&lt;P&gt;I've&amp;nbsp;set up the blog account and I'm sitting&amp;nbsp;here trying to create this first post.&amp;nbsp; As someone working in technology and software development I had high expectations that every post would be a beautifully crafted, innovative example of the&amp;nbsp;use of best practice to a ground breaking technology.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The fact that the first post is going to be like a thousand other ‘Hello World’ first posts, is a bit of a bit disappointing.&lt;/P&gt;
&lt;P&gt;So what is this blog going to be about?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I’m interested in technologies that move pixels around the screen, get sound to come out of the speakers.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This blog aims expose my wanderings through the technologies that relate to this area, to anyone who’s interested.&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=714621" width="1" height="1"&gt;</content><author><name>ChrisADM</name><uri>http://blogs.msdn.com/chrismarchal/ProfileUrlRedirect.ashx</uri></author></entry></feed>