为什么 direct2d 看起来像素化且不准确?
Why does direct2d look pixelated and inaccurate?
我创建了一个分层 window 并添加了一些圆角矩形、椭圆和文本来制作自定义 window。
简而言之,我是这样写的:
D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &d2dFactory);
d2dFactory->CreateHwndRenderTarget
(
RenderTargetProperties(),
HwndRenderTargetProperties(hwnd, SizeU(clientRect.right, clientRect.bottom)),
&pRenderTarget
);
...
DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(dWriteFactory), reinterpret_cast<IUnknown**>(&dWriteFactory));
dWriteFactory->CreateTextFormat
(
L"Calibri",
NULL,
DWRITE_FONT_WEIGHT_NORMAL,
DWRITE_FONT_STYLE_NORMAL,
DWRITE_FONT_STRETCH_NORMAL,
14.0f,
L"en-us",
&pTextFormat
);
...
D2D1_ROUNDED_RECT roundedRect = RoundedRect
(
RectF
(
clientRect.left,
clientRect.top,
clientRect.right,
clientRect.bottom
),
20, 20
);
...
pRenderTarget->BeginDraw();
...
pRenderTarget->FillRoundedRectangle
(
roundedRect,
SCB_DARK_BLUE
);
pRenderTarget->DrawTextA
(
title,
titleSize,
pTextFormat,
RectF(185, 2, 255, 2),
SCB_WHITE
);
pRenderTarget->FillEllipse
(
Ellipse
(
Point2F(20, 10),
6, 6
),
SCB_RED
);
我遵循了 Microsoft 的文档。
The window looks like this
它的像素大小为 300 x 400。
文本、角和省略号看起来像素化且不准确。
我的程序缺少什么?提前致谢。
您的程序是否设置为高 DPI 感知?请注意,我是盲人,因此看不到您的屏幕截图,但这是我从您的描述中想到的第一件事。
如果使用 visual studio,请转到项目-> 属性然后清单工具-> 输入和输出并检查“DPI 感知”设置。它应该是“高 DPI 感知”或“每个监视器高 DPI 感知”。
我创建了一个分层 window 并添加了一些圆角矩形、椭圆和文本来制作自定义 window。
简而言之,我是这样写的:
D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &d2dFactory);
d2dFactory->CreateHwndRenderTarget
(
RenderTargetProperties(),
HwndRenderTargetProperties(hwnd, SizeU(clientRect.right, clientRect.bottom)),
&pRenderTarget
);
...
DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(dWriteFactory), reinterpret_cast<IUnknown**>(&dWriteFactory));
dWriteFactory->CreateTextFormat
(
L"Calibri",
NULL,
DWRITE_FONT_WEIGHT_NORMAL,
DWRITE_FONT_STYLE_NORMAL,
DWRITE_FONT_STRETCH_NORMAL,
14.0f,
L"en-us",
&pTextFormat
);
...
D2D1_ROUNDED_RECT roundedRect = RoundedRect
(
RectF
(
clientRect.left,
clientRect.top,
clientRect.right,
clientRect.bottom
),
20, 20
);
...
pRenderTarget->BeginDraw();
...
pRenderTarget->FillRoundedRectangle
(
roundedRect,
SCB_DARK_BLUE
);
pRenderTarget->DrawTextA
(
title,
titleSize,
pTextFormat,
RectF(185, 2, 255, 2),
SCB_WHITE
);
pRenderTarget->FillEllipse
(
Ellipse
(
Point2F(20, 10),
6, 6
),
SCB_RED
);
我遵循了 Microsoft 的文档。
The window looks like this
它的像素大小为 300 x 400。 文本、角和省略号看起来像素化且不准确。
我的程序缺少什么?提前致谢。
您的程序是否设置为高 DPI 感知?请注意,我是盲人,因此看不到您的屏幕截图,但这是我从您的描述中想到的第一件事。
如果使用 visual studio,请转到项目-> 属性然后清单工具-> 输入和输出并检查“DPI 感知”设置。它应该是“高 DPI 感知”或“每个监视器高 DPI 感知”。