MFC框架下GDI+绘图问题

1 给定一多边形,任意画一条穿过多边形的曲线,求其交点
2 用指定画刷填充两个区域

我现在的做法是把曲线加粗,形成一个Region,用GetRegionScan()求多边形与曲线的交点矩形,取第一个和最后一个矩形的左上坐标,曲线加宽后可以求得一个曲线路径Path,将两个区域的闭合曲线Path求出,用一个FillPath函数填充区域(具体哪个函数记不清了,就是填充PATH内部)

但是现在有问题:绘图精度要求很高,放大以后会发现在交点上画的的小矩形没有在曲线上,曲线路径求的不够精确,填充时不是以原来的曲线为分界线

请问有没有其他什么方法,可以精确得到直线与曲线的交点,求得曲线的精确PATH
我今天看了一下,发现GetRegionScan()函数求的是相交区域近似的矩阵,这个必然会出现误差。
后来查阅了一些资料,有个一个新想法,FlattenPath()函数可以把设备上下文中的曲线变成一系列相关的直线,然后两直线求交点,这样比较精确,同时也得到了曲线的近似Path(原来的曲线是用GDI+中的DrawCurve画出来的,只有几个点,没有加粗是没有Path的), 这样看起来似乎可以解决问题 就是不知道 FlattenPath()改变后的直线是否能达到高精度要求 请帮我看看这个方法是否可行

没太看懂你的做法。
但是,我不建议你依赖GDI的函数来直接求算交点和区域。通常的做法是:你自己依据数据和几何公式去计算交点,进而得到区域,然后用GDI来绘图。你应当把GDI的作用仅仅局限于在你的图形表现出来,不要对它有其他的期望。你可以参考一下计算机图形学和GIS(地理信息系统)方面的一些资料或代码。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-08-12
设置一个“伪”颜色,然后用八联通域种子算法即可填充。

MFC框架下GDI+绘图问题
但是,我不建议你依赖GDI的函数来直接求算交点和区域。通常的做法是:你自己依据数据和几何公式去计算交点,进而得到区域,然后用GDI来绘图。你应当把GDI的作用仅仅局限于在你的图形表现出来,不要对它有其他的期望。你可以参考一下计算机图形学和GIS(地理信息系统)方面的一些资料或代码。

MFC 在使用GDI+中函数DrawImage,如何清除上一次画的图像?
(第一次回答问题,希望能拿到分)PNG的透明效果是通过Alpha混合实现的,通常情况下,Alpha混合使用下面的计算公式:Dest = Src * (Alpha\/255) + Dest * (1-Alpha\/255) 【公式1】变量说明:Dest 目标像素的RGB值 Src 源像素的RGB值,在这里PNG就是源 Alpha 源像素的Alpha通道值 在Windows...

MFC中如何使用GDI+绘制出图形?
1、可以在内存中建立一张缓存图片,然后在这个图片上画你需要的图,然后输出到窗体,这样你可以直接保存成图片了。2、画在bitmap上 bitmap有save方法 创建graphics的时候用:Graphics.FromImage().

vs2010的mfc中使用GDI+ 为啥绘制没有效果呢?
using namespace Gdiplus;2 初始化GDI+资源和销毁GDI+资源在项目APP文件中\/\/声明GDI+全局变量ULONG_PTR gdiplusToken;BOOL CMFCAndGDIApp::InitInstance(){\/\/ 如果一个运行在 Windows XP 上的应用程序清单指定要\/\/ 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,\/\/则需要 InitCommonControls...

如何MFC 中用GDI+中的DrawLine方法画一条直线?
1.你的GDI+初始化工作做了没?2.这样写简练.CDC* pDC = GetDC();Graphics g(pDC->m_hDC);g.DrawLine(&Pen(Color(255,0,0),3),10,10,200,100);ReleaseDC(pDC);3.OnDraw不是应该就带了个从OnPaint里的参数pDC,干嘛还要自己获取。

VC ++ MFC如何解决GDI+对象越画越慢的问题
画图的问题,肯定要用双缓冲来画,不然能看到明显闪烁的,要在内存中创建个画布,先画在内存中,然后在一次呈现在屏幕上才行 具体怎么双缓冲,上网一搜GDI+双缓冲就行了,很多资料

MFC 中使用GDI+绘图,刚开始不显示,改变窗口大小或者最小化再还原后才...
这个情况偶也不知道啦。不过按你说的应该是你设置断点之后又发生了什么使直线没保存住。《当改变窗口大小或者最小化窗口再还原后才显示,也就是说程序发生重绘后才会正常显示绘制的内容》那就是断点之后没有调用到重绘,仔细找一找吧

MFC绘图问题
这个问题我碰到过,其实最简单的方法是用多线程处理,就是把横坐标分成10份,10个线程同时画图,这样就不会显得绘图时间很长了。或者你可以用jpeg的思想,分层来显示。具体内容可以详聊。

mfc框架缩放时边框有重影
您要问的是mfc框架缩放时边框有重影的原因是什么吗?双缓冲绘图问题,重绘问题等问题导致。mfc框架默认使用GDI进行绘图,而GDI绘图会导致缩放时的重影问题。可以使用双缓冲绘图技术来解决这个问题,即在内存中进行绘图,一次性将绘制好的图像显示在屏幕上。在缩放时,需要对窗口进行重绘以适应新的大小。若...

MFC控件比较多的时候MoveWindow导致闪烁
在滚动时,不要调用多余的窗口更新函数,如RedrawWindow和Invalidate 采用双缓冲绘制控件,以此减少闪烁。我有写博客,里面介绍了双缓冲绘制的方法,不过采用的是GDI+绘图,可以给你参考下:http:\/\/blog.csdn.net\/renstarone\/article\/details\/9089835 ...

相似回答