{"id":3454,"date":"2012-05-24T15:29:03","date_gmt":"2012-05-23T21:29:03","guid":{"rendered":"http:\/\/www.moonmile.net\/blog\/archives\/3454"},"modified":"2012-05-24T15:32:08","modified_gmt":"2012-05-24T06:32:08","slug":"win8-%e7%94%bb%e5%83%8f%e5%8a%a0%e5%b7%a5%e3%82%92directx%e3%81%ab%e4%bb%bb%e3%81%9b%e3%81%a6%e3%80%81ui%e3%81%afc%e3%81%ab%e3%81%99%e3%82%8b%e6%8a%80","status":"publish","type":"post","link":"http:\/\/www.moonmile.net\/blog\/archives\/3454","title":{"rendered":"[win8] \u753b\u50cf\u52a0\u5de5\u3092DirectX\u306b\u4efb\u305b\u3066\u3001UI\u306fC#\u306b\u3059\u308b\u6280"},"content":{"rendered":"<p>[win8] \u30b9\u30bf\u30fc\u30c8\u753b\u9762\u306e\u30bf\u30a4\u30eb\u3092\u52d5\u7684\u306b\u4f5c\u6210\u3059\u308b\uff08\u524d\u54e8\u6226\uff09 | Moonmile Solutions Blog<br \/>\n<a href=\"http:\/\/www.moonmile.net\/blog\/archives\/3443\">http:\/\/www.moonmile.net\/blog\/archives\/3443<\/a><\/p>\n<p>\u304b\u3089\u3061\u3087\u3063\u3068\u6a2a\u9053\u306b\u9038\u308c\u3066\u3001\u753b\u50cf\u30c7\u30fc\u30bf\uff08BitmapImage\uff09\u306b\u76f4\u63a5\u66f8\u304d\u8fbc\u3080\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u3066\u304a\u304d\u307e\u3059\u3002<br \/>\nmetro \u306e Image \u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u306b\u306f Source \u30d7\u30ed\u30d1\u30c6\u30a3\u306b BitmapImage \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u76f4\u63a5\u6307\u5b9a\u3067\u304d\u307e\u3059\u3002BitmapImage \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u6307\u5b9a\u3082\u3067\u304d\u308b\u306e\u3067\u3059\u304c\u3001\u76f4\u63a5\u30e1\u30e2\u30ea\u304b\u3089\u4f5c\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3001\u3063\u3066\u3053\u3068\u3067\u3059\u3002\u5358\u7d14\u306a\u3068\u3053\u308d\u3067\u306f\u3001\u3053\u3093\u306a\u611f\u3058\u3002<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nprivate async void Button_Click_2(object sender, RoutedEventArgs e)\r\n{\r\n\tvar mem = new InMemoryRandomAccessStream();\r\n\tvar enc = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, mem);\r\n\r\n\tint width = 140, height = 140;\r\n\tint plane = 4;\r\n\tbyte&#x5B;] data = new byte&#x5B;width * height * plane];\r\n\tint offset = 0;\r\n\tfor (int y = 0; y &lt; width; y++)\r\n\t{\r\n\t\tfor (int x = 0; x &lt; height; x++)\r\n\t\t{\r\n\t\t\tdata&#x5B;offset + 0] = 0xFF; \/\/ R\r\n\t\t\tdata&#x5B;offset + 1] = 0x00; \/\/ G\r\n\t\t\tdata&#x5B;offset + 2] = 0x00; \/\/ B\r\n\t\t\tdata&#x5B;offset + 3] = 0xFF; \/\/ Alpha\r\n\t\t\toffset += 4;\r\n\t\t}\r\n\t}\r\n\tenc.SetPixelData(BitmapPixelFormat.Rgba8, BitmapAlphaMode.Straight,\r\n\t\t(uint)width, (uint)height, 96, 96, data);\r\n\tawait enc.FlushAsync();\r\n\r\n\tBitmapImage bmp = new BitmapImage();\r\n\tbmp.SetSource(mem);\r\n\timage1.Source = bmp;\r\n}\r\n<\/pre>\n<p>\u3053\u308c\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001140&#215;140 \u306e\u77e9\u5f62\u304c\u8d64\u3067\u5857\u308a\u3064\u3076\u3055\u308c\u307e\u3059\uff08\u3053\u308c\u81ea\u4f53\u306e\u30b5\u30f3\u30d7\u30eb\u304c\u3042\u305f\u306e\u3067\u3059\u304c\u3001URL\u3092\u5fd8\u5374\u3002\u898b\u3064\u3051\u305f\u3089\u8a18\u9332\u3057\u3066\u304a\u304d\u307e\u3059\uff09\u3002<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2012\/05\/wpid-dworkblogimage20120524_01.jpg\" border=\"0\" \/><\/p>\n<p>\u30e1\u30e2\u30ea\u4e0a\u3067\u64cd\u4f5c\u3059\u308b\u5834\u5408\u306f\u3001byte[] \u3068 InMemoryRandomAccessStream \u3092\u4f7f\u3044\u307e\u3059\u3002\u3053\u306e\u3042\u305f\u308a\u3044\u304f\u3064\u304b\u306e\u65b9\u6cd5\u304c\u3042\u308b\u306e\u3067\u3059\u304c\u3001\u7d50\u8ad6\u304b\u3089\u8a00\u3048\u3070\u300c\u65b9\u6cd5\u300d\u81ea\u4f53\u306f\u3069\u3046\u3067\u3082\u3088\u304f\u3066\u3001.NET Framework \u306e\u3088\u3046\u306b System.Drawing \u304c\u4f7f\u3048\u308b\u3068\u4fbf\u5229\u306a\u3093\u3067\u3059\u3051\u3069\u306d\u3047\u3001\u3068\u3044\u3046\u5177\u5408\u3067\u3059\u3002<\/p>\n<p>\u3053\u3093\u306a\u98a8\u306b\u8272\u3092\u5857\u308a\u3064\u3076\u3059\u3060\u3051\u306a\u3089\u3070\u7c21\u5358\u306b\u3067\u308b\u3057\u3001\u753b\u50cf\u3092\u8cbc\u308a\u3064\u3051\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\u56de\u8ee2\u306a\u3069\u306e\u30e1\u30bd\u30c3\u30c9\u3082\u3042\u3063\u305f\u306e\u3067\u3001\u305d\u306e\u304f\u3089\u3044\u306f\u3067\u304d\u305d\u3046\u306a\u306e\u3067\u3059\u304c\u3001\u6839\u672c\u7684\u306b\u6a5f\u80fd\u4e0d\u8db3\u306f\u5426\u3081\u307e\u305b\u3093\u3002<\/p>\n<p>\u306a\u306e\u3067\u3001\u5148\u306e\u8a18\u4e8b\u306e\u3088\u3046\u306b DirectX \u3092\u76f4\u63a5\u6271\u3044\u307e\u3059\u3002 DirectX \u306f C++\/CX \u304b\u3089\u6271\u3046\u3053\u3068\u306b\u306a\u308b\u306e\u3067\u3001C#\u3084VB\u306e\u30d7\u30ed\u30b0\u30e9\u30de\u306b\u306f\u8f9b\u3044\u3068\u3053\u308d\u304c\u3042\u308a\u307e\u3059\u3002\u307e\u305f\u3001C++\/CX \u304b\u3089\u76f4\u63a5.NET Framework \u3092\u6271\u3048\u306a\u3044\uff08C#\u3092\u7d4c\u7531\u3057\u3066\u6271\u3046\u3053\u3068\u306f\u53ef\u80fd\uff09\u306a\u306e\u3067\u3001\u3053\u308c\u3082\u75db\u3057\u304b\u3086\u3057\u3068\u3044\u3046\u5177\u5408\u3067\u3059\u3002\u306a\u306e\u3067\u3001\u672c\u683c\u7684\u306a\u30b2\u30fc\u30e0\u3092\u4f5c\u308b\u5834\u5408\u306b\u306f\u5168\u753b\u9762\u3092 DirectX \u3092\u4f7f\u3046\u306e\u304c\u826f\u3044\u306e\u3067\u3057\u3087\u3046\u304c\u3001\u3061\u3087\u3063\u3068\u3057\u305f\u30d1\u30ba\u30eb\u30b2\u30fc\u30e0\u3084\u753b\u50cf\u306e\u52a0\u5de5\u30c4\u30fc\u30eb\u3050\u3089\u3044\u306a\u3089\u3070\u3001<\/p>\n<ul>\n<li>DirectX \u3092\u6271\u3046\u753b\u50cf\u52a0\u5de5\u306f C++\/CX \u306b\u62bc\u3057\u8fbc\u3081\u308b<\/li>\n<li>UI \u3092\u6271\u3046\u90e8\u5206\u306f C# \u3067\u6271\u3046<\/li>\n<\/ul>\n<p>\u5206\u3051\u65b9\u3092\u3059\u308b\u307b\u3046\u304c\u30d9\u30bf\u30fc\u3067\u3059\u3002<\/p>\n<p>\u3072\u3068\u307e\u305a\u3001\u5168\u30bd\u30fc\u30b9\u306f github \u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>win8\/DynamicMakeWritableBitmap<br \/>\n<a href=\"https:\/\/github.com\/moonmile\/win8\/tree\/master\/DynamicMakeWritableBitmap\">https:\/\/github.com\/moonmile\/win8\/tree\/master\/DynamicMakeWritableBitmap<\/a><\/p>\n<p>\u4f59\u8a08\u306a\u3068\u3053\u308d\u306f\u968f\u5206\u524a\u3063\u305f\u3064\u3082\u308a\u306a\u306e\u3067\u3059\u304c\u3001\u307e\u3060\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u3059\u308b\u306b\u306f\u5197\u9577\u306a\u611f\u3058\u306a\u306e\u3067\u3001\u3044\u307e\u3044\u3061\u306a\u306e\u3067\u3059\u304c\u3002Direct2D \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u308b\u6642\u306b\u81ea\u52d5\u4f5c\u6210\u3055\u308c\u308b DirectXBase.* \u304b\u3089\u629c\u304d\u51fa\u3057\u3066\u304d\u305f\u306e\u304c\u3001\u6b21\u306e\u30bd\u30fc\u30b9\u3067\u3059\u3002<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n#pragma once\r\n\r\nnamespace DX\r\n{\r\n    inline void ThrowIfFailed(HRESULT hr)\r\n    {\r\n        if (FAILED(hr))\r\n        {\r\n            \/\/ Set a breakpoint on this line to catch DirectX API errors\r\n            throw Platform::Exception::CreateException(hr);\r\n        }\r\n    }\r\n}\r\n\r\nnamespace MakeBitmapLib\r\n{\r\n    public ref class DXBitmap sealed\r\n    {\r\n    public:\r\n        DXBitmap();\r\n\t\tvoid Initialize();\r\n\t\tPlatform::Array&lt;unsigned char&gt;^ MakeText( Platform::String^ text );\r\n\r\nprotected:\r\n    \/\/ Direct2D Objects\r\n    Microsoft::WRL::ComPtr&lt;ID2D1Factory1&gt;          m_d2dFactory;\r\n    Microsoft::WRL::ComPtr&lt;ID2D1Device&gt;            m_d2dDevice;\r\n    Microsoft::WRL::ComPtr&lt;ID2D1DeviceContext&gt;     m_d2dContext;\r\n    Microsoft::WRL::ComPtr&lt;ID2D1Bitmap1&gt;           m_d2dTargetBitmap;\r\n\r\n    \/\/ DirectWrite &amp; Windows Imaging Component Objects\r\n    Microsoft::WRL::ComPtr&lt;IDWriteFactory1&gt;        m_dwriteFactory;\r\n    Microsoft::WRL::ComPtr&lt;IWICImagingFactory2&gt;    m_wicFactory;\r\n\r\n    \/\/ Direct3D Objects\r\n    Microsoft::WRL::ComPtr&lt;ID3D11Device1&gt;          m_d3dDevice;\r\n    Microsoft::WRL::ComPtr&lt;ID3D11DeviceContext1&gt;   m_d3dContext;\r\n    Microsoft::WRL::ComPtr&lt;IDXGISwapChain1&gt;        m_swapChain;\r\n    Microsoft::WRL::ComPtr&lt;ID3D11RenderTargetView&gt; m_renderTargetView;\r\n    Microsoft::WRL::ComPtr&lt;ID3D11DepthStencilView&gt; m_depthStencilView;\r\n\r\n\tD3D_FEATURE_LEVEL                              m_featureLevel;\r\n    Windows::Foundation::Size                      m_renderTargetSize;\r\n    Windows::Foundation::Rect                      m_windowBounds;\r\n    Windows::UI::Core::CoreWindow^                 m_window;\r\n    float                                          m_dpi;\r\n\t};\r\n}\r\n<\/pre>\n<p>protected \u306a\u3068\u3053\u308d\u306f\u3001DirectX \u95a2\u4fc2\u3067\u89e6\u308b COM \u3067\u3059\u306d\u3002\u4f59\u5206\u306a\u3068\u3053\u308d\u3082\u521d\u671f\u5316\u3055\u308c\u3066\u3057\u307e\u3044\u307e\u3059\u304c\u3001\u307e\u3041\u3001\u305d\u306e\u307e\u307e\u30b3\u30d4\u30fc\u3057\u3066\u304d\u6301\u3063\u3066\u304d\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u305d\u3057\u3066\u3001\u3053\u306e DirectX \u3092\u6271\u3046\u70ba\u306e\u30d8\u30c3\u30c0\u30d5\u30a1\u30a4\u30eb\u3092 pch.h \u306b\u5165\u308c\u3066\u304a\u304d\u307e\u3059\u3002pch.h \u306f\u30d7\u30ea\u30b3\u30f3\u30d1\u30a4\u30eb\u30d8\u30c3\u30c0\u306a\u306e\u3067\u3001\u56fa\u5b9a\u5316\u3055\u308c\u3066\u3044\u308b\u30d8\u30c3\u30c0\u30d5\u30a1\u30a4\u30eb\u3092\u7a81\u3063\u8fbc\u3093\u3067\u304a\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n#pragma once\r\n&lt;\/p&gt;\r\n&lt;p&gt;\r\n#include &lt;wrl.h&gt;\r\n#include &lt;d3d11_1.h&gt;\r\n#include &lt;d2d1_1.h&gt;\r\n#include &lt;d2d1effects.h&gt;\r\n#include &lt;dwrite_1.h&gt;\r\n#include &lt;wincodec.h&gt;\r\n<\/pre>\n<p>C++ \u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306f\u6b21\u306a\u611f\u3058\u3067\u3059\u306d\u3002Initialize \u30e1\u30bd\u30c3\u30c9\u3067\u521d\u671f\u5316\u3057\u3066\u304a\u3044\u3066\u3001MakeText \u30e1\u30bd\u30c3\u30c9\u3067\u753b\u50cf\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002Initialize \u30e1\u30bd\u30c3\u30c9\u306e\u4e2d\u8eab\u306f DirectXBase.cpp \u306e\u3082\u306e\u3092\u9069\u5b9c\u30b3\u30d4\u30fc\u3057\u3066\u4f7f\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n\/\/ WinRTComponent.cpp\r\n#include &amp;quot;pch.h&amp;quot;\r\n#include &amp;quot;WinRTComponent.h&amp;quot;\r\n\r\nusing namespace MakeBitmapLib;\r\nusing namespace Platform;\r\nusing namespace Microsoft::WRL;\r\nusing namespace Windows::UI::Core;\r\nusing namespace Windows::Foundation;\r\nusing namespace D2D1;\r\nusing namespace Windows::Storage::Streams;\r\n\r\nDXBitmap::DXBitmap()\r\n{\r\n}\r\nvoid DXBitmap::Initialize()\r\n{\r\n\t\/\/ CreateDeviceIndependentResources\r\n    D2D1_FACTORY_OPTIONS options;\r\n    ZeroMemory(&amp;options, sizeof(D2D1_FACTORY_OPTIONS));\r\n\r\n#if defined(_DEBUG)\r\n     \/\/ If the project is in a debug build, enable Direct2D debugging via SDK Layers.\r\n    options.debugLevel = D2D1_DEBUG_LEVEL_INFORMATION;\r\n#endif\r\n\r\n    DX::ThrowIfFailed(\r\n        D2D1CreateFactory(\r\n            D2D1_FACTORY_TYPE_SINGLE_THREADED,\r\n            __uuidof(ID2D1Factory1),\r\n            &amp;options,\r\n            &amp;m_d2dFactory\r\n            )\r\n        );\r\n\r\n    DX::ThrowIfFailed(\r\n        DWriteCreateFactory(\r\n            DWRITE_FACTORY_TYPE_SHARED,\r\n            __uuidof(IDWriteFactory),\r\n            &amp;m_dwriteFactory\r\n            )\r\n        );\r\n\r\n\tDX::ThrowIfFailed(\r\n        CoCreateInstance(\r\n            CLSID_WICImagingFactory,\r\n            nullptr,\r\n            CLSCTX_INPROC_SERVER,\r\n            IID_PPV_ARGS(&amp;m_wicFactory)\r\n            )\r\n        );\r\n\r\n    \/\/ This flag adds support for surfaces with a different color channel ordering than the API default.\r\n    \/\/ It is recommended usage, and is required for compatibility with Direct2D.\r\n    UINT creationFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;\r\n\r\n#if defined(_DEBUG)\r\n    \/\/ If the project is in a debug build, enable debugging via SDK Layers with this flag.\r\n    creationFlags |= D3D11_CREATE_DEVICE_DEBUG;\r\n#endif\r\n\r\n    \/\/ This array defines the set of DirectX hardware feature levels this app will support.\r\n    \/\/ Note the ordering should be preserved.\r\n    \/\/ Don&#039;t forget to declare your application&#039;s minimum required feature level in its\r\n    \/\/ description.  All applications are assumed to support 9.1 unless otherwise stated.\r\n    D3D_FEATURE_LEVEL featureLevels&#x5B;] =\r\n    {\r\n        D3D_FEATURE_LEVEL_11_1,\r\n        D3D_FEATURE_LEVEL_11_0,\r\n        D3D_FEATURE_LEVEL_10_1,\r\n        D3D_FEATURE_LEVEL_10_0,\r\n        D3D_FEATURE_LEVEL_9_3,\r\n        D3D_FEATURE_LEVEL_9_2,\r\n        D3D_FEATURE_LEVEL_9_1\r\n    };\r\n\r\n    \/\/ Create the DX11 API device object, and get a corresponding context.\r\n    ComPtr&lt;ID3D11Device&gt; d3dDevice;\r\n    ComPtr&lt;ID3D11DeviceContext&gt; d3dContext;\r\n    DX::ThrowIfFailed(\r\n        D3D11CreateDevice(\r\n            nullptr,                  \/\/ specify null to use the default adapter\r\n            D3D_DRIVER_TYPE_HARDWARE,\r\n            nullptr,                  \/\/ leave as nullptr unless software device\r\n            creationFlags,            \/\/ optionally set debug and Direct2D compatibility flags\r\n            featureLevels,            \/\/ list of feature levels this app can support\r\n            ARRAYSIZE(featureLevels), \/\/ number of entries in above list\r\n            D3D11_SDK_VERSION,        \/\/ always set this to D3D11_SDK_VERSION for modern\r\n            &amp;d3dDevice,               \/\/ returns the Direct3D device created\r\n            &amp;m_featureLevel,          \/\/ returns feature level of device created\r\n            &amp;d3dContext               \/\/ returns the device immediate context\r\n            )\r\n        );\r\n\r\n    \/\/ Get the DirectX11.1 device by QI off the DirectX11 one.\r\n    DX::ThrowIfFailed(\r\n        d3dDevice.As(&amp;m_d3dDevice)\r\n        );\r\n\r\n    \/\/ And get the corresponding device context in the same way.\r\n    DX::ThrowIfFailed(\r\n        d3dContext.As(&amp;m_d3dContext)\r\n        );\r\n\r\n    \/\/ Obtain the underlying DXGI device of the Direct3D11.1 device.\r\n    ComPtr&lt;IDXGIDevice&gt; dxgiDevice;\r\n    DX::ThrowIfFailed(\r\n        m_d3dDevice.As(&amp;dxgiDevice)\r\n        );\r\n\r\n    \/\/ Obtain the Direct2D device for 2D rendering.\r\n    DX::ThrowIfFailed(\r\n        m_d2dFactory-&gt;CreateDevice(dxgiDevice.Get(), &amp;m_d2dDevice)\r\n        );\r\n\r\n    \/\/ And get its corresponding device context object.\r\n    DX::ThrowIfFailed(\r\n        m_d2dDevice-&gt;CreateDeviceContext(\r\n            D2D1_DEVICE_CONTEXT_OPTIONS_NONE,\r\n            &amp;m_d2dContext\r\n            )\r\n        );\r\n\r\n    \/\/ Save the DPI of this display in our class.\r\n    m_d2dContext-&gt;SetDpi(m_dpi, m_dpi);\r\n\r\n    \/\/ Release the swap chain (if it exists) as it will be incompatible with\r\n    \/\/ the new device.\r\n    m_swapChain = nullptr;\r\n\r\n}\r\nPlatform::Array&lt;unsigned char&gt;^ DXBitmap::MakeText( Platform::String^ text )\r\n{\r\n\tIWICStream *pStream = NULL;\r\n    IWICBitmapEncoder *pEncoder = NULL;\r\n    IWICBitmapFrameEncode *pFrameEncode = NULL;\r\n    static const UINT sc_bitmapWidth = 140;\r\n    static const UINT sc_bitmapHeight = 140;\r\n    IWICBitmap *pWICBitmap = NULL;\r\n    ID2D1RenderTarget *pRT = NULL;\r\n    IDWriteTextFormat *pTextFormat = NULL;\r\n    ID2D1SolidColorBrush *pBlackBrush = NULL;\r\n\r\n\tDX::ThrowIfFailed(\r\n\t\tm_wicFactory-&gt;CreateBitmap(\r\n            sc_bitmapWidth,\r\n            sc_bitmapHeight,\r\n            GUID_WICPixelFormat32bppBGR,\r\n            WICBitmapCacheOnLoad,\r\n            &amp;pWICBitmap\r\n\t\t\t));\r\n\r\n\tDX::ThrowIfFailed(\r\n        m_d2dFactory-&gt;CreateWicBitmapRenderTarget(\r\n            pWICBitmap,\r\n            D2D1::RenderTargetProperties(),\r\n            &amp;pRT\r\n            ));\r\n\r\n        pRT-&gt;BeginDraw();\r\n        pRT-&gt;Clear(D2D1::ColorF(D2D1::ColorF::White));\r\n        D2D1_SIZE_F rtSize = pRT-&gt;GetSize();\r\n\r\n\t\t\/\/ static const WCHAR sc_fontName&#x5B;] = L&amp;quot;Calibri&amp;quot;;\r\n\t\tstatic const WCHAR sc_fontName&#x5B;] = L&amp;quot;HGP\u660e\u671dE&amp;quot;;\r\n        static const FLOAT sc_fontSize = 32;\r\n\r\n        m_dwriteFactory-&gt;CreateTextFormat(\r\n            sc_fontName,\r\n            NULL,\r\n            DWRITE_FONT_WEIGHT_NORMAL,\r\n            DWRITE_FONT_STYLE_NORMAL,\r\n            DWRITE_FONT_STRETCH_NORMAL,\r\n            sc_fontSize,\r\n            L&amp;quot;&amp;quot;, \/\/locale\r\n            &amp;pTextFormat\r\n            );\r\n\r\n        pRT-&gt;CreateSolidColorBrush(\r\n            D2D1::ColorF(D2D1::ColorF::Black),\r\n            &amp;pBlackBrush\r\n            );\r\n\r\n        pRT-&gt;DrawText(\r\n\t\t\ttext-&gt;Data(),\r\n\t\t\ttext-&gt;Length(),\r\n            pTextFormat,\r\n            D2D1::RectF(0, 0, rtSize.width, rtSize.height),\r\n            pBlackBrush);\r\n\r\n\t\tpRT-&gt;EndDraw();\r\n\r\n    \/\/ Save image to file\r\n    DX::ThrowIfFailed(\r\n\t\tm_wicFactory-&gt;CreateStream(&amp;pStream));\r\n\r\n    WICPixelFormatGUID format = GUID_WICPixelFormatDontCare;\r\n    \/\/    static const WCHAR filename&#x5B;] = L&amp;quot;output.png&amp;quot;;\r\n\r\n\tunsigned char buff&#x5B;sc_bitmapWidth*sc_bitmapHeight*4];\r\n\r\n\/\/\tDX::ThrowIfFailed(\r\n\/\/\t\tpStream-&gt;InitializeFromFilename(filename, GENERIC_WRITE));\r\n\tDX::ThrowIfFailed(\r\n\t\tpStream-&gt;InitializeFromMemory( buff, sizeof(buff)));\r\n    DX::ThrowIfFailed(\r\n\t\tm_wicFactory-&gt;CreateEncoder(GUID_ContainerFormatPng, NULL, &amp;pEncoder));\r\n\tDX::ThrowIfFailed(\r\n        pEncoder-&gt;Initialize(pStream, WICBitmapEncoderNoCache));\r\n    DX::ThrowIfFailed(\r\n        pEncoder-&gt;CreateNewFrame(&amp;pFrameEncode, NULL));\r\n\tDX::ThrowIfFailed(\r\n\t\tpFrameEncode-&gt;Initialize(NULL));\r\n\tDX::ThrowIfFailed(\r\n        pFrameEncode-&gt;SetSize(sc_bitmapWidth, sc_bitmapHeight));\r\n    DX::ThrowIfFailed(\r\n        pFrameEncode-&gt;SetPixelFormat(&amp;format));\r\n    DX::ThrowIfFailed(\r\n        pFrameEncode-&gt;WriteSource(pWICBitmap, NULL));\r\n\tDX::ThrowIfFailed(\r\n        pFrameEncode-&gt;Commit());\r\n\tDX::ThrowIfFailed(\r\n        pEncoder-&gt;Commit());\r\n\r\n\tPlatform::Array&lt;unsigned char&gt;^ buffer = ref new Platform::Array&lt;unsigned char&gt;(sizeof(buff));\r\n\tfor( int i=0; i&lt;sizeof(buff); i++ ) {\r\n\t\tbuffer&#x5B;i] = buff&#x5B;i];\r\n\t}\r\n\treturn buffer;\r\n}\r\n<\/pre>\n<p>\u6700\u5f8c\u306e byte[] \u304b\u3089 array \u306b\u79fb\u3057\u66ff\u3048\u308b\u306e\u304c\u30c0\u30b5\u3044\u306e\u3067\u3059\u304c\u3001\u307e\u3042\u66ab\u5b9a\u7684\u306b\u3053\u3046\u3057\u3066\u304a\u304d\u307e\u3059\u3002\u9069\u5f53\u306a\u30b3\u30d4\u30fc\u30e1\u30bd\u30c3\u30c9\u304c\u898b\u5f53\u305f\u3089\u306a\u304b\u3063\u305f\u306e\u3067\u3002<br \/>\n\u5b9f\u306f\u3001\u3053\u3053\u3067\u554f\u984c\u306a\u306e\u306f buff \u306e\u30b5\u30a4\u30ba\u306a\u306e\u3067\u3059\u304c\u3001\u52dd\u624b\u306b width * height * 4 \u3068\u6c7a\u3081\u3064\u3051\u3066\u3044\u307e\u3059\u3002\u30b3\u30fc\u30c9\u3092\u898b\u308b\u3068\u308f\u304b\u308a\u307e\u3059\u304c\u3001BITMAP \u5f62\u5f0f\u304b\u3089 PNG \u5f62\u5f0f\u306b\u5909\u63db\u3057\u3066\u3044\u308b\u306e\u3067\u3001\u30b5\u30a4\u30ba\u304c\u6b63\u3057\u304f\u306a\u3044\u306e\u3067\u3059\u3088\u306d\u3002\u3053\u306e\u3042\u305f\u308a\u3001\u306f\u6539\u4fee\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n<p>\u305d\u3046\u305d\u3046\u3001\u30d3\u30eb\u30c9\u3092\u3059\u308b\u3068\u304d\u306b\u306f\u3001DirectX \u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u5fc5\u8981\u3067\u3059\u3002\u30ea\u30f3\u30ab\u30fc\u306e\u5165\u529b\u3068\u3057\u3066\u3001\u4ee5\u4e0b\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u8ffd\u52a0\u3057\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nd2d1.lib\r\nd3d11.lib\r\ndxgi.lib\r\nole32.lib\r\nwindowscodecs.lib\r\ndwrite.lib\r\n<\/pre>\n<p><a href=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2012\/05\/wpid-dworkblogimage20120524_02org.jpg\"><img decoding=\"async\" src=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2012\/05\/wpid-dworkblogimage20120524_02thum.jpg\" border=\"0\" \/><\/a><\/p>\n<p>\u9762\u5012\u306a\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u3092\u76f4\u63a5\u8cbc\u308a\u4ed8\u3051\u3066\u3057\u307e\u3063\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306f Direct2D \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u4f7f\u3063\u3066\u3044\u308b\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u540c\u3058\u3067\u3059\u3002<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nkernel32.lib;user32.lib;d2d1.lib;d3d11.lib;dxgi.lib;ole32.lib;windowscodecs.lib;dwrite.lib;%(AdditionalDependencies)\r\n<\/pre>\n<p>\u3055\u3066\u3001\u3053\u308c\u3067 C++\/CX \u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u307b\u3046\u306f\u6e96\u5099\u304c\u3067\u304d\u305f\u306e\u3067\u3001\u3053\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u5229\u7528\u3059\u308b C# \u306e\u30b3\u30fc\u30c9\u3092\u66f8\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nusing Windows.UI.Xaml.Media.Imaging;\r\nusing Windows.Storage;\r\nusing Windows.Storage.Streams;\r\nusing Windows.Graphics.Imaging;\r\nusing System.Runtime.InteropServices.WindowsRuntime;\r\n\r\nprivate async void Button_Click_3(object sender, RoutedEventArgs e)\r\n{\r\n\tvar dxbmp = new MakeBitmapLib.DXBitmap();\r\n\tdxbmp.Initialize();\r\n\tbyte&#x5B;] data = dxbmp.MakeText(&quot;\u3042\u308c\u3053\u308c&quot;);\r\n\r\n\tvar mem = new InMemoryRandomAccessStream();\r\n\tawait mem.WriteAsync(data.AsBuffer());\r\n\t\/\/ await mem.FlushAsync();\r\n\tBitmapImage bmp = new BitmapImage();\r\n\tbmp.SetSource(mem);\r\n\timage1.Source = bmp;\r\n}\r\n<\/pre>\n<p>using \u304c\u305f\u304f\u3055\u3093\u3042\u308a\u307e\u3059\u304c\u3001\u3053\u308c\u304c\u5fc5\u9808\u306a\u306e\u3067\u3059\u3088\u306d\uff5e\u3002\u3053\u306e\u3042\u305f\u308a\u306e\u5fae\u5999\u306a\u3068\u3053\u308d\u3082\u3042\u3063\u3066\u82e5\u5e72\u4f7f\u3044\u3065\u3089\u3044\u306e\u3067\u3059\u304c\u3001\u3053\u308c\u3067\u6587\u5b57\u304c\u66f8\u3051\u307e\u3059\u3002<\/p>\n<p><a href=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2012\/05\/wpid-dworkblogimage20120524_03org.jpg\"><img decoding=\"async\" src=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2012\/05\/wpid-dworkblogimage20120524_03thum.jpg\" border=\"0\" \/><\/a><\/p>\n<p>\u307e\u3042\u3001\u5b57\u3060\u3051\u3067\u306f\u3064\u307e\u3089\u306a\u3044\u306e\u3067\u3001\u305d\u306e\u3046\u3061\u306b\u753b\u50cf\u3082\u4ed8\u3051\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n<p>\u3055\u3066\u3001C# \u306e\u30b3\u30fc\u30c9\u3067\u3059\u304c\u601d\u3063\u305f\u3088\u308a\u3082\u8907\u96d1\u3067\u3059\u3088\u306d\u3002\u5b9f\u306f\u672c\u6765\u306a\u3089\u3070\u3001\u6b21\u306e\u3088\u3046\u306a\u30b3\u30fc\u30c9\u306b\u3057\u305f\u3044\u306e\u3067\u3059\u3002<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nprivate void Button_Click_3(object sender, RoutedEventArgs e)\r\n{\r\n\tvar dxbmp = new MakeBitmapLib.DXBitmap();\r\n\tdxbmp.Initialize();\r\n\timage1.Source = dxbmp.MakeText(&quot;\u3042\u308c\u3053\u308c&quot;);\r\n}\r\n<\/pre>\n<p>\u3053\u3046\u3059\u308b\u3068\u3059\u3063\u304d\u308a\u3057\u3066\u3001\u3053\u308c\u306a\u3089\u3070\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u3057\u3066\u4f7f\u3048\u305d\u3046\u306a\u611f\u3058\u3067\u3059\u3088\u306d\uff5e\u3002\u4f55\u6545\u3001\u3053\u3046\u3057\u306a\u3044\u304b\/\u3053\u3046\u3067\u304d\u306a\u304b\u3063\u305f\u304b\u3068\u3044\u3046\u3068\u3001<\/p>\n<ul>\n<li>WriteAsync \u30e1\u30bd\u30c3\u30c9\u304c\u975e\u540c\u671f\u306a\u306e\u3067\u3001async\/await \u3092\u4f5c\u3089\u306a\u3044\u3068\u3044\u3051\u306a\u3044\u3002<\/li>\n<li>async\/await \u306e\u4f7f\u3044\u65b9\u306f\u308f\u304b\u3063\u305f\u3051\u3069\u3001\u300c\u4f5c\u308a\u65b9\u300d\u304c\u5206\u304b\u3089\u306a\u3044\u3002<\/li>\n<li>\u306a\u306e\u3067\u3001\u30e1\u30bd\u30c3\u30c9\u306b\u62ec\u308a\u51fa\u3059\u3053\u3068\u304c\u3067\u304d\u306a\u3044\u3002<\/li>\n<li>\u66f4\u306b\u3001C++\/CX \u3067 async\/await \u3092\u4f5c\u308a\u65b9\u304c\u5206\u304b\u3089\u306a\u3044\u3002<\/li>\n<\/ul>\n<p>\u3063\u3066\u306a\u8a33\u306a\u3093\u3067\u3059\u3088\u306d\uff5e\u3002<br \/>\n\u3068\u3044\u3046\u8a33\u3067\u3001\u5358\u306a\u308b\u753b\u50cf\u52a0\u5de5\u306b\u3082\u975e\u540c\u671f\u304c\u95a2\u308f\u3063\u3066\u3057\u307e\u3046\u3068\u3044\u3046\u3084\u3084\u3053\u3057\u3055\u306a\u306e\u3067\u3059\u304c\u3001\u307e\u3041\u3001\u3053\u306e\u3042\u305f\u308a\u306f\u3082\u3046\u3061\u3087\u3063\u3068\u8abf\u3079\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u304b\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[win8] \u30b9\u30bf\u30fc\u30c8\u753b\u9762\u306e\u30bf\u30a4\u30eb\u3092\u52d5\u7684\u306b\u4f5c\u6210\u3059\u308b\uff08\u524d\u54e8\u6226\uff09 | Moonmile Solutions Blog http:\/\/www.moonmile.net\/blog\/archives\/3443 \u304b\u3089\u3061\u3087\u3063\u3068\u6a2a\u9053\u306b\u9038 &hellip; <a href=\"http:\/\/www.moonmile.net\/blog\/archives\/3454\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[23,46,44],"tags":[],"class_list":["post-3454","post","type-post","status-publish","format-standard","hentry","category-csharp","category-ccx","category-windows-8"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/3454","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/comments?post=3454"}],"version-history":[{"count":2,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/3454\/revisions"}],"predecessor-version":[{"id":3455,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/3454\/revisions\/3455"}],"wp:attachment":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/media?parent=3454"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/categories?post=3454"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/tags?post=3454"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}