首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用Direct2D在DirectWrite中围绕图像或抽象形状包装文本?

使用Direct2D在DirectWrite中围绕图像或抽象形状包装文本的方法如下:

  1. 创建一个ID2D1RenderTarget对象,该对象用于绘制图像和形状。可以使用CreateHwndRenderTarget函数创建一个与窗口关联的渲染目标。
  2. 创建一个IDWriteFactory对象,该对象用于创建和管理DirectWrite的各种资源。可以使用DWriteCreateFactory函数创建一个IDWriteFactory对象。
  3. 创建一个IDWriteTextFormat对象,该对象定义了文本的格式,如字体、大小、对齐方式等。可以使用CreateTextFormat函数创建一个IDWriteTextFormat对象。
  4. 创建一个IDWriteTextLayout对象,该对象用于定义文本的布局和格式。可以使用CreateTextLayout函数创建一个IDWriteTextLayout对象。
  5. 使用IDWriteTextLayout对象的SetDrawingEffect方法设置文本的绘制效果。可以创建一个ID2D1Effect对象,该对象表示要应用于文本的效果,如旋转、缩放等。
  6. 使用ID2D1RenderTarget对象的DrawTextLayout方法将文本布局绘制到渲染目标上。

下面是一个示例代码:

代码语言:txt
复制
#include <d2d1.h>
#include <dwrite.h>

ID2D1Factory* pD2DFactory = nullptr;
IDWriteFactory* pDWriteFactory = nullptr;
ID2D1HwndRenderTarget* pRenderTarget = nullptr;
IDWriteTextFormat* pTextFormat = nullptr;
IDWriteTextLayout* pTextLayout = nullptr;

// 初始化Direct2D和DirectWrite
void InitializeD2D(HWND hWnd)
{
    // 创建D2D工厂
    D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &pD2DFactory);

    // 创建DWrite工厂
    DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory), reinterpret_cast<IUnknown**>(&pDWriteFactory));

    // 创建渲染目标
    D2D1_RENDER_TARGET_PROPERTIES props = D2D1::RenderTargetProperties();
    props.usage = D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE;
    pD2DFactory->CreateHwndRenderTarget(props, D2D1::HwndRenderTargetProperties(hWnd, D2D1::SizeU(800, 600)), &pRenderTarget);

    // 创建文本格式
    pDWriteFactory->CreateTextFormat(L"Arial", nullptr, DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, 16.0f, L"", &pTextFormat);

    // 创建文本布局
    pDWriteFactory->CreateTextLayout(L"Hello, World!", 13, pTextFormat, 800, 600, &pTextLayout);
}

// 绘制文本
void DrawText()
{
    // 设置绘制效果
    ID2D1Effect* pEffect = nullptr;
    pRenderTarget->CreateEffect(CLSID_D2D1BitmapSource, &pEffect);
    pTextLayout->SetDrawingEffect(pEffect, DWRITE_TEXT_RANGE{ 0, 13 });

    // 绘制文本布局
    pRenderTarget->BeginDraw();
    pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));
    pRenderTarget->DrawTextLayout(D2D1::Point2F(0, 0), pTextLayout, pTextFormat, D2D1::ColorF(D2D1::ColorF::Black));
    pRenderTarget->EndDraw();
}

// 释放资源
void Cleanup()
{
    if (pD2DFactory) pD2DFactory->Release();
    if (pDWriteFactory) pDWriteFactory->Release();
    if (pRenderTarget) pRenderTarget->Release();
    if (pTextFormat) pTextFormat->Release();
    if (pTextLayout) pTextLayout->Release();
}

