<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://forums.xna.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>General</title><link>http://forums.xna.com/forums/50.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 0.0)</generator><item><title>Re: Here !</title><link>http://forums.xna.com/forums/thread/193289.aspx</link><pubDate>Thu, 25 Jun 2009 13:31:41 GMT</pubDate><guid isPermaLink="false">4aa5dbf6-357b-46b2-b5b2-1b660a6dc370:193289</guid><dc:creator>zodX</dc:creator><slash:comments>0</slash:comments><comments>http://forums.xna.com/forums/thread/193289.aspx</comments><wfw:commentRss>http://forums.xna.com/forums/commentrss.aspx?SectionID=50&amp;PostID=193289</wfw:commentRss><description>&lt;p&gt;Hi, there ! &lt;/p&gt;
&lt;p&gt;I´ve tried the Bitmap Opacity Masking Example.&lt;/p&gt;
&lt;p&gt;Get it from here:&lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/en-us/library/dd372307(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/dd372307(VS.85).aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The &amp;gt;Bitmap-Opacity-Mask&amp;lt; is always opaque and not transparent, I see no checkerboard thru.&lt;br /&gt;
e.g. tried loading 8bit,32bit,straight,premueltiplied,tif,bmp  for it.&lt;/p&gt;
&lt;p&gt;Maybe you know how to fix this, it´s nearly the original sample.&lt;br /&gt;
Do I have to specially load any exotic-prepared bitmaps ? Or are any exotic parameters wrong ?&lt;br /&gt;
I couldn´t understand why this sample mustn´t work.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;My Opacity Mask Sample I´ve changed this little bit:&lt;br /&gt;
Changed BitmaploadfromResource into BitmaploadfromFile (beneath identical).&lt;/p&gt;
&lt;p&gt;// THIS CODE AND INFORMATION IS PROVIDED &amp;quot;AS IS&amp;quot; WITHOUT WARRANTY OF&lt;br /&gt;
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO&lt;br /&gt;
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A&lt;br /&gt;
// PARTICULAR PURPOSE.&lt;br /&gt;
//&lt;br /&gt;
// Copyright (c) Microsoft Corporation. All rights reserved&lt;br /&gt;
//+-----------------------------------------------------------------------------&lt;br /&gt;
//&lt;br /&gt;
//&lt;br /&gt;
//  $Description:&lt;br /&gt;
//      Sample DirectWrite Application&lt;br /&gt;
//&lt;br /&gt;
//  $ENDTAG&lt;br /&gt;
//&lt;br /&gt;
//------------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;#include &amp;quot;stdafx.h&amp;quot;&lt;/p&gt;
&lt;p&gt;/******************************************************************&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  WinMain                                                        *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  Application entrypoint                                         *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
******************************************************************/&lt;/p&gt;
&lt;p&gt;int WINAPI WinMain(&lt;br /&gt;
    HINSTANCE hInstance,&lt;br /&gt;
    HINSTANCE hPrevInstance,&lt;br /&gt;
    LPSTR lpCmdLine,&lt;br /&gt;
    int nCmdShow)&lt;br /&gt;
{&lt;br /&gt;
    HRESULT hr;&lt;br /&gt;
    if (SUCCEEDED(CoInitialize(NULL)))&lt;br /&gt;
    {&lt;br /&gt;
        {&lt;br /&gt;
            DemoApp app;&lt;/p&gt;
&lt;p&gt;            if (SUCCEEDED(hr = app.Initialize()))&lt;br /&gt;
            {&lt;br /&gt;
                app.RunMessageLoop();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        CoUninitialize();&lt;br /&gt;
    }&lt;/p&gt;
&lt;p&gt;    return SUCCEEDED(hr) ? EXIT_SUCCESS : EXIT_FAILURE;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;/******************************************************************&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  DemoApp::DemoApp constructor                                   *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  Initialize member data                                         *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
******************************************************************/&lt;/p&gt;
&lt;p&gt;DemoApp::DemoApp() :&lt;br /&gt;
    m_hwnd(NULL)&lt;br /&gt;
{&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;/******************************************************************&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  DemoApp::~DemoApp destructor                                   *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  Tear down resources                                            *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
******************************************************************/&lt;/p&gt;
&lt;p&gt;DemoApp::~DemoApp()&lt;br /&gt;
{&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;/******************************************************************&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  DemoApp::Initialize                                            *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  Create application window and device-independent resources     *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
******************************************************************/&lt;br /&gt;
HRESULT DemoApp::Initialize()&lt;br /&gt;
{&lt;br /&gt;
 WNDCLASSEX wcex;&lt;br /&gt;
    HRESULT hr;&lt;br /&gt;
    ATOM atom;&lt;/p&gt;
&lt;p&gt;    IFR(CreateDeviceIndependentResources());&lt;/p&gt;
&lt;p&gt;    // Register window class&lt;br /&gt;
    wcex.cbSize        = sizeof(WNDCLASSEX);&lt;br /&gt;
    wcex.style         = CS_HREDRAW | CS_VREDRAW;&lt;br /&gt;
    wcex.lpfnWndProc   = DemoApp::WndProc;&lt;br /&gt;
    wcex.cbClsExtra    = 0;&lt;br /&gt;
    wcex.cbWndExtra    = sizeof(LONG_PTR);&lt;br /&gt;
    wcex.hInstance     = HINST_THISCOMPONENT;&lt;br /&gt;
    wcex.hbrBackground = NULL;&lt;br /&gt;
    wcex.lpszMenuName  = NULL;&lt;br /&gt;
    wcex.hIcon         = LoadIcon(&lt;br /&gt;
        NULL,&lt;br /&gt;
        IDI_APPLICATION&lt;br /&gt;
        );&lt;br /&gt;
    wcex.hCursor       = LoadCursor(&lt;br /&gt;
        NULL,&lt;br /&gt;
        IDC_ARROW&lt;br /&gt;
        );&lt;br /&gt;
    wcex.lpszClassName = TEXT(&amp;quot;D2DDemoApp&amp;quot;);&lt;br /&gt;
    wcex.hIconSm       = LoadIcon(&lt;br /&gt;
        NULL,&lt;br /&gt;
        IDI_APPLICATION&lt;br /&gt;
        );&lt;/p&gt;
&lt;p&gt;    atom = RegisterClassEx(&lt;br /&gt;
        &amp;amp;wcex&lt;br /&gt;
        );&lt;/p&gt;
&lt;p&gt;    IFR(atom ? S_OK : E_FAIL);&lt;/p&gt;
&lt;p&gt;    //&lt;br /&gt;
    // Create Window takes its size in Pixels, so, to have a consistent DIP size, you &lt;br /&gt;
    // obtain the DPI and use it to scale the window size. &lt;br /&gt;
    FLOAT dpiX, dpiY;&lt;/p&gt;
&lt;p&gt;    //&lt;br /&gt;
    // The factory returns the current system DPI. This is also the value it will use&lt;br /&gt;
    // to create its own windows.&lt;br /&gt;
    // &lt;br /&gt;
    m_spD2DFactory-&amp;gt;GetDesktopDpi(&amp;amp;dpiX, &amp;amp;dpiY);&lt;/p&gt;
&lt;p&gt;    // Create window&lt;br /&gt;
    m_hwnd = CreateWindow(&lt;br /&gt;
        TEXT(&amp;quot;D2DDemoApp&amp;quot;),&lt;br /&gt;
        TEXT(&amp;quot;Direct2D Demo App&amp;quot;),&lt;br /&gt;
        WS_OVERLAPPEDWINDOW,&lt;br /&gt;
        CW_USEDEFAULT,&lt;br /&gt;
        CW_USEDEFAULT,&lt;br /&gt;
        static_cast&amp;lt;UINT&amp;gt;(dpiX * 800.f / 96.f),&lt;br /&gt;
        static_cast&amp;lt;UINT&amp;gt;(dpiY * 800.f / 96.f),&lt;br /&gt;
        NULL,&lt;br /&gt;
        NULL,&lt;br /&gt;
        HINST_THISCOMPONENT,&lt;br /&gt;
        this&lt;br /&gt;
        );&lt;/p&gt;
&lt;p&gt;    IFR(m_hwnd ? S_OK : E_FAIL);&lt;/p&gt;
&lt;p&gt;    ShowWindow(m_hwnd, SW_SHOWNORMAL);&lt;/p&gt;
&lt;p&gt;    UpdateWindow(m_hwnd);&lt;/p&gt;
&lt;p&gt;    return hr;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;/******************************************************************&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  DemoApp::CreateDeviceIndependentResources                      *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  This method is used to create resources which are not bound    *&lt;br /&gt;
*  to any device. Their lifetime effectively extends for the      *&lt;br /&gt;
*  duration of the app.                                           *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
******************************************************************/&lt;/p&gt;
&lt;p&gt;HRESULT DemoApp::CreateDeviceIndependentResources()&lt;br /&gt;
{&lt;br /&gt;
    HRESULT hr = S_OK;&lt;br /&gt;
    &lt;br /&gt;
    // Create WIC factory&lt;br /&gt;
    IFR(CoCreateInstance(&lt;br /&gt;
        CLSID_WICImagingFactory,&lt;br /&gt;
        NULL,&lt;br /&gt;
        CLSCTX_INPROC_SERVER,&lt;br /&gt;
        IID_IWICImagingFactory,&lt;br /&gt;
        reinterpret_cast&amp;lt;void **&amp;gt;(&amp;amp;m_spWICFactory)&lt;br /&gt;
        ));&lt;/p&gt;
&lt;p&gt;    // Create Direct2D factory&lt;br /&gt;
    IFR(D2D1CreateFactory(&lt;br /&gt;
        D2D1_FACTORY_TYPE_SINGLE_THREADED,&lt;br /&gt;
        &amp;amp;m_spD2DFactory&lt;br /&gt;
        ));&lt;/p&gt;
&lt;p&gt;    // Create a shared DirectWrite factory&lt;br /&gt;
    IFR(DWriteCreateFactory(&lt;br /&gt;
        DWRITE_FACTORY_TYPE_SHARED,&lt;br /&gt;
        __uuidof(IDWriteFactory),&lt;br /&gt;
        reinterpret_cast&amp;lt;IUnknown**&amp;gt;(&amp;amp;m_spDWriteFactory)&lt;br /&gt;
        ));&lt;/p&gt;
&lt;p&gt;    m_spD2DFactory-&amp;gt;CreateRectangleGeometry(D2D1::RectF(0,5,200,195),&amp;amp;m_spRectGeo);&lt;br /&gt;
    &lt;br /&gt;
    m_wszOriginalBitmapText=L&amp;quot;Original Bitmap&amp;quot;;&lt;br /&gt;
    m_wszBitmapBrushOpacityMaskText=L&amp;quot;Bitmap Opacity Mask&amp;quot;;&lt;br /&gt;
    m_wszLinearGradientOpacityMaskText=L&amp;quot;Linear Gradient Opacity Mask&amp;quot;;&lt;br /&gt;
    m_wszRadialGradientOpacityMaskText=L&amp;quot;Radial Gradient Opacity Mask&amp;quot;;&lt;br /&gt;
    m_wszWithBitmapBrushOpacityMaskText=L&amp;quot;Bitmap With Bitmap Opacity Mask Applied&amp;quot;;&lt;br /&gt;
    m_wszWithLinearGradientOpacityMaskText=L&amp;quot;Bitmap With Linear Gradient Opacity Mask Applied&amp;quot;;&lt;br /&gt;
    m_wszWithRadialGradientOpacityMaskText=L&amp;quot;Bitmap With Radial Gradient Opacity Mask Applied&amp;quot;;&lt;/p&gt;
&lt;p&gt;    // Create a text format.&lt;br /&gt;
    IFR(m_spDWriteFactory-&amp;gt;CreateTextFormat(&lt;br /&gt;
        L&amp;quot;Verdana&amp;quot;, //font family name&lt;br /&gt;
        NULL, //font collection (NULL sets it to use the system font collection)&lt;br /&gt;
        DWRITE_FONT_WEIGHT_REGULAR,&lt;br /&gt;
        DWRITE_FONT_STYLE_NORMAL,&lt;br /&gt;
        DWRITE_FONT_STRETCH_NORMAL,&lt;br /&gt;
        12.0f,&lt;br /&gt;
        L&amp;quot;en-us&amp;quot;,&lt;br /&gt;
        &amp;amp;m_spTextFormat&lt;br /&gt;
        ));&lt;/p&gt;
&lt;p&gt;    return hr;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;/******************************************************************&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  DemoApp::CreateDeviceResources                                 *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  This method creates resources which are bound to a particular  *&lt;br /&gt;
*  D3D device. It&amp;#39;s all centralized here, in case the resources   *&lt;br /&gt;
*  need to be recreated in case of D3D device loss (eg. display   *&lt;br /&gt;
*  change, remoting, removal of video card, etc).                 *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
******************************************************************/&lt;/p&gt;
&lt;p&gt;HRESULT DemoApp::CreateDeviceResources()&lt;br /&gt;
{&lt;br /&gt;
    HRESULT hr = S_OK;&lt;/p&gt;
&lt;p&gt;    if (!m_spRT)&lt;br /&gt;
    {&lt;/p&gt;
&lt;p&gt;        RECT rc;&lt;br /&gt;
        GetClientRect(m_hwnd, &amp;amp;rc);&lt;/p&gt;
&lt;p&gt;        D2D1_SIZE_U size = D2D1::SizeU(&lt;br /&gt;
            rc.right - rc.left,&lt;br /&gt;
            rc.bottom - rc.top&lt;br /&gt;
        );&lt;/p&gt;
&lt;p&gt;        // Create a Direct2D render target&lt;br /&gt;
        IFR(m_spD2DFactory-&amp;gt;CreateHwndRenderTarget(&lt;br /&gt;
            D2D1::RenderTargetProperties(),&lt;br /&gt;
            D2D1::HwndRenderTargetProperties(&lt;br /&gt;
                m_hwnd,&lt;br /&gt;
                size&lt;br /&gt;
                ),&lt;br /&gt;
            &amp;amp;m_spRT&lt;br /&gt;
            ));&lt;/p&gt;
&lt;p&gt;        IFR(m_spRT-&amp;gt;CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::Black),&amp;amp;m_spBlackBrush));&lt;/p&gt;
&lt;p&gt;        //Create the bitmap to be used by the bitmap brush&lt;/p&gt;
&lt;p&gt;   // Instead of loadingFromResource this is the only part I changed in this sample&lt;br /&gt;
   // But unlikely the official text-samples haven´t got the images with it&lt;br /&gt;
   LoadBitmapFromFile(m_spRT,&lt;br /&gt;
            m_spWICFactory,&lt;br /&gt;
            L&amp;quot;V:\\GRAPHIK space 4D\\Masking Test.bmp&amp;quot;,&lt;br /&gt;
            0,&lt;br /&gt;
            0,&lt;br /&gt;
            &amp;amp;m_spBitmap&lt;br /&gt;
            );&lt;/p&gt;
&lt;p&gt;   LoadBitmapFromFile(m_spRT,&lt;br /&gt;
            m_spWICFactory,&lt;br /&gt;
            L&amp;quot;V:\\GRAPHIK space 4D\\Masking Test2.bmp&amp;quot;,&lt;br /&gt;
            0,&lt;br /&gt;
            0,&lt;br /&gt;
            &amp;amp;m_spBitmapMask&lt;br /&gt;
            );&lt;/p&gt;
&lt;p&gt;        D2D1_BITMAP_BRUSH_PROPERTIES propertiesXClampYClamp = { D2D1_EXTEND_MODE_CLAMP, D2D1_EXTEND_MODE_CLAMP, &lt;/p&gt;
&lt;p&gt;D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR };&lt;br /&gt;
        &lt;br /&gt;
  IFR(m_spRT-&amp;gt;CreateBitmapBrush(&lt;br /&gt;
            m_spBitmap,&lt;br /&gt;
            propertiesXClampYClamp,&lt;br /&gt;
            &amp;amp;m_spOriginalBitmapBrush));&lt;br /&gt;
        &lt;br /&gt;
        IFR(m_spRT-&amp;gt;CreateBitmapBrush(&lt;br /&gt;
            m_spBitmapMask,&lt;br /&gt;
            propertiesXClampYClamp,&lt;br /&gt;
            &amp;amp;m_spBitmapMaskBrush));&lt;br /&gt;
        &lt;br /&gt;
         &lt;br /&gt;
        //Create an array of gradient stops to put in the gradient stop collection which will be used in the linear &lt;/p&gt;
&lt;p&gt;gradient brush&lt;br /&gt;
        &lt;br /&gt;
        D2D1_GRADIENT_STOP gradientStops[2];&lt;br /&gt;
        gradientStops[0].color = D2D1::ColorF(D2D1::ColorF::Black,1.0f);&lt;br /&gt;
        gradientStops[0].position = 0.0f;&lt;br /&gt;
        gradientStops[1].color = D2D1::ColorF(D2D1::ColorF::White,0.0f);&lt;br /&gt;
        gradientStops[1].position = 1.0f;&lt;br /&gt;
        &lt;br /&gt;
        //Create the ID2D1GradientStopCollection from a previously declared array of D2D1_GRADIENT_STOP structs&lt;br /&gt;
        IFR(m_spRT-&amp;gt;CreateGradientStopCollection(gradientStops, &lt;br /&gt;
            2,&lt;br /&gt;
            D2D1_GAMMA_2_2,&lt;br /&gt;
            D2D1_EXTEND_MODE_CLAMP,&lt;br /&gt;
            &amp;amp;m_spGradientStopCollection));&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        //The line that determines the direction of the gradient starts at the top left corner of the box to the &lt;/p&gt;
&lt;p&gt;bottom right corner&lt;br /&gt;
        IFR(m_spRT-&amp;gt;CreateLinearGradientBrush(D2D1::LinearGradientBrushProperties(D2D1::Point2F(0,0),D2D1::Point2F&lt;/p&gt;
&lt;p&gt;(200,200)),&lt;br /&gt;
            m_spGradientStopCollection,&lt;br /&gt;
            &amp;amp;m_spLinearGradientBrush));&lt;br /&gt;
        &lt;br /&gt;
        //The center of the gradient is in the center of the box. The gradient origin offset was set to zero(0,0) or &lt;/p&gt;
&lt;p&gt;center in this case. &lt;br /&gt;
        IFR(m_spRT-&amp;gt;CreateRadialGradientBrush(D2D1::RadialGradientBrushProperties(D2D1::Point2F(100,100), &lt;/p&gt;
&lt;p&gt;D2D1::Point2F(0,0), 100,100),&lt;br /&gt;
            m_spGradientStopCollection,&lt;br /&gt;
            &amp;amp;m_spRadialGradientBrush));&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        // Create the compatible render target&lt;br /&gt;
        ID2D1BitmapRenderTargetPtr spCompatibleRenderTarget;&lt;br /&gt;
        IFR(m_spRT-&amp;gt;CreateCompatibleRenderTarget(D2D1::SizeF(20.0f, 20.0f),&lt;br /&gt;
            &amp;amp;spCompatibleRenderTarget));&lt;/p&gt;
&lt;p&gt;        // Create the pattern&lt;br /&gt;
        ID2D1SolidColorBrushPtr spWhiteBrush;&lt;br /&gt;
        IFR(spCompatibleRenderTarget-&amp;gt;CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::White),&lt;br /&gt;
            &amp;amp;spWhiteBrush));&lt;/p&gt;
&lt;p&gt;        ID2D1SolidColorBrushPtr spGrayBrush;&lt;br /&gt;
        IFR(spCompatibleRenderTarget-&amp;gt;CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::LightGray),&lt;br /&gt;
            &amp;amp;spGrayBrush));&lt;/p&gt;
&lt;p&gt;        //Draw filled rectangles onto the render target&lt;br /&gt;
        spCompatibleRenderTarget-&amp;gt;BeginDraw();&lt;br /&gt;
        spCompatibleRenderTarget-&amp;gt;FillRectangle(D2D1::RectF(0.0f, 0.0f, 10.0f, 10.0f), spGrayBrush);&lt;br /&gt;
        spCompatibleRenderTarget-&amp;gt;FillRectangle(D2D1::RectF(10.0f, 0.0f, 20.0f, 10.0f), spWhiteBrush);&lt;br /&gt;
        spCompatibleRenderTarget-&amp;gt;FillRectangle(D2D1::RectF(10.0f, 10.0f, 20.0f, 20.0f), spGrayBrush);&lt;br /&gt;
        spCompatibleRenderTarget-&amp;gt;FillRectangle(D2D1::RectF(0.0f, 10.0f, 10.0f, 20.0f), spWhiteBrush);&lt;br /&gt;
        spCompatibleRenderTarget-&amp;gt;EndDraw();&lt;/p&gt;
&lt;p&gt;        //Get the bitmap from the render target.&lt;br /&gt;
        IFR(spCompatibleRenderTarget-&amp;gt;GetBitmap(&amp;amp;m_spCheckeredBitmap));&lt;/p&gt;
&lt;p&gt;        //Choose the tiling mode for the bitmap brush&lt;br /&gt;
        D2D1_BITMAP_BRUSH_PROPERTIES brushProperties = D2D1::BitmapBrushProperties(D2D1_EXTEND_MODE_WRAP, &lt;/p&gt;
&lt;p&gt;D2D1_EXTEND_MODE_WRAP);&lt;br /&gt;
        &lt;br /&gt;
        //Create the bitmap brush&lt;br /&gt;
        IFR(m_spRT-&amp;gt;CreateBitmapBrush(m_spCheckeredBitmap, brushProperties, &amp;amp;m_spCheckerPatternBitmapBrush));&lt;br /&gt;
    }&lt;/p&gt;
&lt;p&gt;    return hr;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;/******************************************************************&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  DemoApp::DiscardDeviceResources                                *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  Discard device-specific resources which need to be recreated   *&lt;br /&gt;
*  when a D3D device is lost                                      *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
******************************************************************/&lt;/p&gt;
&lt;p&gt;void DemoApp::DiscardDeviceResources()&lt;br /&gt;
{&lt;br /&gt;
    m_spRT = NULL;&lt;br /&gt;
    m_spBlackBrush = NULL;&lt;br /&gt;
    m_spLinearGradientBrush = NULL;&lt;br /&gt;
    m_spRadialGradientBrush = NULL;&lt;br /&gt;
    m_spOriginalBitmapBrush = NULL;&lt;br /&gt;
    m_spGradientStopCollection = NULL;&lt;br /&gt;
    m_spCheckerPatternBitmapBrush = NULL;&lt;br /&gt;
    &lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;/******************************************************************&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  DemoApp::RunMessageLoop                                        *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  Main window message loop                                       *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
******************************************************************/&lt;/p&gt;
&lt;p&gt;void DemoApp::RunMessageLoop()&lt;br /&gt;
{&lt;br /&gt;
    MSG msg;&lt;/p&gt;
&lt;p&gt;    while (GetMessage(&amp;amp;msg, NULL, 0, 0)&amp;gt;0)&lt;br /&gt;
    {&lt;br /&gt;
        TranslateMessage(&amp;amp;msg);&lt;br /&gt;
        DispatchMessage(&amp;amp;msg);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt; &lt;br /&gt;
/******************************************************************&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  DemoApp::OnRender                                              *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  Called whenever the application needs to display the client    *&lt;br /&gt;
*  window.                                                        *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  Note that this function will not render anything if the window *&lt;br /&gt;
*  is occluded (eg. obscured by other windows or off monitor).    *&lt;br /&gt;
*  Also, this function will automatically discard device-specific *&lt;br /&gt;
*  resources if the D3D device disappears during execution, and   *&lt;br /&gt;
*  will recreate the resources the next time it&amp;#39;s invoked.        *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
******************************************************************/&lt;/p&gt;
&lt;p&gt;HRESULT DemoApp::OnRender(const PAINTSTRUCT &amp;amp;ps)&lt;br /&gt;
{&lt;br /&gt;
    HRESULT hr;&lt;/p&gt;
&lt;p&gt;    IFR(DrawD2DContent(ps));&lt;/p&gt;
&lt;p&gt;    return hr;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;/******************************************************************&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  DemoApp::DrawD2DContent                                        *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  This method draws blocks demonstrating different opacity       *&lt;br /&gt;
*  masks.                                                         *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  Note that this function will not render anything if the window *&lt;br /&gt;
*  is occluded (eg. obscured by other windows or off monitor).    *&lt;br /&gt;
*  Also, this function will automatically discard device-specific *&lt;br /&gt;
*  resources if the D3D device disappears during execution, and   *&lt;br /&gt;
*  will recreate the resources the next time it&amp;#39;s invoked.        *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
******************************************************************/&lt;/p&gt;
&lt;p&gt;HRESULT DemoApp::DrawD2DContent(const PAINTSTRUCT &amp;amp;ps)&lt;br /&gt;
{&lt;br /&gt;
    HRESULT hr = S_OK;&lt;/p&gt;
&lt;p&gt;    CreateDeviceResources();&lt;/p&gt;
&lt;p&gt;    if (!(m_spRT-&amp;gt;CheckWindowState() &amp;amp; D2D1_WINDOW_STATE_OCCLUDED))&lt;br /&gt;
    {&lt;br /&gt;
        m_spRT-&amp;gt;BeginDraw();&lt;/p&gt;
&lt;p&gt;        m_spRT-&amp;gt;SetTransform(&lt;br /&gt;
            D2D1::Matrix3x2F::Identity()&lt;br /&gt;
            );&lt;br /&gt;
        //Rectangle that holds the shape of rectangles to be filled with brushes&lt;br /&gt;
        D2D1_RECT_F rcBrushRect = D2D1::RectF(0,5, 200, 195);&lt;/p&gt;
&lt;p&gt;        //Rectangle that holds the shape of rectangles where captions are drawn with DrawText&lt;br /&gt;
        D2D1_RECT_F rcTextRect = D2D1::RectF(5,205,200,300);&lt;/p&gt;
&lt;p&gt;        //Starting with a white background&lt;br /&gt;
        m_spRT-&amp;gt;Clear(D2D1::ColorF(D2D1::ColorF::Blue));&lt;br /&gt;
    &lt;br /&gt;
        ////Original Bitmap&lt;br /&gt;
        m_spRT-&amp;gt;SetTransform(D2D1::Matrix3x2F::Translation(D2D1::SizeF(5, 5)));&lt;br /&gt;
        m_spRT-&amp;gt;FillRectangle(&amp;amp;rcBrushRect,m_spOriginalBitmapBrush);&lt;br /&gt;
        m_spRT-&amp;gt;DrawRectangle(&amp;amp;rcBrushRect,m_spBlackBrush,1,NULL);&lt;br /&gt;
  &lt;/p&gt;
&lt;p&gt;  //&lt;br /&gt;
//  m_spRT-&amp;gt;DrawBitmap(m_spOpacityMask);&lt;br /&gt;
        //&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;  //Caption using a DirectWrite format from m_spDWriteFactory-&amp;gt;CreateTextFormat&lt;br /&gt;
        m_spRT-&amp;gt;DrawText(m_wszOriginalBitmapText,&lt;br /&gt;
            wcslen(m_wszOriginalBitmapText),&lt;br /&gt;
            m_spTextFormat,&lt;br /&gt;
            &amp;amp;rcTextRect,&lt;br /&gt;
            m_spBlackBrush);&lt;/p&gt;
&lt;p&gt;        //Linear Gradient Opacity Mask&lt;br /&gt;
        m_spRT-&amp;gt;SetTransform(D2D1::Matrix3x2F::Translation(D2D1::SizeF(255, 5)));&lt;br /&gt;
        m_spRT-&amp;gt;FillRectangle(&amp;amp;rcBrushRect,m_spCheckerPatternBitmapBrush);&lt;br /&gt;
        m_spRT-&amp;gt;FillRectangle(&amp;amp;rcBrushRect,m_spLinearGradientBrush);&lt;br /&gt;
        m_spRT-&amp;gt;DrawRectangle(&amp;amp;rcBrushRect,m_spBlackBrush,1,NULL);&lt;/p&gt;
&lt;p&gt;        //Caption using a DirectWrite format from m_spDWriteFactory-&amp;gt;CreateTextFormat&lt;br /&gt;
        m_spRT-&amp;gt;DrawText(m_wszLinearGradientOpacityMaskText,&lt;br /&gt;
            wcslen(m_wszLinearGradientOpacityMaskText),&lt;br /&gt;
            m_spTextFormat,&lt;br /&gt;
            &amp;amp;rcTextRect,&lt;br /&gt;
            m_spBlackBrush);&lt;/p&gt;
&lt;p&gt;        //Radial Gradient Opacity Mask&lt;br /&gt;
        m_spRT-&amp;gt;SetTransform(D2D1::Matrix3x2F::Translation(D2D1::SizeF(255, 255)));&lt;br /&gt;
        m_spRT-&amp;gt;FillRectangle(&amp;amp;rcBrushRect,m_spCheckerPatternBitmapBrush);&lt;br /&gt;
        m_spRT-&amp;gt;FillRectangle(&amp;amp;rcBrushRect,m_spRadialGradientBrush);&lt;br /&gt;
        m_spRT-&amp;gt;DrawRectangle(&amp;amp;rcBrushRect,m_spBlackBrush,1,NULL);&lt;/p&gt;
&lt;p&gt;        //Caption using a DirectWrite format from m_spDWriteFactory-&amp;gt;CreateTextFormat&lt;br /&gt;
        m_spRT-&amp;gt;DrawText(m_wszRadialGradientOpacityMaskText,&lt;br /&gt;
            wcslen(m_wszRadialGradientOpacityMaskText),&lt;br /&gt;
            m_spTextFormat,&lt;br /&gt;
            &amp;amp;rcTextRect,&lt;br /&gt;
            m_spBlackBrush);&lt;/p&gt;
&lt;p&gt;        //Bitmap Opacity Mask&lt;br /&gt;
        m_spRT-&amp;gt;SetTransform(D2D1::Matrix3x2F::Translation(D2D1::SizeF(255, 505)));&lt;br /&gt;
        m_spRT-&amp;gt;FillRectangle(&amp;amp;rcBrushRect,m_spCheckerPatternBitmapBrush);&lt;br /&gt;
        m_spRT-&amp;gt;FillRectangle(&amp;amp;rcBrushRect,m_spBitmapMaskBrush);&lt;br /&gt;
        m_spRT-&amp;gt;DrawRectangle(&amp;amp;rcBrushRect,m_spBlackBrush,1,NULL);&lt;/p&gt;
&lt;p&gt;        //Caption using a DirectWrite format from m_spDWriteFactory-&amp;gt;CreateTextFormat&lt;br /&gt;
        m_spRT-&amp;gt;DrawText(m_wszBitmapBrushOpacityMaskText,&lt;br /&gt;
            wcslen(m_wszBitmapBrushOpacityMaskText),&lt;br /&gt;
            m_spTextFormat,&lt;br /&gt;
            &amp;amp;rcTextRect,&lt;br /&gt;
            m_spBlackBrush);&lt;br /&gt;
        &lt;br /&gt;
        //Bitmap with Linear Gradient Opacity Brush&lt;br /&gt;
        m_spRT-&amp;gt;SetTransform(D2D1::Matrix3x2F::Translation(D2D1::SizeF(505, 5)));    &lt;br /&gt;
        m_spRT-&amp;gt;FillGeometry(m_spRectGeo,m_spOriginalBitmapBrush,m_spLinearGradientBrush);&lt;br /&gt;
        m_spRT-&amp;gt;DrawRectangle(&amp;amp;rcBrushRect,m_spBlackBrush,1,NULL);&lt;br /&gt;
        &lt;br /&gt;
        //Caption using a DirectWrite format from m_spDWriteFactory-&amp;gt;CreateTextFormat&lt;br /&gt;
        m_spRT-&amp;gt;DrawText(m_wszWithLinearGradientOpacityMaskText,&lt;br /&gt;
            wcslen(m_wszWithLinearGradientOpacityMaskText),&lt;br /&gt;
            m_spTextFormat,&lt;br /&gt;
            &amp;amp;rcTextRect,&lt;br /&gt;
            m_spBlackBrush);&lt;/p&gt;
&lt;p&gt;        //Bitmap with Radial Gradient Opacity Brush&lt;br /&gt;
        m_spRT-&amp;gt;SetTransform(D2D1::Matrix3x2F::Translation(D2D1::SizeF(505, 255)));    &lt;br /&gt;
        m_spRT-&amp;gt;FillGeometry(m_spRectGeo,m_spOriginalBitmapBrush,m_spRadialGradientBrush);&lt;br /&gt;
        m_spRT-&amp;gt;DrawRectangle(&amp;amp;rcBrushRect,m_spBlackBrush,1,NULL);&lt;br /&gt;
        &lt;br /&gt;
        //Caption using a DirectWrite format from m_spDWriteFactory-&amp;gt;CreateTextFormat&lt;br /&gt;
        m_spRT-&amp;gt;DrawText(m_wszWithRadialGradientOpacityMaskText,&lt;br /&gt;
            wcslen(m_wszWithRadialGradientOpacityMaskText),&lt;br /&gt;
            m_spTextFormat,&lt;br /&gt;
            &amp;amp;rcTextRect,&lt;br /&gt;
            m_spBlackBrush);&lt;br /&gt;
    &lt;/p&gt;
&lt;p&gt;        //Bitmap with Bitmap Opacity Brush&lt;br /&gt;
        m_spRT-&amp;gt;SetTransform(D2D1::Matrix3x2F::Translation(D2D1::SizeF(505, 505)));    &lt;/p&gt;
&lt;p&gt;        //D2D1_ANTIALIAS_MODE_ALIASED must be set for FillOpacityMask to function properly&lt;br /&gt;
        m_spRT-&amp;gt;SetAntialiasMode(D2D1_ANTIALIAS_MODE_ALIASED);&lt;br /&gt;
       &lt;br /&gt;
  m_spRT-&amp;gt;FillOpacityMask(&lt;br /&gt;
   m_spBitmap,&lt;br /&gt;
            m_spBitmapMaskBrush,&lt;br /&gt;
   D2D1_OPACITY_MASK_CONTENT_GRAPHICS,&lt;br /&gt;
            0,&lt;br /&gt;
   0);&lt;/p&gt;
&lt;p&gt;        m_spRT-&amp;gt;DrawRectangle(&amp;amp;rcBrushRect,m_spBlackBrush,1,NULL);&lt;/p&gt;
&lt;p&gt;        //Caption using a DirectWrite format from m_spDWriteFactory-&amp;gt;CreateTextFormat&lt;br /&gt;
        m_spRT-&amp;gt;DrawText(m_wszWithBitmapBrushOpacityMaskText,&lt;br /&gt;
            wcslen(m_wszWithBitmapBrushOpacityMaskText),&lt;br /&gt;
            m_spTextFormat,&lt;br /&gt;
            &amp;amp;rcTextRect,&lt;br /&gt;
            m_spBlackBrush);&lt;/p&gt;
&lt;p&gt;    &lt;br /&gt;
        hr = m_spRT-&amp;gt;EndDraw();&lt;br /&gt;
    }&lt;/p&gt;
&lt;p&gt;    if (hr == D2DERR_RECREATE_TARGET)&lt;br /&gt;
    {&lt;br /&gt;
        DiscardDeviceResources();&lt;br /&gt;
    }&lt;/p&gt;
&lt;p&gt;    return S_OK;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;/******************************************************************&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  DemoApp::OnResize                                              *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  If the application receives a WM_SIZE message, this method     *&lt;br /&gt;
*  resize the render target appropriately.                        *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
******************************************************************/&lt;/p&gt;
&lt;p&gt;void DemoApp::OnResize(UINT width, UINT height)&lt;br /&gt;
{&lt;br /&gt;
    if (m_spRT)&lt;br /&gt;
    {&lt;br /&gt;
        D2D1_SIZE_U size;&lt;br /&gt;
        size.width = width;&lt;br /&gt;
        size.height = height;&lt;br /&gt;
        HRESULT hr = m_spRT-&amp;gt;Resize(size);&lt;/p&gt;
&lt;p&gt;        // If we couldn&amp;#39;t resize, release it and we&amp;#39;ll recreate it&lt;br /&gt;
        // during the next render pass.&lt;br /&gt;
        if (FAILED(hr))&lt;br /&gt;
        {&lt;br /&gt;
            DiscardDeviceResources();&lt;br /&gt;
            InvalidateRect(m_hwnd, NULL, FALSE);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;/******************************************************************&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  DemoApp::WndProc                                               *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
*  Window message handler                                         *&lt;br /&gt;
*                                                                 *&lt;br /&gt;
******************************************************************/&lt;/p&gt;
&lt;p&gt;LRESULT CALLBACK DemoApp::WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)&lt;br /&gt;
{&lt;br /&gt;
    if (message == WM_CREATE)&lt;br /&gt;
    {&lt;br /&gt;
        LPCREATESTRUCT pcs = (LPCREATESTRUCT)lParam;&lt;br /&gt;
        DemoApp *pDemoApp = (DemoApp *)pcs-&amp;gt;lpCreateParams;&lt;/p&gt;
&lt;p&gt;        ::SetWindowLongPtrW(&lt;br /&gt;
            hwnd,&lt;br /&gt;
            GWLP_USERDATA,&lt;br /&gt;
            PtrToUlong(pDemoApp));&lt;/p&gt;
&lt;p&gt;        return 1;&lt;br /&gt;
    }&lt;/p&gt;
&lt;p&gt;    DemoApp *pDemoApp = reinterpret_cast&amp;lt;DemoApp *&amp;gt;(static_cast&amp;lt;LONG_PTR&amp;gt;(&lt;br /&gt;
                ::GetWindowLongPtrW(hwnd, GWLP_USERDATA)));&lt;/p&gt;
&lt;p&gt;    if (pDemoApp)&lt;br /&gt;
    {&lt;br /&gt;
        switch(message)&lt;br /&gt;
        {&lt;br /&gt;
        case WM_SIZE:&lt;br /&gt;
            {&lt;br /&gt;
                UINT width = LOWORD(lParam);&lt;br /&gt;
                UINT height = HIWORD(lParam);&lt;br /&gt;
                pDemoApp-&amp;gt;OnResize(width, height);&lt;br /&gt;
                //InvalidateRect(hwnd, NULL, true); &lt;br /&gt;
            }&lt;br /&gt;
            return 0;&lt;/p&gt;
&lt;p&gt;        case WM_PAINT:&lt;br /&gt;
        case WM_DISPLAYCHANGE:&lt;br /&gt;
            {&lt;br /&gt;
                Sleep(200);&lt;br /&gt;
    PAINTSTRUCT ps;&lt;br /&gt;
                BeginPaint(hwnd, &amp;amp;ps);&lt;br /&gt;
                pDemoApp-&amp;gt;OnRender(ps);&lt;br /&gt;
                EndPaint(hwnd, &amp;amp;ps);&lt;br /&gt;
            }&lt;br /&gt;
            return 0;&lt;/p&gt;
&lt;p&gt;        case WM_DESTROY:&lt;br /&gt;
            {&lt;br /&gt;
                PostQuitMessage(0);&lt;br /&gt;
            }&lt;br /&gt;
            return 1;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return DefWindowProc(hwnd, message, wParam, lParam);&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;//&lt;br /&gt;
//&lt;br /&gt;
//&lt;br /&gt;
// Creates a Direct2D bitmap from the specified &lt;br /&gt;
// file name.&lt;br /&gt;
//&lt;br /&gt;
//&lt;br /&gt;
//&lt;br /&gt;
HRESULT DemoApp::LoadBitmapFromFile(&lt;br /&gt;
    ID2D1RenderTarget *pRenderTarget,&lt;br /&gt;
    IWICImagingFactory *pIWICFactory,&lt;br /&gt;
    PCWSTR uri,&lt;br /&gt;
    UINT destinationWidth,&lt;br /&gt;
    UINT destinationHeight,&lt;br /&gt;
    __deref_out ID2D1Bitmap **ppBitmap&lt;br /&gt;
    )&lt;br /&gt;
{&lt;br /&gt;
    HRESULT hr = S_OK;&lt;br /&gt;
   &lt;br /&gt;
    IWICBitmapDecoderPtr spDecoder;&lt;br /&gt;
    IWICBitmapFrameDecodePtr spSource;&lt;br /&gt;
    IWICStreamPtr spStream;&lt;br /&gt;
    IWICFormatConverterPtr spConverter;&lt;br /&gt;
    IWICBitmapScalerPtr spScaler;&lt;/p&gt;
&lt;p&gt;    IFR(pIWICFactory-&amp;gt;CreateDecoderFromFilename(&lt;br /&gt;
        uri, NULL, GENERIC_READ, WICDecodeMetadataCacheOnLoad, &amp;amp;spDecoder&lt;br /&gt;
        )); &lt;br /&gt;
    &lt;br /&gt;
    // Create the initial frame.&lt;br /&gt;
    IFR(spDecoder-&amp;gt;GetFrame(0, &amp;amp;spSource));&lt;/p&gt;
&lt;p&gt;    // Convert the image format to 32bppPBGRA -- which Direct2D expects.&lt;br /&gt;
    IFR(pIWICFactory-&amp;gt;CreateFormatConverter(&amp;amp;spConverter));&lt;/p&gt;
&lt;p&gt;    // If a new width or height was specified, create an &lt;br /&gt;
    // IWICBitmapScaler and use it to resize the image.&lt;br /&gt;
    if (destinationWidth != 0 || destinationHeight != 0){&lt;/p&gt;
&lt;p&gt;        UINT originalWidth, originalHeight;&lt;br /&gt;
        spSource-&amp;gt;GetSize(&amp;amp;originalWidth, &amp;amp;originalHeight);&lt;/p&gt;
&lt;p&gt;        if (destinationWidth == 0){&lt;br /&gt;
            FLOAT scalar = static_cast&amp;lt;FLOAT&amp;gt;(destinationHeight) / static_cast&amp;lt;FLOAT&amp;gt;(originalHeight);&lt;br /&gt;
            destinationWidth = static_cast&amp;lt;UINT&amp;gt;(scalar * static_cast&amp;lt;FLOAT&amp;gt;(originalWidth));&lt;br /&gt;
        }&lt;br /&gt;
        else if (destinationHeight == 0) {&lt;br /&gt;
            FLOAT scalar = static_cast&amp;lt;FLOAT&amp;gt;(destinationWidth) / static_cast&amp;lt;FLOAT&amp;gt;(originalWidth);&lt;br /&gt;
            destinationHeight = static_cast&amp;lt;UINT&amp;gt;(scalar * static_cast&amp;lt;FLOAT&amp;gt;(originalHeight));&lt;br /&gt;
        }&lt;/p&gt;
&lt;p&gt;        IFR(pIWICFactory-&amp;gt;CreateBitmapScaler(&amp;amp;spScaler));&lt;br /&gt;
        IFR(spScaler-&amp;gt;Initialize(&lt;br /&gt;
                spSource, &lt;br /&gt;
                destinationWidth, &lt;br /&gt;
                destinationHeight, &lt;br /&gt;
                WICBitmapInterpolationModeCubic&lt;br /&gt;
                ));&lt;br /&gt;
    &lt;br /&gt;
        IFR(spConverter-&amp;gt;Initialize(&lt;br /&gt;
            spScaler,&lt;br /&gt;
            GUID_WICPixelFormat32bppPBGRA,&lt;br /&gt;
            WICBitmapDitherTypeNone,&lt;br /&gt;
            NULL,&lt;br /&gt;
            0.f,&lt;br /&gt;
            WICBitmapPaletteTypeMedianCut&lt;br /&gt;
            ));&lt;br /&gt;
    }&lt;br /&gt;
    else // Don&amp;#39;t scale the image.&lt;br /&gt;
    {&lt;/p&gt;
&lt;p&gt;        IFR(spConverter-&amp;gt;Initialize(&lt;br /&gt;
            spSource,&lt;br /&gt;
            GUID_WICPixelFormat32bppPBGRA,&lt;br /&gt;
            WICBitmapDitherTypeNone,&lt;br /&gt;
            NULL,&lt;br /&gt;
            0.f,&lt;br /&gt;
            WICBitmapPaletteTypeMedianCut&lt;br /&gt;
            ));&lt;/p&gt;
&lt;p&gt;    }&lt;/p&gt;
&lt;p&gt;    // Create a Direct2D bitmap from the WIC bitmap.&lt;br /&gt;
    IFR(pRenderTarget-&amp;gt;CreateBitmapFromWicBitmap(&lt;br /&gt;
        spConverter,&lt;br /&gt;
        NULL,&lt;br /&gt;
        ppBitmap&lt;br /&gt;
        ));&lt;/p&gt;
&lt;p&gt;    return hr;&lt;br /&gt;
}&lt;/p&gt;</description></item><item><title>Re: Direct2D/DirectWrite questions where?</title><link>http://forums.xna.com/forums/thread/161352.aspx</link><pubDate>Thu, 09 Apr 2009 08:59:57 GMT</pubDate><guid isPermaLink="false">4aa5dbf6-357b-46b2-b5b2-1b660a6dc370:161352</guid><dc:creator>Bjoern Graf</dc:creator><slash:comments>0</slash:comments><comments>http://forums.xna.com/forums/thread/161352.aspx</comments><wfw:commentRss>http://forums.xna.com/forums/commentrss.aspx?SectionID=50&amp;PostID=161352</wfw:commentRss><description>I know. I even answered one or two questions on there a few years ago :) I just expected a more lively, low newcomer noise place somewhere...</description></item><item><title>Re: Direct2D/DirectWrite questions where?</title><link>http://forums.xna.com/forums/thread/161328.aspx</link><pubDate>Thu, 09 Apr 2009 07:14:00 GMT</pubDate><guid isPermaLink="false">4aa5dbf6-357b-46b2-b5b2-1b660a6dc370:161328</guid><dc:creator>The ZMan</dc:creator><slash:comments>0</slash:comments><comments>http://forums.xna.com/forums/thread/161328.aspx</comments><wfw:commentRss>http://forums.xna.com/forums/commentrss.aspx?SectionID=50&amp;PostID=161328</wfw:commentRss><description>Ye, its quiet but it does get good answers when you ask. IMO the best native DirectX place...</description></item><item><title>Re: Direct2D/DirectWrite questions where?</title><link>http://forums.xna.com/forums/thread/161205.aspx</link><pubDate>Thu, 09 Apr 2009 01:38:30 GMT</pubDate><guid isPermaLink="false">4aa5dbf6-357b-46b2-b5b2-1b660a6dc370:161205</guid><dc:creator>Bjoern Graf</dc:creator><slash:comments>0</slash:comments><comments>http://forums.xna.com/forums/thread/161205.aspx</comments><wfw:commentRss>http://forums.xna.com/forums/commentrss.aspx?SectionID=50&amp;PostID=161205</wfw:commentRss><description>The DirectX-l is this one &lt;a href="http://discussms.hosting.lsoft.com/SCRIPTS/WA-MSD.EXE?A0=DIRECTXDEV"&gt;DIRECTXDEV List&lt;/a&gt;? If so, it is pretty quiet, too...</description></item><item><title>Re: Direct2D/DirectWrite questions where?</title><link>http://forums.xna.com/forums/thread/161195.aspx</link><pubDate>Thu, 09 Apr 2009 01:12:38 GMT</pubDate><guid isPermaLink="false">4aa5dbf6-357b-46b2-b5b2-1b660a6dc370:161195</guid><dc:creator>The ZMan</dc:creator><slash:comments>0</slash:comments><comments>http://forums.xna.com/forums/thread/161195.aspx</comments><wfw:commentRss>http://forums.xna.com/forums/commentrss.aspx?SectionID=50&amp;PostID=161195</wfw:commentRss><description>You are one of the brave and the few... there&amp;#39;s just not ever been enough folk in here answering questions for it to gain traction after they killed off the original MSDN forums - and even those had little native support. No forum has ever been added becuase an MVP asked - I gave up on fighting that battle a long time ago.&lt;br /&gt;
&lt;br /&gt;
My feel is that the support you see in these forums from the DirectX team tells you exactly how much they worry about small community people using their technology. The team and the experts are in DirectX-l so i send people there.</description></item><item><title>Re: Direct2D/DirectWrite questions where?</title><link>http://forums.xna.com/forums/thread/161122.aspx</link><pubDate>Wed, 08 Apr 2009 22:31:47 GMT</pubDate><guid isPermaLink="false">4aa5dbf6-357b-46b2-b5b2-1b660a6dc370:161122</guid><dc:creator>Bjoern Graf</dc:creator><slash:comments>0</slash:comments><comments>http://forums.xna.com/forums/thread/161122.aspx</comments><wfw:commentRss>http://forums.xna.com/forums/commentrss.aspx?SectionID=50&amp;PostID=161122</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://forums.xna.com//Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;The ZMan:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;I somehow doubt we will see a forum appear, xna.com is NOT where DirectX folk come to ask questions for the most part... they go to gamedev.net or DirectX-l&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;br /&gt;
&lt;br /&gt;
Oh, what am &lt;em&gt;I&lt;/em&gt; doing in here then? :O And why would anyone want to come to these forums when the technologies they might be interested in is burried in some &amp;quot;random&amp;quot; general forum? At least these forums are not as overloaded as the &lt;a href="http://forums.xna.com/forums/social.msdn.micorosoft.com"&gt;MSDN Forums&lt;/a&gt;... Anyway, use your MVP powers to get &lt;em&gt;them&lt;/em&gt; add a dedicated D2D/DW forum!!11</description></item><item><title>Re: Direct2D/DirectWrite questions where?</title><link>http://forums.xna.com/forums/thread/161107.aspx</link><pubDate>Wed, 08 Apr 2009 21:53:39 GMT</pubDate><guid isPermaLink="false">4aa5dbf6-357b-46b2-b5b2-1b660a6dc370:161107</guid><dc:creator>The ZMan</dc:creator><slash:comments>0</slash:comments><comments>http://forums.xna.com/forums/thread/161107.aspx</comments><wfw:commentRss>http://forums.xna.com/forums/commentrss.aspx?SectionID=50&amp;PostID=161107</wfw:commentRss><description>OK I meant that DirectX -&amp;gt; General is not specific to 3d and would be suitable ;-)&lt;br /&gt;
&lt;br /&gt;
I somehow doubt we will see a forum appear, xna.com is NOT where DirectX folk come to ask questions for the most part... they go to gamedev.net or DirectX-l&lt;br /&gt;
&lt;br /&gt;
Its a good job you are my #1 fan...</description></item><item><title>Re: Direct2D/DirectWrite questions where?</title><link>http://forums.xna.com/forums/thread/161091.aspx</link><pubDate>Wed, 08 Apr 2009 20:59:11 GMT</pubDate><guid isPermaLink="false">4aa5dbf6-357b-46b2-b5b2-1b660a6dc370:161091</guid><dc:creator>Bjoern Graf</dc:creator><slash:comments>0</slash:comments><comments>http://forums.xna.com/forums/thread/161091.aspx</comments><wfw:commentRss>http://forums.xna.com/forums/commentrss.aspx?SectionID=50&amp;PostID=161091</wfw:commentRss><description>I do not like to correct The ZMan but there&amp;#39;s no DirectX &lt;em&gt;forum&lt;/em&gt;, only a DirectX &lt;em&gt;category&lt;/em&gt; with D3D, D3D10, XACT/Audio and General forums. I expect a Direct2D/DirectWrite forum to popup once these technologies reach the RTM status &lt;span style="font-family:courier new;"&gt;:]&lt;/span&gt;</description></item><item><title>Re: Direct2D/DirectWrite questions where?</title><link>http://forums.xna.com/forums/thread/160883.aspx</link><pubDate>Wed, 08 Apr 2009 16:18:54 GMT</pubDate><guid isPermaLink="false">4aa5dbf6-357b-46b2-b5b2-1b660a6dc370:160883</guid><dc:creator>The ZMan</dc:creator><slash:comments>0</slash:comments><comments>http://forums.xna.com/forums/thread/160883.aspx</comments><wfw:commentRss>http://forums.xna.com/forums/commentrss.aspx?SectionID=50&amp;PostID=160883</wfw:commentRss><description>&lt;span style="background-color:#f4f7f5;"&gt;Yes this is the correct place for it - the forum is actually called DirectX not Direct3D so it includes everything that is not XNA Game Studio/Framework.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;</description></item><item><title>Re: Direct2D/DirectWrite questions where?</title><link>http://forums.xna.com/forums/thread/160787.aspx</link><pubDate>Wed, 08 Apr 2009 12:22:43 GMT</pubDate><guid isPermaLink="false">4aa5dbf6-357b-46b2-b5b2-1b660a6dc370:160787</guid><dc:creator>Bjoern Graf</dc:creator><slash:comments>0</slash:comments><comments>http://forums.xna.com/forums/thread/160787.aspx</comments><wfw:commentRss>http://forums.xna.com/forums/commentrss.aspx?SectionID=50&amp;PostID=160787</wfw:commentRss><description>That might be the best fitting forum right now.</description></item><item><title>Direct2D/DirectWrite questions where?</title><link>http://forums.xna.com/forums/thread/160755.aspx</link><pubDate>Wed, 08 Apr 2009 10:15:49 GMT</pubDate><guid isPermaLink="false">4aa5dbf6-357b-46b2-b5b2-1b660a6dc370:160755</guid><dc:creator>t sch</dc:creator><slash:comments>0</slash:comments><comments>http://forums.xna.com/forums/thread/160755.aspx</comments><wfw:commentRss>http://forums.xna.com/forums/commentrss.aspx?SectionID=50&amp;PostID=160755</wfw:commentRss><description>Hi,&lt;br /&gt;
do I ask Direct2D or DirectWrite questions in the Direct3D forum?&lt;br /&gt;
&lt;br /&gt;
Thanks,&lt;br /&gt;
Thomas&lt;br /&gt;</description></item></channel></rss>