다음을 통해 공유


Direct2D를 사용하여 BitmapSource를 그리는 방법

이 항목에서는 Direct2D를 사용하여 IWICBitmapSource 를 그리는 프로세스를 보여 줍니다.

Direct2D를 사용하여 비트맵 원본을 그리려면

  1. 원본 이미지를 디코딩하고 비트맵 원본을 가져옵니다. 이 예제에서는 IWICBitmapDecoder 를 사용하여 이미지를 디코딩하고 첫 번째 이미지 프레임을 검색합니다.

       // Create a decoder
       IWICBitmapDecoder *pDecoder = NULL;
    
       hr = m_pIWICFactory->CreateDecoderFromFilename(
           szFileName,                      // Image to be decoded
           NULL,                            // Do not prefer a particular vendor
           GENERIC_READ,                    // Desired read access to the file
           WICDecodeMetadataCacheOnDemand,  // Cache metadata when needed
           &pDecoder                        // Pointer to the decoder
           );
    
       // Retrieve the first frame of the image from the decoder
       IWICBitmapFrameDecode *pFrame = NULL;
    
       if (SUCCEEDED(hr))
       {
           hr = pDecoder->GetFrame(0, &pFrame);
       }
    

    그릴 비트맵 원본의 추가 형식은 비트맵 원본 개요를 참조하세요.

  2. 비트맵 원본을 32bppPBGRA 픽셀 형식으로 변환합니다.

    Direct2D에서 이미지를 사용하려면 먼저 32bppPBGRA 픽셀 형식으로 변환해야 합니다. 이미지 형식을 변환하려면 CreateFormatConverter 메서드를 사용하여 IWICFormatConverter 개체를 만듭니다. 만든 후에는 Initialize 메서드를 사용하여 변환을 수행합니다.

       // Format convert the frame to 32bppPBGRA
       if (SUCCEEDED(hr))
       {
           SafeRelease(&m_pConvertedSourceBitmap);
           hr = m_pIWICFactory->CreateFormatConverter(&m_pConvertedSourceBitmap);
       }
    
       if (SUCCEEDED(hr))
       {
           hr = m_pConvertedSourceBitmap->Initialize(
               pFrame,                          // Input bitmap to convert
               GUID_WICPixelFormat32bppPBGRA,   // Destination pixel format
               WICBitmapDitherTypeNone,         // Specified dither pattern
               NULL,                            // Specify a particular palette 
               0.f,                             // Alpha threshold
               WICBitmapPaletteTypeCustom       // Palette translation type
               );
       }
    
  3. 창 핸들에 렌더링할 ID2D1RenderTarget 개체를 만듭니다.

       // Create a D2D render target properties
       D2D1_RENDER_TARGET_PROPERTIES renderTargetProperties = D2D1::RenderTargetProperties();
    
       // Set the DPI to be the default system DPI to allow direct mapping
       // between image pixels and desktop pixels in different system DPI settings
       renderTargetProperties.dpiX = DEFAULT_DPI;
       renderTargetProperties.dpiY = DEFAULT_DPI;
    
       // Create a D2D render target
       D2D1_SIZE_U size = D2D1::SizeU(rc.right - rc.left, rc.bottom - rc.top);
    
       hr = m_pD2DFactory->CreateHwndRenderTarget(
           renderTargetProperties,
           D2D1::HwndRenderTargetProperties(hWnd, size),
           &m_pRT
           );
    

    렌더링 대상에 대한 자세한 내용은 Direct2D 렌더링 대상 개요를 참조하세요.

  4. ID2D1RenderTarget::CreateBitmapFromWicBitmap 메서드를 사용하여 ID2D1Bitmap 개체를 만듭니다.

        // D2DBitmap may have been released due to device loss. 
        // If so, re-create it from the source bitmap
        if (m_pConvertedSourceBitmap && !m_pD2DBitmap)
        {
            m_pRT->CreateBitmapFromWicBitmap(m_pConvertedSourceBitmap, NULL, &m_pD2DBitmap);
        }
    
  5. D2D ID2D1RenderTarget::D rawBitmap 메서드를 사용하여 ID2D1Bitmap을 그립니다.

        // Draws an image and scales it to the current window size
        if (m_pD2DBitmap)
        {
            m_pRT->DrawBitmap(m_pD2DBitmap, rectangle);
        }
    

이 예제에서는 코드를 생략합니다. 전체 코드는 Direct2D 샘플을 사용하여 WIC 이미지 뷰어를 참조하세요.

참고 항목

프로그래밍 가이드

참조

샘플

Direct2D