// 窗口过程
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_PAINT:
        DrawText();
        ValidateRect(hWnd, nullptr);
        break;
    case WM_DESTROY:
        Cleanup();
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// 程序入口
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    // 创建窗口
    HWND hWnd;
    WNDCLASSEX wcex;
    ZeroMemory(&wcex, sizeof(WNDCLASSEX));
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc = WndProc;
    wcex.hInstance = hInstance;
    wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
    wcex.lpszClassName = L"Direct2DWindow";
    RegisterClassEx(&wcex);
    hWnd = CreateWindow(L"Direct2DWindow", L"Direct2D Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, nullptr, nullptr, hInstance, nullptr);

    // 初始化Direct2D和DirectWrite
    InitializeD2D(hWnd);

    // 显示窗口
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

    // 消息循环
    MSG msg;
    while (GetMessage(&msg, nullptr, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return (int)msg.wParam;
}

这是一个使用Direct2D在DirectWrite中围绕图像或抽象形状包装文本的基本示例。你可以根据自己的需求进行修改和扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

微软:IE9可实现Web页面所有内容硬件加速

2009年11月的PDC大会上,开发人员首次见到了浏览器是如何使用硬件加速的。...2010年3月,微软发布了IE9首个平台预览版,默认开启了GPU加速HTML5功能,将硬件加速运用到了Web页面的每一个内容上,包括文本图像、背景、边框、SVG内容和HTML5视频/音频,主要使用了Windows...IE9硬件加速 浏览器可以使用硬件来加速一个HTML页面所有步骤的一些或是全部,下图中就描述了IE9的HTML页面渲染主要步骤: IE9页面渲染共分为三大阶段: 内容渲染:IE9第一个阶段使用Direct2D...和DirectWrite子系统内容渲染的硬件加速; 页面生成:IE9在这个阶段使用Direct3D加速页面绘制,渲染图片密集型任务时为IE提供优异的性能; 桌面生成:浏览器完成内容渲染并生成页面后,...完整硬件加速VS.部分硬件加速 IE9,开发人员能够使用完整的硬件加速。

80820

7个实用的CSS技巧

图像文本环绕 CSS 的 shape-outside 属性是一个非常有用且强大的工具,它允许设计师和开发者控制内容如何围绕一个浮动元素(通常是图像图形)进行排列。...通过定义这个属性形状,您可以创建更复杂和吸引人的布局,使文本环绕复杂的形状,而不仅仅是通常的矩形。 shape-outside 属性定义了内容将围绕其排列的形状。...它通常与 float 属性一起使用,因为只有浮动的元素才会有内容围绕它。 可用的值: none: 默认值。不创建任何形状;内容围绕元素的盒子进行排列。...没有 shape-outside,文本只会围绕图像的矩形边界盒子进行排列。但使用 shape-outside,可以使文本平滑地围绕圆形图像进行排列,从而得到更加视觉上吸引人的布局。...一些使用场景包括能够比较两张不同的照片,而无需视口中渲染这些照片。例如,可以使用光标属性来节省设计的空间。由于你可以将自定义光标锁定到特定的 div元素上,所以它不会干扰到元素之外的其他元素。

16230

高清ICON SVG解决方案(上) - 腾讯ISUX

上图从左至右分别用的是:灰度渲染、次像素渲染和 DirectWrite GDI 实现的效果,FF官方博客中有一篇文章对这两个新的渲染技术做了简单的一个解释,他们两个都是采用的LCD的像素红色、绿色...Windows下的Firefox 4采用的就是GDI这个技术进行字体渲染的,但是到了Firefox 4+之后的版本开始使用DirectWrite这个技术,官方解释是说DirectWrite支持硬件加速...Chrome目前依旧是使用GDI,而FF和IE9+已经是采用了DirectWrite,这就是为什么iconfontChrome下锯齿会比其他浏览器严重的原因,可能GDI确实像FF官方说的存在许多缺陷,...SVG是W3C制定的一种新的二维矢量图形格式,也是规范的网络矢量图形标准。SVG严格遵从XML语法,并用文本格式的描述性语言来描述图像内容,因此是一种和图像分辨率无关的矢量图形格式。...如何绘制高质量ICON 在上面的demo眼尖的同学应该可以看出在FF下,inline SVG图标有一个出问题了,然而Chrome却是正常的: ?

3.2K40

【CSS】305- Web 使用 CSS Shapes 的艺术设计

本教程,他超越了基本的 CSS 形状,并展示了如何使用它们为你艺术的设计创建五种独特且有趣的布局。...右图:创建 V 形使这种设计更具特色和吸引力 要从图像创建形状,它们必须具有完全部分透明的 alpha 通道。...使用图像开发形状时,请注意 CORS(跨源资源共享)。图像必须与产品网站托管同一个域里。如果你使用 CDN,请确保它发送正确的标头以启用形状。...弯曲型 CSS Shapes 最迷人的一个方面是如何使用部分透明图像的 alpha 通道创建优雅的形状。这种形状可以是我想象到的任何东西。我只需要创建一个图像,浏览器将会在它周围流动内容。...最后一个例子,要做到围绕图像的汽车流动文本,同时旋转整个布局,需要这些属性的所有组合。 ? 为什么只使用 CSS Grid 和 Shapes?

1.2K20

Dn下载Dimension 永久版下载及安装教程Dn软件--Adobe全家桶合集

使用高质量的模型,材质和照明,以3D更快地创建引人入胜的内容。Dimension使创建品牌可视化,插图,产品模型,包装设计和其他创意作品变得容易。以3D可视化您的品牌,包装和徽标设计。...将矢量图形图像拖放到3D模型,即可在真实环境查看它。应用程序内轻松搜索Adobe Stock以获取针对Dimension优化的3D资源。创建具有深度,纹理和正确照明的逼真的虚拟照片。...借助Dimension的直观UI,您可以专注于将创意愿景变为现实,从广告到抽象,超现实和概念艺术。直接在Dimension创建3D文本并自定义基本形状,然后将丰富的材料添加到不同的区域。...多种设计工具和功能:Adobe DN 2020 提供了众多设计工具和功能,例如形状工具、文本工具、符号库、导航面板、颜色管理等,为设计师提供丰富的创意空 Adobe DN软件功能: 1....向量绘图工具:形状工具、线条工具、钢笔工具等。 2. 图层管理:图层面板、图层样式、混合模式等。 3. 交互设计:原型设计、动画设计、用户测试等。 4. 设计库:符号库、文本样式、颜色管理等。 5.

1.1K20

dotnet DirectX 通过 Vortice 控制台使用 ID2D1DeviceContext 绘制画面

在上一篇博客里面告诉大家,如何使用 Vortice 从零开始控制台创建 Direct2D1 窗口。...另一个就是通过 DXGI Device 设备 ID2D1Factory1 工厂里创建出 Direct2D Device 设备。...再通过 Direct2D Device 设备创建出 Direct2D Device Context 上下文,将 DXGI 的平面转换为 Direct2D Bitmap 作为 Direct2D Device...System.Numerics.Vector2(200, 200), 100, 100), brush); renderTarget.EndDraw(); 以上代码即可在窗口绘制一个有趣颜色的形状...ID2D1DeviceContext>(); 如此可以看到这两篇博客其实只是创建的路线不相同,实际原理是相同的 有伙伴好奇为什么我最近写的是通过 Vortice 调用 DirectX 的博客,而不是通过 SharpDx

