前一段时间,我在Direct2D中创建了此UI框架,以便能够绘制/管理自己的窗口和小部件。我一直在使用它,并根据需要对其进行更新,并且效果很好。但是,既然高分辨率监视器是新事物,我遇到了一个小问题。尽我所能以最佳清晰度绘制图像/图标。
由于我使用的是Direct2D,因此所有绘制功能均会根据目标计算机的DPI /缩放比例正常运行,除了基于像素的课程图像外,因此不会由DirectX自动管理。
因此,一开始我只是像在96 DPI中那样绘制位图,这意味着如果我有一个10x10的图标,并且我通过指定目标矩形使用了ID2D1RenderTarget :: DrawBitmap之类的函数,则我的图像将是扩大以获得更高的DPI。当然,这会很明显,并且图标也会模糊。
我要解决的第一个尝试是创建比默认DPI 96大4倍的图标。然后,使用相同的ID2D1RenderTarget :: DrawBitmap并知道这些图像大4倍,DrawBitmap会按比例缩小图标扩大规模。从150%的窗口比例开始,它的效果更好得多。
但是,从4倍缩小到1倍时,结果不是很好,图像有些像素化。更糟的是,在Photoshop中执行相同的操作。
我还尝试在DrawBitmap之前使用SetTransform,以便查看结果是否更好,但完全相同。
所以我的问题是,人们如何处理这个问题。我确定我不是唯一的一个...
答案 0 :(得分:0)
如果您的目标是获得最佳视觉效果,则需要准备各种分辨率的图标组,不仅要缩小比例,而且要专门设计成较小的尺寸。然后,您需要根据当前上下文选择其中之一。
关于DrawBitmap,您可以尝试使用不同的插值模式。
至于人们使用的一般解决方案,我认为没有。许多应用程序不正确地支持此功能,或者如果它们确实支持控件布局,则嵌入式位图资源仍然会拉伸,看起来变形或内插,看起来太模糊。