GDI如何画圆

meat 2012-02-07 10:21:36
SetScrollSizes(MM_LOMETRIC,sizeTotal);
圆半径6px,约21逻辑单位
不大位置画出的圆大小不一,如何解决?
...全文
547 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
meat 2012-02-10
  • 打赏
  • 举报
回复
解决了,还以为要用GDI+重写底程呢,重新试用dpi值,dpiX,dpiY值不同,前几次试的正负号有一个地方错了,改正了就OK了,看了一下GDI+的过程,估计是计算dpiX和dpiY,它提供了GetDpiX和GetDpiY,说明也是计算了这二个值。可GDI+实在是太慢了,幸好GDI解决了,不然要换成OpenGL了。用GDI加上优化一下绘图算法,处理2G以内的绘图数据,真的没问题。
meat 2012-02-10
  • 打赏
  • 举报
回复
gdi+完全没这个问题
xjtuzhw 2012-02-09
  • 打赏
  • 举报
回复
坐标系转换
向立天 2012-02-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 meat 的回复:]

用cbitmap如何或者画刷?
[/Quote]
其实就是现实问题
我还是觉得应该不用太在意吧
用位图最终还是落到现实器上
画刷的话原理也是一样的
meat 2012-02-09
  • 打赏
  • 举报
回复
用cbitmap如何或者画刷?
meat 2012-02-08
  • 打赏
  • 举报
回复
不能,工程绘图,一个点是12cm误差
向立天 2012-02-08
  • 打赏
  • 举报
回复
有一个像素的误差应该说是正常的
你完全不能接受么
meat 2012-02-08
  • 打赏
  • 举报
回复
一个点代表了实际物体的12cm,比如地理信息
向立天 2012-02-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 meat 的回复:]
不能,工程绘图,一个点是12cm误差
[/Quote]一个点12cm?
这么大的像素
meat 2012-02-07
  • 打赏
  • 举报
回复
写一段测试代码,大家可以试试
pDC->SetMapMode(MM_LOMETRIC);
int i,x,y;
x=50;
CBrush brush(RGB(0,0,0));
pDC->SelectObject(&brush);
for(i=0;i<50;i++){
x+=31;
y=-x;
pDC->Ellipse(x-16,y+16,x+16,y-16);
}
meat 2012-02-07
  • 打赏
  • 举报
回复
上面所说的大小不一,事实上是1个px的不一样,我试图转成把x转成px进行运算,也不一样,估计跟内切圆有关,系统又-1逻辑单位了
meat 2012-02-07
  • 打赏
  • 举报
回复
有的大有的小,gdi,同样x-16,y+16,x+16,y-16的区域,x,y圆点位置不同,画出的圆的大小不同,因为x,y不代表px,代表逻辑单位,也就是0.1mm
周成风 2012-02-07
  • 打赏
  • 举报
回复
什么意思?画出的大小不一?

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