ID2D1Image 接口是 Direct2D 中表示图像的基本接口。它是其他图像类的基类,提供了一些通用的方法。以下是该接口的一些基本信息:

ID2D1Image 接口简介:

ID2D1Image 接口是 Direct2D 中表示图像的基本接口。它是其他图像类的基类,用于共享通用的图像处理功能。

头文件:
#include <d2d1.h>

声明:
interface ID2D1Image : public ID2D1Resource
{
    STDMETHOD_(D2D1_SIZE_F, GetSize)(
        ) CONST PURE;

    STDMETHOD_(D2D1_SIZE_U, GetPixelSize)(
        ) CONST PURE;

    STDMETHOD_(D2D1_PIXEL_FORMAT, GetPixelFormat)(
        ) CONST PURE;

    STDMETHOD_(void, GetDpi)(
        _Out_ FLOAT* dpiX,
        _Out_ FLOAT* dpiY
        ) CONST PURE;

    STDMETHOD(CopyFromBitmap)(
        _In_opt_ CONST D2D1_POINT_2U* destPoint,
        _In_ ID2D1Bitmap* bitmap,
        _In_opt_ CONST D2D1_RECT_U* srcRect
        ) PURE;

    STDMETHOD(CopyFromRenderTarget)(
        _In_opt_ CONST D2D1_POINT_2U* destPoint,
        _In_ ID2D1RenderTarget* renderTarget,
        _In_opt_ CONST D2D1_RECT_U* srcRect
        ) PURE;

    STDMETHOD_(void, CopyPixels)(
        _In_opt_ CONST D2D1_RECT_U* rect,
        _Out_writes_bytes_(bufferSize) BYTE* buffer,
        UINT32 bufferSize
        ) CONST PURE;
};

主要方法:

1. GetSize:
   - 描述:获取图像的大小。
   - 参数:无。
   - 返回值:返回 D2D1_SIZE_F 结构,表示图像的宽度和高度。

2. GetPixelSize:
   - 描述:获取图像的像素大小。
   - 参数:无。
   - 返回值:返回 D2D1_SIZE_U 结构,表示图像的宽度和高度,以像素为单位。

3. GetPixelFormat:
   - 描述:获取图像的像素格式。
   - 参数:无。
   - 返回值:返回 D2D1_PIXEL_FORMAT 结构,表示图像的像素格式。

4. GetDpi:
   - 描述:获取图像的 DPI(每英寸点数)。
   - 参数:
     - dpiX: 用于存储水平 DPI 的指针。
     - dpiY: 用于存储垂直 DPI 的指针。
   - 返回值:无。

5. CopyFromBitmap:
   - 描述:从位图复制像素数据到图像。
   - 参数:
     - destPoint: 目标矩形的左上角。
     - bitmap: 源位图。
     - srcRect: 源位图中要复制的矩形,可以为 nullptr 表示整个位图。
   - 返回值:HRESULT。

6. CopyFromRenderTarget:
   - 描述:从渲染目标复制像素数据到图像。
   - 参数:
     - destPoint: 目标矩形的左上角。
     - renderTarget: 源渲染目标。
     - srcRect: 源渲染目标中要复制的矩形,可以为 nullptr 表示整个渲染目标。
   - 返回值:HRESULT。

7. CopyPixels:
   - 描述:从图像中复制像素数据。
   - 参数:
     - rect: 要复制的矩形,可以为 nullptr 表示整个图像。
     - buffer: 用于存储像素数据的缓冲区。
     - bufferSize: 缓冲区的大小。
   - 返回值:无。

示例用法:
// 创建图像
ID2D1Image* d2dImage = nullptr;

// 获取图像大小
D2D1_SIZE_F imageSize = d2dImage->GetSize();

// 获取图像的像素大小
D2D1_SIZE_U pixelSize = d2dImage->GetPixelSize();

// 获取图像的像素格式
D2D1_PIXEL_FORMAT pixelFormat = d2dImage->GetPixelFormat();

// 获取图像的 DPI
FLOAT dpiX, dpiY;
d2dImage->GetDpi(&dpiX, &dpiY);

// 复制位图到图像
ID2D1Bitmap* bitmap = /* ... */;
HRESULT hr = d2dImage->CopyFromBitmap(nullptr, bitmap, nullptr);

// 复制渲染目标到图像
ID2D1RenderTarget* renderTarget = /* ... */;
hr = d2dImage->CopyFromRenderTarget(nullptr, renderTarget, nullptr);

// 从图像中复制像素数据
BYTE* buffer = /* ... */;
UINT32 bufferSize = /* ... */;
d2dImage->CopyPixels(nullptr, buffer, bufferSize);

请注意,上述代码中的 d2dImage 是 ID2D1Image 接口的实例,bitmap 是 ID2D1Bitmap 接口的实例,而 renderTarget 是 ID2D1RenderTarget 接口的实例。这只是一个基本的示例,实际应用中可能需要根据具体需求进行更复杂的图像处理。


转载请注明出处:http://www.zyzy.cn/article/detail/25267/Win32 API/D2d1.h/ID2D1Image