Lesson1

Lesson1 Image

JPEG 画像を描画します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. Microsoft が画像ファイル(イメージ)の描画サンプルを提供しています。 \(^o^)/
    下記のページからダウンロードして下さい。
    View this sample online
  2. フォルダには Lesson1 ~ Lesson5 の5本のプロジェクトが格納されています。
    PhotoAdjustment.sln から起動して、Lesson1.DrawImage を右クリックします。
    メニューから「スタートアップ プロジェクトに設定」を選びます。
    そのまま右三角アイコンでコンパイル&実行して下さい。
    大きな画像の一部(左上部分)が表示されます。
  3. PhotoRenderer.h をダブルクリックして、ソースコードを表示して下さい。
    関数のプロトタイプ宣言とメンバーオブジェクトと領域などが定義されています。
  4. PhotoRenderer.cpp をダブルクリックして、ソースコードを表示して下さい。
    main() が最初に起動されるメソッドで、 directXAppSourceを引数にして、CoreApplication::Run()を実行します。
    ref new で生成される directXAppSource もこのメソッドの近くで定義されています。
    [Platform::MTAThread]
    int main(Platform::Array^)
    {
        auto directXAppSource = ref new DirectXAppSource();
        CoreApplication::Run(directXAppSource);
        return 0;
    }
    
  5. PhotoRenderer の Run() メソッドから、Image を描画する Render() メソッドを呼び出します。
    void PhotoRenderer::Run()
    {   Render();
        m_window->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessUntilQuit);
    }
    
  6. プログラムの主役である Image を描画する Render() メソッドです。
    事前に m_bitmapSourceEffect(OffscreenSurface) にイメージを格納しておかなければなりません。
    void PhotoRenderer::Render()
    {
        m_d2dContext->BeginDraw();
    
        m_d2dContext->Clear(D2D1::ColorF(D2D1::ColorF::CornflowerBlue));
    
        m_d2dContext->DrawImage(m_bitmapSourceEffect.Get());
    
        HRESULT hr = m_d2dContext->EndDraw();
        if (hr != D2DERR_RECREATE_TARGET)
        {
            DX::ThrowIfFailed(hr);
        }
    
        m_sampleOverlay->Render();
    
        Present();
    }
    
  7. サイズの小さな画像に変更してみましょう。
    ffx2.jpgをプロジェクトのフォルダに格納します。
    [追加][既存の項目]から、プロジェクトに加えて下さい。
    画像は何でも良いので、適当なものを調達して下さい。
    PhotoRenderer.cpp の次の行を修正します。
    【修正前】
        DX::ThrowIfFailed(
            m_wicFactory->CreateDecoderFromFilename(
                L"mammoth.jpg",
                nullptr,
                GENERIC_READ,
                WICDecodeMetadataCacheOnDemand,
                &decoder
                )
            );
        
    【修正】
    L"mammoth.jpg", ⇒ L"ffx2.jpg",
    同じように GIF ファイルも描画出来るので試してみて下さい。
    JAVA では animation GIF を貼り付けると、自動的にアニメーションしてくれたのですが (^_^;) そう甘くは無いようです。

超初心者のプログラム入門(DirectX Store)