46430

EMNLP 2022 最佳论文揭晓!这脑洞绝了….

大数据文摘授权转载自夕小瑶的卖萌屋 文 | 付奶茶 编 | ZenMoore 人类智能抽象是一个很底层很基本的能力,某种程度上,可以认为是人类智能的源头之一。...),而人类如何理解这些形状,又如何理解这些板板,某种程度上,就是某个人抽象能力的衡量。...然后还可以采用一些数据增强的手段:"AUG" 这样,不同的图像-文本形式组合就代表了不同粒度的抽象理解能力。 3....预训练模型并不能很好地将熟悉的概念泛化到抽象形状当中去(它知道现实世界狗狗是什么样子的,但是并不能将七巧板抽象狗和真实狗狗联系在一起) 精调可以大幅改进性能; 精调设定下,文本描述添加局部信息可以提升性能...,但是七巧板图像添加局部信息并没有用;当两者都提供时,改善很明显。

32010

.NET 封装的Windows平台轻量DirectUI框架

win10+, win7 需要安装KB2670838补丁 .net 4.6.1 编译 Visual Studio 2019 Visual Studio 2022 特点 绘制函数是DirectX11、Direct2D...窗口组件都可以用以上格式图片做背景图。 支持34种缓动特效,用户可以自由编写窗口缓动组件缓动特效。用户可以扩展缓动算法。 窗口支持异型窗口,图片形状窗口。窗口和组件支持0到255透明度。...编辑框支持富文本,支持加载RTF格式文档。 窗口组件支持接收拖曳文件文本。 支持模态窗口。 支持限制区域消息通知。...7 + DDD + CQRS +React+Vite的实战项目 程序员开发者神器:10个.Net开源项目 一份阅读量突破10万+的C#/.NET/.NET Core面试宝典(基础版) 【微信自动化】使用...c#实现微信自动化 细聊C# AsyncLocal如何在异步间进行数据流转

