byteデータからBitmapImageに変換するには

BitmapImage bitmapImage = new BitmapImage(); MemoryStream mStream = new MemoryStream(resultImage); await bitmapImage.SetSourceAsync(mStream.AsRandomAccessStream()); image.Source = bitmapImage; MemoryStreamを使いましょう。 SetSourceAsyncは非同期メソッドの方を使ったほうが得策。   byteデータで扱わなくてもいい場合はStorageFileのPathをBitmapImageに入れるほうが普通に早いです。 //Storageファイルを取得 FileOpenPicker picker = new FileOpenPicker(); picker.FileTypeFilter.Add(“.png”); IStorageFile file = await picker.PickSingleFileAsync(); BitmapImage bitmapImage = new BitmapImage(new Uri(file.Path)); image.Source = bitmapImage;     2015/3/4追記 下記の方法ではうまく行かなかった。なんでだろ?   byte[]データからBitmapImageに変換するには、InMemoryStream内にDataWriterで書き込みます。 BitmapImage bitmapImage = new BitmapImage(); InMemoryRandomAccessStream mStream = new…

CameraCaptureUIで動画を撮るには

CameraCaptureUI WindowsRuntimeでは写真や動画を簡単に撮れるようにCameraCaptureUIというAPIがあります。 これは既に用意されたUIを呼び出し、ユーザーが写真を撮って、StorageFileを取得することができます。 APIが用意した既存のUIを使うのでわざわざ自分でカメラで撮るUIを用意しなくても良いので便利です。 (2014/6/29時点でWindowsPhone8.1には対応していません 使い方はCameraCaptureUIを初期化して、CaptureFileAsyncメソッドを呼び出します。 このとき、CameraCaptureUIModeをVideoに設定します。 CameraCaptureUI captureUI = new CameraCaptureUI(); IStorageFile file=await captureUI.CaptureFileAsync(CameraCaptureUIMode.Video);   VideoSettingプロパティでトリミングの許可などのさまざまな設定を変更することができます。 CameraCaptureUI captureUI = new CameraCaptureUI(); captureUI.VideoSettings.AllowTrimming = true; //トリンミングの許可 captureUI.VideoSettings.Format = CameraCaptureUIVideoFormat.Mp4; //フォーマット captureUI.VideoSettings.MaxDurationInSeconds = 1000; //最大録画時間(分) captureUI.VideoSettings.MaxResolution = CameraCaptureUIMaxVideoResolution.HighestAvailable;//最高解像度1 IStorageFile file=await captureUI.CaptureFileAsync(CameraCaptureUIMode.Video);   動画をとる場合、マニフェストファイルの機能タブから、 マイクとWebカメラにチェックをいれる必要があります。     取得した動画は C:\\Users\garicchi\AppData\Local\Packages\{AppID}\TempState\ ディレクトリにあるのでパスを持っています。 なのでMediaElementのSourceプロパティに指定することで動画を再生できます。 mediaElement.Source = new Uri(file.Path);  

CameraCaptureUIで写真を撮るには

CameraCaptureUI WindowsRuntimeでは写真や動画を簡単に撮れるようにCameraCaptureUIというAPIがあります。 これは既に用意されたUIを呼び出し、ユーザーが写真を撮って、StorageFileを取得することができます。 APIが用意した既存のUIを使うのでわざわざ自分でカメラで撮るUIを用意しなくても良いので便利です。   (2014/6/29時点でWindowsPhone8.1には対応していません)   使い方はCameraCaptureUIを初期化し、CaptureFileAsyncメソッドを呼ぶだけです。 CameraCaptureUI captureUI = new CameraCaptureUI(); //Capture IStorageFile file=await captureUI.CaptureFileAsync(CameraCaptureUIMode.Photo);   さまざまな設定を加えて呼ぶことで取得した写真のトリンミング、解像度などもせっていできます。 CameraCaptureUI captureUI = new CameraCaptureUI(); captureUI.PhotoSettings.AllowCropping = true; //写真をトリンミングするか captureUI.PhotoSettings.CroppedAspectRatio = new Size(16, 9); //アス比 //captureUI.PhotoSettings.CroppedSizeInPixels = new Size(800,600); //写真のサイズ(アス比とどちらか選択可能) captureUI.PhotoSettings.Format = CameraCaptureUIPhotoFormat.Jpeg; captureUI.PhotoSettings.MaxResolution = CameraCaptureUIMaxPhotoResolution.Large3M;//最大サイズ IStorageFile file=await captureUI.CaptureFileAsync(CameraCaptureUIMode.Photo); カメラを使う場合、マニフェストファイルの機能タブのWebカメラにチェックをいれておく必要があります。       取得した写真は C:\\Users\garicchi\AppData\Local\Packages\{AppID}\TempState\ ディレクトリに保存されるのでちゃんとパスを持っています。…

2D画像を描画する

前回までに作成したプロジェクトに、DirectXToolkitを使って2D画像を描画していきます。   2Dテクスチャ DirectXでは2Dテクスチャ自体はID3D11ShaderResourceView型で扱われます。 この2Dテクスチャに画像ファイルを読み込むのですが、普通にやったら大変なので、DirectXToolkitのWicTexureLoaderを使います。   SpriteBatch また、2Dテクスチャを描画するためにはSpriteBatchというものを使って描画を行います。 SpriteBatchとはDirectXToolkitに用意された、2Dテクスチャを簡単に描画するための様々な機能をもったクラスです。   描画するテクスチャを追加する まず、描画するテクスチャを容易しましょう。 ソリューションエクスプローラーからプロジェクトを右クリック→追加→既存の項目で pngファイルなどを追加しましょう。 ただしこの方法で追加したファイルはファイルへのリンクが追加されるだけなので、ファイルをコピーしたい場合はエクスプローラーでファイルをプロジェクトのディレクトリに移動させてソリューションエクスプローラーのすべてのファイルを表示でファイルを表示させ、「右クリックでプロジェクトに含める」でプロジェクトに含めましょう。   2Dテクスチャを描画する TestRenderer.hで以下のヘッダファイルをインクルードしましょう。 #include “SpriteBatch.h” #include “WICTextureLoader.h” また、名前空間の宣言もしておきます。 DirectXはDirectXTollkitの名前空間で、Microsoft::WRLは後でつけるComPtrスマートポインターを使うためのものです。 using namespace DirectX; using namespace Microsoft::WRL;   TestRenderer.h内でメンバに以下を追加します。 //2Dスプライト shared_ptr<SpriteBatch> m_sprites; //2Dテクスチャ ComPtr<ID3D11ShaderResourceView> m_texture1; ComPtrとはC++/CXで用意されるクラスのスマートポインターです。 スマートポインターとはさしている先の参照カウントを記憶しておいて、参照カウントが0になると自動で実体を破棄してくれるポインターです。つまりスマートポインターをつかったポインターは実体が必要なくなっても明示的にdeleteをする必要がありません。   TestRenderer.cppのCreateResourcesメソッド内に2Dスプライトの初期化処理とテクスチャの読み込み処理を追加します。 auto device = m_deviceResources->GetD3DDevice(); auto context = m_deviceResources->GetD3DDeviceContext(); m_sprites=shared_ptr<SpriteBatch>(new SpriteBatch(context)); CreateWICTextureFromFile(device, L”assets/icon.png”, nullptr,…

DXToolkitを既存のプロジェクトにリンクするには

こちらからDirectTKをダウンロードします。   ダウンロードできたら解凍し、 リンクしたいDirectXプロジェクトの.vcxprojファイルがあるディレクトリにDirectXTKをごっそりコピーします。 ソリューションエクスプローラーからソリューションを右クリックし、追加→既存のプロジェクトを押します。   先ほどコピーしたディレクトリのvcxprojファイルを選択します。 今回はWindows8.1なのでWindows81を選択します。   続いてプロジェクトを右クリックし、プロパティを押します。 共通プロパティから、[新しい参照の追加]を押します。 DirectXTK_Windows81を選択します。 追加できたらさらに、ビルドのプロパティの参照アセンブリの出力をTrueからFalseに変更します。   続いてインクルードファイルを追加します。 同じようにプロパティウインドウから、C\C++を選択し、追加のインクルードディレクトリを見ます。   追加のインクルードディレクトリにDirextXTK\Inc;を追加します。   ここまでできたら正しくビルドできるはずです。