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