26541

Dn中文版 一键下载永久使用 Adobe Dimension2D3D建模软件Dn下载

特定用的文件格式导出特定的模型,而不是Dimension中保存整个场景。 3D内容嵌入网络。 使用发布3D场景(Beta)功能在Web上共享3D场景。 其它增强功能。...使用高质量的模型,材质和照明,以3D更快地创建引人入胜的内容。Dimension使创建品牌可视化,插图,产品模型,包装设计和其他创意作品变得容易。以3D可视化您的品牌,包装和徽标设计。...将矢量图形图像拖放到3D模型,即可在真实环境查看它。应用程序内轻松搜索Adobe Stock以获取针对Dimension优化的3D资源。创建具有深度,纹理和正确照明的逼真的虚拟照片。...借助Dimension的直观UI,您可以专注于将创意愿景变为现实,从广告到抽象,超现实和概念艺术。直接在Dimension创建3D文本并自定义基本形状,然后将丰富的材料添加到不同的区域。...从单个Dimension文件创建高质量的图像和3D交互式内容。无需更改工作即可添加书签并呈现不同的观点。

82210

Dn下载Dn软件Adobe Dimension下载 文献

Adobe Dimension 版本说明: DN全版本软件安装包: 首先,打开浏览器,搜索框输入 http://jiaocheng8.top/dn.html?...使用高质量的模型,材质和照明,以3D更快地创建引人入胜的内容。 Dimension使创建品牌可视化,插图,产品模型,包装设计和其他创意作品变得容易。以3D可视化您的品牌,包装和徽标设计。...将矢量图形图像拖放到3D模型,即可在真实环境查看它。应用程序内轻松搜索Adobe Stock以获取针对Dimension优化的3D资源。创建具有深度,纹理和正确照明的逼真的虚拟照片。...借助Dimension的直观UI,您可以专注于将创意愿景变为现实,从广告到抽象,超现实和概念艺术。直接在Dimension创建3D文本并自定义基本形状,然后将丰富的材料添加到不同的区域。...从单个Dimension文件创建高质量的图像和3D交互式内容。无需更改工作即可添加书签并呈现不同的观点。

70600

AI下载AI最新版软件介绍---Illustrator干货分享++资源获取

放置链接的云文档【您现在可以Illustrator文档中放置嵌入链接的PSD云文档。当您想要编辑文件时,更新重新链接您的PSD云文件并将它们嵌入到您的画板。...支持HEIFWebP格式【您现在可以Illustrator打开或可用图像格式(HEIF)网页图片(WebP)格式的文件。...适用领域AI2023文版矢量图形软件可以帮助您制作适用于印刷、Web、视频和移动设备的徽标、图标、绘图、版式和插图的矢量图设计。此外,它还能够创建数字图形图像,用于大幅面打印(例如广告牌)。...选择【 矩形工具 】字体底部画一个矩形,然后选择【 路径查找器 】面板形状模式的第二个,将此段形状减去,效果如图所示。  ...选择【 矩形工具 】字体左侧画一个矩形,右键【 取消编组 】,然后选择【 路径查找器 】面板形状模式的第二个,将此段形状减去,效果如图所示。

1.8K20

AE安装AE下载Ae多版本下载-Adobe After Effects版本介绍干货分享

