在 Win32 API 的 Direct2D 中,PixelFormat 结构体用于定义位图的像素格式。通常,这个结构体用于在创建位图时指定像素格式的属性。以下是 PixelFormat 结构体的定义:
typedef struct D2D1_PIXEL_FORMAT {
  DXGI_FORMAT format;
  D2D1_ALPHA_MODE alphaMode;
} D2D1_PIXEL_FORMAT;

  •  format: 指定位图的像素格式,通常是 DXGI 格式,表示像素的存储方式。

  •  alphaMode: 指定 Alpha 通道的使用方式,是一个 D2D1_ALPHA_MODE 枚举,表示如何处理透明度。


这个结构体经常在创建位图时使用,例如在 ID2D1RenderTarget::CreateBitmap 中指定像素格式。

以下是一个简单的示例:
#include <d2d1.h>
#include <d2d1helper.h>

// 初始化 Direct2D 和相关资源
HRESULT InitializeD2D(HWND hwnd, ID2D1Factory** ppFactory, ID2D1HwndRenderTarget** ppRenderTarget)
{
    // 创建 Direct2D 工厂
    HRESULT hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, ppFactory);
    if (SUCCEEDED(hr)) {
        RECT rc;
        GetClientRect(hwnd, &rc);

        // 创建 Hwnd 渲染目标属性
        D2D1_HWND_RENDER_TARGET_PROPERTIES hwndRenderTargetProperties = {
            hwnd,
            D2D1::SizeU(rc.right - rc.left, rc.bottom - rc.top),
            D2D1_PRESENT_OPTIONS_NONE
        };

        // 创建 Direct2D 渲染目标
        hr = (*ppFactory)->CreateHwndRenderTarget(
            D2D1::RenderTargetProperties(),
            hwndRenderTargetProperties,
            ppRenderTarget
        );
    }

    return hr;
}

// 创建带有指定像素格式的位图
ID2D1Bitmap* CreateBitmapWithPixelFormat(ID2D1RenderTarget* pRenderTarget)
{
    // 定义像素格式
    D2D1_PIXEL_FORMAT pixelFormat = { DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED };

    // 创建位图
    ID2D1Bitmap* pBitmap = NULL;
    pRenderTarget->CreateBitmap(D2D1::SizeU(100, 100), NULL, 0, &pixelFormat, &pBitmap);

    return pBitmap;
}

// 绘制内容
void DrawContent(ID2D1HwndRenderTarget* pRenderTarget)
{
    // 创建带有指定像素格式的位图
    ID2D1Bitmap* pBitmap = CreateBitmapWithPixelFormat(pRenderTarget);

    // 在此添加使用位图的绘制代码...

    // 释放位图资源
    pBitmap->Release();
}

// 释放资源
void Cleanup(ID2D1Factory* pFactory, ID2D1HwndRenderTarget* pRenderTarget)
{
    if (pRenderTarget != NULL) {
        pRenderTarget->Release();
    }
    if (pFactory != NULL) {
        pFactory->Release();
    }
}

// 主窗口过程
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static ID2D1Factory* pFactory = NULL;
    static ID2D1HwndRenderTarget* pRenderTarget = NULL;

    switch (message) {
    case WM_CREATE:
        if (FAILED(InitializeD2D(hwnd, &pFactory, &pRenderTarget))) {
            return -1;  // 创建失败,结束窗口
        }
        return 0;

    case WM_PAINT:
        DrawContent(pRenderTarget);
        ValidateRect(hwnd, NULL);
        return 0;

    case WM_DESTROY:
        Cleanup(pFactory, pRenderTarget);
        PostQuitMessage(0);
        return 0;
    }

    return DefWindowProc(hwnd, message, wParam, lParam);
}

// 主函数和窗口创建、消息循环等代码...

在这个示例中,CreateBitmapWithPixelFormat 函数演示了如何使用 D2D1_PIXEL_FORMAT 结构体来创建带有指定像素格式的位图。这样的位图可以在创建时指定存储像素的方式和透明度处理方式。


转载请注明出处:http://www.zyzy.cn/article/detail/25449/Win32 API/D2d1helper.h/PixelFormat