Peter(阿斯拉达)
关注系统界面开发技术,安全,语言特性,网络,图形,AI,硬件,并发,研发流程管理.
展开
-
[Gdiplus/Gdi]_[中级]_[实现多行文本的多种颜色绘制-富文本绘制]
1. 在开发`WTL/WIN32`界面程序时,有时候需要绘制多行的段落文本,但是文本里的数值需要设置红色以便能让人第一时间关注到它。这种文本可以称之为富文本。`GDI`的`DrawText`和`GDIPlus`的`DrawString`方法都只能连续绘制某个颜色的文本。怎么实现?原创 2024-10-27 00:30:52 · 127 阅读 · 0 评论 -
[Gdiplus]_[初级]_[使用Gdiplus实现JPEG和PNG互相转换]
1. 在开发`WTL/Win32`的时候,有时候在处理图片时需要让`JPEG`和`PNG`互相转换,比如截图需要另存为指定格式。那么如何不使用第三方库实现呢?原创 2024-03-26 21:45:03 · 178 阅读 · 0 评论 -
[WTL/ATL]_[Gdiplus]_[绘制虚线并设置破折号空格的宽度]
场景WTL界面开发时,有些情况下需要绘制虚线,比如圆角矩形的虚线,默认的破折号和点之间的空格特别小,看着比较密集,那么如何增加点线之间的空格,或者增加破折号的长度?说明使用Gdiplus绘制圆角矩形是比Gdi简单,因为它提供了路径GraphicsPath和抗锯齿模式SmoothingModeAntiAlias. 在之前的文章[2]也说过如何绘制圆角矩形。使用GraphicsPath也得使用Pen对象,它设置了画线的画笔。之后设置虚线使用以下的方法:pen.SetDashStyle(原创 2022-03-31 20:04:44 · 606 阅读 · 0 评论 -
[Gdiplus]_[初级]_[使用插值模式控制图片的缩放质量]
场景在开发WTL程序时,使用Gdiplus绘制PNG图片. 有时候会遇到以下的情况,绘制一个原图等宽高时,图片在界面上看上去清晰,而当把PNG缩小宽高之后绘制的图片有明显锯齿,这是什么原因?说明使用Gdiplus::Graphics对象的方法DrawImage可以绘制原图的Rect源矩形区域到目标Rect,也就是如果目标区域和源区域的宽高不一致时,图片会进行缩放绘制。比如我们有一个256x256的图标,之后我们需要把这个图标缩放绘制到标题栏左上角的位置,而这个位置的图标不只需要32x32,那么原创 2020-10-27 18:07:29 · 754 阅读 · 1 评论 -
[ATL/WTL]_[Gdiplus]_[Windows窗口如何显示GIF动画]
场景在使用 WTL 和 Gdiplus 开发界面程序时,我们需要在界面显示 GIF的动画,可惜 WTL 和 Gdiplus并没有执行显示 GIF动画的API. 那我们如何做?说明GIF文件关键的2个参数, 图片的帧数,每帧的时间间隔. 如果能获取到这2个参数,那么我们就可以让帧索引递增,并逐帧绘制图片。获取图片的帧数,可以通过以下方法,我们需要做的是构造方法的参数. 在Imag...原创 2020-05-05 19:01:13 · 774 阅读 · 2 评论 -
[Gdiplus]_[中级]_[绘图实现单行文本的多种颜色]
场景在使用 Gdiplus 绘制文本时, 偶尔会遇到需要支持绘制格式化文本的时候,而 Gdiplus 在这方面并不好,没有官方提供支持的类,也不支持 HTML 标签和 CSS 的样式. 而大部分提供这类富文本的绘制目前我所知道的一种就是通过 Web控件 来处理的. 比如调用 Chromium 的渲染实现.另外一种实现就是通过实现自定义的富文本 RichText 控件, QQ 以前就是用...原创 2020-03-22 01:24:02 · 1008 阅读 · 1 评论 -
[WTL/ATL]_[Gdi/Gdiplus]_[实现双缓冲]
场景使用Gdi绘制文本,线条或图片(Gdiplus)时,如果HDC调用的次数过多,就会出现闪烁的现象, 怎么解决?如果我用Gdiplus::Graphics进行绘制文本,线条或图片时, 不使用HDC的相关DrawText方式时, 又如何解决闪烁问题?说明WTL提供了CDC类对HDC进行封装处理, 比如常用到的CMemoryDC,CClientDC,CPaintDC等. CM...原创 2019-06-04 16:20:45 · 1235 阅读 · 1 评论 -
[WTL/ATL]_[初级]_[使用Gdiplus::Graphics::DrawString绘制中文字体显示不完整的问题]
场景在某一次开发应用多语言实现的时候, 使用Graphics::DrawString绘制中文文本时,发现文本显示不完整, 上半部分的有备遮盖的情况, 奇怪的是事实上并没有其他窗口挡住, 而且还是某行文本中的某些字符显示不完整. 而且即使增加绘制字体的区域高度也不行.怎么回事?图1:如果Arial字体不能显示中文, 为什么不是全部中文不能显示呢?这个问题我也没搞懂,有知道的童鞋说一下....原创 2019-05-31 16:55:04 · 2505 阅读 · 0 评论 -
[ATL/WTL]_[Gdiplus]_[实现按钮的阴影效果]
场景在WTL开发时, 由于界面需要, 很多按钮都是奇形怪状的. 比如卡片形状, 圆角矩形等等. 只要是点击能响应一个事件的, 我们都可以看做是一个异形按钮. 其中让按钮呈现立体效果, 动画效果等一直是实现自定义按钮的难点.系统按钮一般是带3D效果的按钮. 我们这里实现自带阴影效果的按钮一样具备很好的特效, 阴影按钮特别适合在面积比较大的卡片按钮上.说明Gdiplus窗口实现...原创 2018-10-29 10:05:31 · 1031 阅读 · 0 评论 -
[ATL/WTL]_[Gdiplus]_[关于使用Gdiplus来绘制反锯齿的圆角矩形]
场景在使用WTL或MFC开发自定义按钮时, 往往美工设计的按钮都时圆角矩形的. 用GDI的函数RoundRect函数可以简便的绘制圆角矩形, 但是如果椭圆(ellipse)的宽高比较大的时候, 按钮比较大. 这时候按钮的圆角矩形看起来就是有锯齿的(aliasing).在GDI的函数里, 没有比较好的函数来实现抗锯齿(antialias), 如果不想自己去解决锯齿效果, 只能使用Gdip...原创 2018-10-27 23:21:59 · 1952 阅读 · 0 评论 -
[ATL/WTL]_[Gdiplus]_[关于使用Graphics::DrawString替换DrawText的说明]
场景在开发WTL或MFC程序时, 绘制文本往往会使用标准的CDC::DrawText函数, 其实也就是调用了GDI的DrawText函数, 但是这个函数绘制出来的文字显示出来的效果会比记事本显示的效果差?什么原因呢.GDI在绘制文本, 线条时总是感觉比较粗糙, 边缘总是有锯齿, 不够平滑.说明因为GDI绘制图形时并没有消除锯齿的效果, 绘制出来的文本线条边缘是不平滑的, 这...原创 2018-10-19 15:44:33 · 1389 阅读 · 0 评论 -
[ATL/WTL]_[初级]_[关于graphics.DrawImage绘图时显示不正常的问题]
场景1.使用win32绘图时, 最简单的api是使用 graphics.DrawImage(image,x,y)来绘制, 可是这个api有个坑,它的图片显示完整和设备分辨率有关.说明1.Windows使用以下约定: 1逻辑英寸(logical inch)== 96像素(pixels) == 72 points.2.我们创建的程序一般是DPI-Aware 程序, 因为这种程序可以避免DWM自动执行DP原创 2017-01-17 10:20:28 · 2054 阅读 · 0 评论 -
[ATL/WTL]_[中级]_[使用GDIPlus剪切和缩放图片]
场景:1. 缩放图片,不用多说,就是需要缩略图和画在界面上这类。2. 剪切,不用多说,就是剪切一部分图片用于绘制控件背景之类.3. wxWidget的wxImage都是自带这些功能的直接方法的.Gdiplus::Bitmap* CutImage(Gdiplus::Image* source,int x,int y,int width,int height){ Gd...原创 2015-06-14 18:13:37 · 3683 阅读 · 0 评论