在使用 DirectX 和 Direct2D 进行开发时,如果遇到无法解析 CLSID_D2D1HueRotation
属性的外部符号错误,通常是因为缺少必要的库链接或包含路径设置不正确。以下是一些可能的解决方案:
确保你已经包含了 d2d1effects.h
头文件:
#include <d2d1effects.h>
确保你已经链接了必要的库。对于 Direct2D,通常需要链接 d2d1.lib
和 d2d1effects.lib
。在 Visual Studio 中,你可以通过以下步骤添加这些库:
d2d1.lib
和 d2d1effects.lib
。或者,你可以在代码中使用 #pragma comment
指令来自动链接这些库:
#pragma comment(lib, "d2d1.lib")
#pragma comment(lib, "d2d1effects.lib")
确保你使用的 Windows SDK 版本支持 CLSID_D2D1HueRotation
。这个 CLSID 是 Direct2D Effects 的一部分,可能需要较新的 Windows SDK 版本。
以下是一个完整的示例,展示如何使用 CLSID_D2D1HueRotation
创建一个色相旋转效果:
#include <d2d1.h>
#include <d2d1effects.h>
#include <d2d1helper.h>
#include <dwrite.h>
#include <wincodec.h>
#include <iostream>
#pragma comment(lib, "d2d1.lib")
#pragma comment(lib, "d2d1effects.lib")
#pragma comment(lib, "dwrite.lib")
#pragma comment(lib, "windowscodecs.lib")
int main() {
// 初始化 COM
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr)) {
std::cerr << "Failed to initialize COM." << std::endl;
return -1;
}
// 创建 D2D 工厂
ID2D1Factory* pD2DFactory = NULL;
hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &pD2DFactory);
if (FAILED(hr)) {
std::cerr << "Failed to create D2D factory." << std::endl;
CoUninitialize();
return -1;
}
// 创建 D2D 渲染目标
ID2D1HwndRenderTarget* pRenderTarget = NULL;
D2D1_RENDER_TARGET_PROPERTIES rtProps = D2D1::RenderTargetProperties();
D2D1_HWND_RENDER_TARGET_PROPERTIES hwndRTProps = D2D1::HwndRenderTargetProperties(
GetConsoleWindow(), D2D1::SizeU(800, 600));
hr = pD2DFactory->CreateHwndRenderTarget(rtProps, hwndRTProps, &pRenderTarget);
if (FAILED(hr)) {
std::cerr << "Failed to create render target." << std::endl;
pD2DFactory->Release();
CoUninitialize();
return -1;
}
// 创建色相旋转效果
ID2D1Effect* pHueRotationEffect = NULL;
hr = pRenderTarget->CreateEffect(CLSID_D2D1HueRotation, &pHueRotationEffect);
if (FAILED(hr)) {
std::cerr << "Failed to create hue rotation effect." << std::endl;
pRenderTarget->Release();
pD2DFactory->Release();
CoUninitialize();
return -1;
}
// 设置色相旋转角度
pHueRotationEffect->SetValue(D2D1_HUEROTATION_PROP_ANGLE, 45.0f);
// 清理
pHueRotationEffect->Release();
pRenderTarget->Release();
pD2DFactory->Release();
CoUninitialize();
std::cout << "Hue rotation effect created successfully." << std::endl;
return 0;
}
领取专属 10元无门槛券
手把手带您无忧上云