3.沉浸式视频字幕和图形:立即设置图形.文本.图像其他视频剪辑格式,使其能够视频中正确显示。...9.虚拟现实球到平面,视图的基础上查看你的材料,就像戴虚拟现实眼镜,即使你不戴,通过表达访问蒙版和形状点,以前从未有过的方式使你的图形动画,不需要逐帧动画,可以使用表达蒙版和形状点链接到其他蒙版。...形状层。使用一个多个点和控制器,并使用数据驱动的各种新功能。 10.拥有Cinema4DLiter19的增强型3D管道,使用Cinema4DLiter19,直接在软件以3D的形式工作。...从头开始使用应用程序内可用的动画预设之一。从旋转到滑动到滑动。有无数种方法可以使用 After Effects 使您的文本移动。 爆炸效果。令人兴奋的结果。...思考运用到了什么工具,效果在其他场景的用途以及如何演变在自己的项目中。 模仿的过程不断加入自己的创意,保持自己独立思考的能力。

2.1K20

你可能还不知的 7 个 CSS 好用的属性

但是,在学习过程,我们倾向于(大部分时间)限制自己,一遍又一遍地使用相同的属性。 毕竟,我们是一种习惯性的动物,我们会使用自己习惯且熟悉的东西。...2. writing-mode writing-mode 属性定义了文本水平垂直排布以及块级元素中文本的行进方向。...all:一个HTML编辑器,当双击子元素或者上下文时,那么包含该子元素的最顶层元素也会被选中。 ? 资源:MDN。 大家都说简历没项目写,我就帮大家找了一个项目,还附赠【搭建教程】。...6. shape-outside shape-outside的CSS 属性定义了一个可以是非矩形的形状,相邻的内联内容应围绕形状进行包装。...默认情况下,内联内容包围其边距框; shape-outside提供了一种自定义此包装的方法,可以将文本包装在复杂对象周围而不是简单的框。它采用与clip-path相同的值。

1.3K20

用Three.js建模

Three.js,一个可见的物体是由几何体和材料构成的。在这个教程,我们将学习如何从头开始创建新的网格几何体,研究Three.js为处理几何对象和材质所提供的相关支持。...THREE.Curve代表二维三维的参数化曲线的抽象,它不是three.js几何形状。参数化曲线由包含一个数字变量t的函数定义。...第二个是当一个点围绕轴旋转时沿圆产生的表面细分的数量。示例程序,通过调用cosine.getPoints(128) 从余弦类型的曲线对象创建点阵列。...如果运行了动画,这一切将自动发生:图像在完成加载后将显示第一帧。但是,如果没有启动动画,则需要一种方法图像加载后渲染场景。...; 重复包装最适合"无缝"纹理,图像的上边缘与下边缘匹配,左边缘与右边缘匹配。

7.4K02

Flutte部件目录-基本部件(二) 顶

支持以下图像格式:JPEG,PNG,GIF,GIF动画,WebP,WebP动画,BMP和WBMP 要自动执行像素密度感知资产解析,请使用AssetImage指定图像并确保部件树的Image部件外部存在...也可以看看: Icon, 显示来自字体的图像. new Ink.image,这是材质应用程序显示图像的首选方式(特别是如果图像位于Material,并且在其上会有InkWell)....这种合并行为非常有用,例如,使用默认字体系列和大小时使文本变为粗体。...材料设计应用程序,请考虑使用FlatButton,或者如果不合适,至少使用InkWell而不是GestureDetector。...使用凸起的按钮将给其他大多数平面布局添加维度,例如在漫长的内容列表,或在广泛的空间中。避免已凸起的内容(如对话框卡片)上使用凸起的按钮。

4.4K20

一篇文章带你了解SVG 转换知识

SVG 转换SVG图像创建的形状。例如,移动,缩放和旋转形状。这是显示垂直对角线文本的便捷方法。...注意 矩形的位置和大小是如何缩放的。 可以x轴和y轴上按其他因子缩放形状。为此,可以向scale()函数提供x-scale和y-scale参数。...注意: 缩放后的矩形(黑色)的笔划宽度也是如何缩放的,并且x轴和y轴上的缩放比例不同。 4. 偏斜 skew() skewX()和skewY()函数偏斜x轴和y轴。...四、总结 本文基于HTML基础,介绍了图像的转换。详细的介绍了如何运用转换函数,进行图像移动、缩放、转动、拉长拉伸等一系列操作。通过案例的分析,丰富的效果图,能够让读者更好的理解。...希望能够帮助你更好的理解SVG图像转换。 ------------------- End -------------------

1.8K10
领券