direct2d: antialiasing and drawing a line with a 1 pixel stroke
http://xboxforums.create.msdn.com/forums/t/61448.aspx
I'm currently porting a number of custom MFC CStatic-derived controls from GDI+ to Direct2D.
I've noticed when drawing horizontal and vertical lines with a 1 pixel wide stroke that the lines are in fact drawn 2 pixels wide and slightly transparent. The same applies to rectangles and rounded rectangles (diagonal lines seem to be drawn ok). The following code snippet is an example of what I'm trying to do.
D2D1_ROUNDED_RECT TempRect = D2D1::RoundedRect(Rectangle, 4.0F, 4.0F);
CComPtr<ID2D1SolidColorBrush> pTempBrush = NULL;
pRenderTarget->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::White), &pTempBrush);
pRenderTarget->DrawRoundedRectangle(TempRect, pTempBrush);
pRenderTarget->DrawLine(D2D1::Point2F(Rectangle.left, Rectangle.top), D2D1::Point2F(Rectangle.right, Rectangle.top), pTempBrush, 1.0F);
If a specify a 2 pixel stroke then the lines and rectangles are drawn correctly. That is, exactly 2 pixels wide and 100% opaque.
I've tried playing around with the antialiasing mode on the render target, but if I set the render target as follows:
pRenderTarget->SetAntialiasMode(D2D1_ANTIALIAS_MODE_ALIASED);
then the lines look terrible as they are all jagged.
Is there any way that I can force lines to have a 1 pixel stroke while in antialiased mode?
Regards
Martin
I noticed this too. From what I know you can't force it, but you can get around it by adding/subtracting .5 to your positions.
Eg. here is a rectangle:
| RT->DrawRectangle(&D2D1::RectF(3.5f, 3.5f, 75.5f, 65.5f), Brush, 1, NULL); |
|
In DirectX pixel "positions" are at the center of the pixel. For instance, position 0.0f, 0.0f is the exact center of the upper left pixel.
So, if you try to draw a 1 pixel wide line using a rect from (10,3) to (100,4) the rect doesn't align with the pixels. Instead for each X position it covers half of X,3 and X,4. This is why you are seeing the 2 pixel wide line with half transparency.
To solve this subract half a pixel from your coordinates in both directions.
direct2d: antialiasing and drawing a line with a 1 pixel stroke的更多相关文章
- line tension
<!DOCTYPE html> <html> <head> <title>tension</title> <script type=& ...
- Perfect smooth scrolling in UITableViews
https://medium.com/ios-os-x-development/perfect-smooth-scrolling-in-uitableviews-fd609d5275a5 Diffic ...
- 自定义基本java类-StdDraw.java
/************************************************************************* * Compilation: javac StdD ...
- OpenGL的版本号历史和发展
来源请注明.本文永久地址为http://www.cnblogs.com/vertexshader/articles/2917540.html OpenGL®作为业界最为广泛使用的2D和3D图形接口标准 ...
- 高级UI-画笔Paint
在UI这一块,谈到自定义,就离不开画笔和画布的使用话题,在自定义控件的时候,为了做出炫酷的效果,我们往往会使用画笔和画布,那么这里我们就先来看看画笔的使用吧 简单使用例子 自定义一个View publ ...
- 机器学习实战4:Adaboost提升:病马实例+非均衡分类问题
Adaboost提升算法是机器学习中很好用的两个算法之一,另一个是SVM支持向量机:机器学习面试中也会经常提问到Adaboost的一些原理:另外本文还介绍了一下非平衡分类问题的解决方案,这个问题在面试 ...
- Microsoft Win32 to Microsoft .NET Framework API Map
Microsoft Win32 to Microsoft .NET Framework API Map .NET Development (General) Technical Articles ...
- EEG: electrode positions & Broadmann atlas
Source: http://www.brainm.com/software/pubs/dg/BA_10-20_ROI_Talairach/nearesteeg.htm Area LEFT RIG ...
- UVALive 7261 Xiongnu's Land (扫描线)
Wei Qing (died 106 BC) was a military general of the Western Han dynasty whose campaigns against the ...
随机推荐
- Edge 通过代理无法打开网页,解决方案
netsh winhttp import proxy source=ie
- React组件化开发
环境搭建: 1.安装node.js 2.安装cnpm # npm install -g cnpm --registry=https://registry.npm.taobao.org 3.全局安装c ...
- 原生javascript实现文件异步上传
效果图: 代码:(demo33.jsp) <%@ page contentType="text/html;charset=UTF-8" language="java ...
- vue-cli 3.0 安装和创建项目流程
使用前我们先了解下3.0较2.0有哪些区别 一.3.0 新加入了 TypeScript 以及 PWA 的支持二.部分命令发生了变化: 1.下载安装 npm install -g vue@cli 2. ...
- <错误>
1. package com.multak.cookaraclient.adapter; import android.content.Context; import android.support. ...
- 关于获取WebForm控件的问题
遇到这样的一个问题: 在GridView加载了数据之后,GridView的个别列被设置为TextBox单元格,就是可以修改数量了,单价什么的: 这样就触发了TextChanged事件: 现在要记录谁修 ...
- 验证码模拟登录TestHome
前面我们做了一个xsrf的知乎的模拟登录,那么今天将会给大家分享一下小弟写的一段带验证码的登录脚本. 今天我们要做的是testerhome的模拟登录,在做这个模拟登录的时候,我发现需要验证码才能登 ...
- 在应用层通过spring特性解决数据库读写分离
如何配置mysql数据库的主从? 单机配置mysql主从:http://my.oschina.net/god/blog/496 常见的解决数据库读写分离有两种方案 1.应用层 http://neore ...
- SQL like查询条件中的通配符处理
1. SQL like对时间查询的处理方法 SQL数据表中有savetime(smalldatetime类型)字段,表中有两条记录,savetime值为:2005-3-8 12:12:00和2005- ...
- oralce存储过程实现不同用户之间的表数据复制
create or replace procedure prc_test123 is temp_columns ); sqltemp ); cursor cur is select table_nam ...