実現したいこと
初めてお世話になります。C++/WinRT、Win2Dでbmpファイルを読込んで、CanvasControlに表示したいのです。
発生している問題・分からないこと
(1)当方で作成した下記のプログラムをCanvasControlのDrawイベントハンドラから呼び出します。
(2)プログラムをデバッグ実行すると、最後の方のsession.DrawImage(canvasBitmap, rec);を実行すると、「例外がスローされました」のエラーになります。
(3)エラーの詳細は次の通りです。
「0x00007FFC0BDA5B0C で例外がスローされました (saveAsyncTest.exe 内): Microsoft C++ の例外: winrt::hresult_error (メモリの場所 0x000000D79B2FCEF8)。」
メモリの位置等を示す0x0000・・・の数値は毎回変わりますが、文面はいつも同じです。
(4)中央あたりのコメントアウトを外して、「Image」コントロールに表示すると、正常に表示されることから、「SoftwareBitmap」の作成まではうまくいっているようです。
(5)問題はその後の、「CanvasBitmap」の作成ですが、これはCopilotが生成したコードで、これで良いのか自信がありません。
(6)プログラムの作成に当たっては、次のサイトを参考にしました。
①https://knaraz.hatenablog.com/entry/2023/07/12/080000
②https://qiita.com/lilac0011/items/b23180b72f25392122dc
(7)当方の環境
Windows 11 Pro. 64ビット
Visual Studio Community 2022
当方、初心者ですので、よろしくお願いします。
該当のソースコード
C++/WinRT
1winrt::Windows::Foundation::IAsyncAction winrt::saveAsyncTest::implementation::MainPage::readDisp2(2 winrt::Microsoft::Graphics::Canvas::UI::Xaml::CanvasDrawEventArgs const& args)3{4 auto session = args.DrawingSession();5 6 StorageFile loadedImageFile =7 co_await StorageFile::GetFileFromPathAsync(L"C:\\Users\\ユーザ名\\Pictures\\Page1.bmp");8 IRandomAccessStream fileStream = co_await loadedImageFile.OpenAsync(FileAccessMode::Read);9 BitmapDecoder decoder{ co_await BitmapDecoder::CreateAsync(fileStream) };10 SoftwareBitmap softwareBitmap = co_await decoder.GetSoftwareBitmapAsync(BitmapPixelFormat::Bgra8,11 BitmapAlphaMode::Premultiplied);12 13 /* 試しに「Image」コントロールに表示すると正常に表示される 14 auto picsource = winrt::Windows::UI::Xaml::Media::Imaging::WriteableBitmap(softwareBitmap.PixelWidth(), 15 softwareBitmap.PixelHeight()); 16 softwareBitmap.CopyToBuffer(picsource.PixelBuffer()); 17 image().Source(picsource); 18 */19 20 // SoftwareBitmapからCanvasBitmapを作成21 CanvasBitmap canvasBitmap = 22 CanvasBitmap::CreateFromSoftwareBitmap(CanvasDevice::GetSharedDevice(), softwareBitmap);23 24 // 画像をCanvasControlに描画25 Rect rec = { 0, 0, 700, 300 };26 session.DrawImage(canvasBitmap, rec);27 28 fileStream.Close();29}30
試したこと・調べたこと
上記の詳細・結果
上記の「わからないことや発生している問題」に記載した通りです。
補足
特になし
0 コメント