椭圆如何用刷子填充色问题?

duwar 2010-05-26 10:20:30
对于矩形可以用pdc->FillRect(rcBounds, &brush);去实现刷子填充色功能。
但是对于椭圆,我找不到有刷子去实现。后来我用pdc->SetPixel(n,m,Color);去实现,可是这个是一个点一个点的画。效率很低下。我想问问有没有像刷子一样的函数能一下子填充除矩形以为的图像颜色的函数。
...全文
91 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
duwar 2010-05-26
  • 打赏
  • 举报
回复
for(int j = 0; j< y; j++)
{
for(int i = 0; i< x; i++)
{
CBrush nbrush(Rgbcolor[i]);
pdc->SelectObject(&nbrush);
xc = i;
yc = j;
CRect rect(xc-r, yc-r, xc+r, yc+r);//r是一常数
pdc->Ellipse(rect);

nbrush.DeleteObject();
}
}
我把程序改成这样总可以安全了吧?
快乐鹦鹉 2010-05-26
  • 打赏
  • 举报
回复
晕。有些new是你自己写的,有些new不是你自己写的啊,被封装在已有的代码中了啊。
说到根源,需不需要释放的判断标准不在于你是new,或者是句柄之类的,而是它的作用域。如果这个对象的作用域就是这个函数,那么你就应该在出这个函数时释放,如果是类,那么需要在类退出时释放。这个对象需要在多大范围内使用,那么超出这个范围时,这个对象就需要释放。
duwar 2010-05-26
  • 打赏
  • 举报
回复
它又没有new,怎么要释放呢??
快乐鹦鹉 2010-05-26
  • 打赏
  • 举报
回复
当然有必要了。资源要及时释放。
duwar 2010-05-26
  • 打赏
  • 举报
回复
上面程序如果要后两句的话,第六行得改成:
CBrush *pOldBrush = pdc->SelectObject(&nbrush);
是不是我上面发的程序里没有old指针,所以后两句是完全不必要的?
duwar 2010-05-26
  • 打赏
  • 举报
回复
for(int j = 0; j< y; j++)
{
for(int i = 0; i< x; i++)
{
CBrush nbrush(Rgbcolor[i]);
pdc->SelectObject(&nbrush);
xc = i;
yc = j;
CRect rect(xc-r, yc-r, xc+r, yc+r);//r是一常数
pdc->Ellipse(rect);

//pdc->SelectObject(pOldBrush);我把这两句去了也能正常运行
//nbrush.DeleteObject();
}
}
我上面的程序是画圆的矩阵,有点像座位表,只不过是用圆代替座位。
我把后面注释的去掉好像也没影响,后面两句重要吗?
二楼说的很对,我刚接触画刷,还不会用。请多指教。学习
vann1982 2010-05-26
  • 打赏
  • 举报
回复
Ellipse
快乐鹦鹉 2010-05-26
  • 打赏
  • 举报
回复
晕。你不会用CBrush么。
CBrush brush(RGB(255,0,0));
CBrush *pOldBrush = pDC->SelectObject(&brush);
pDC->Ellipse(0,0,100,150);
pDC->SelectObject(pOldBrush);
brush.DeleteObject();
stjay 2010-05-26
  • 打赏
  • 举报
回复
另外如果每次使用的是同一Brush,
将CBrush nbrush(Rgbcolor[i]);放到for外面,效率好点
stjay 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 duwar 的回复:]
for(int j = 0; j< y; j++)
{
for(int i = 0; i< x; i++)
{
CBrush nbrush(Rgbcolor[i]);
pdc->SelectObject(&nbrush);
xc = i;
yc = j;
CRect rect(xc-r, yc-r, xc+r, yc+r);//r是一常数
pdc->Ellipse(rec……
[/Quote]

nbrush.DeleteObject();倒可以不要
但CBrush *pOldBrush = pdc->SelectObject(&nbrush);
pdc->SelectObject(pOldBrush);
最好要成对出现
《计算机图形学基础》上机实践教学指导书   本课程的实践性教学内容主要是要求学生用Visual C++编程实现各种图形的绘制,强化学生的程序设计能力和程序调试能力,使学生巩固所学的各种图形的生成算法的理论知识。 实验一:直线的绘制 题目:用逐点比较法或Besenham法实现直线 基本要求: (1)数据输入项为:直线的起点与终点坐标 (2)直线输出在CDC设备中 附加要求: (1)通过用户输入可改变直线的线型(实线、虚线与点划线) (2)通过用户输入可改变直线的线宽(用方刷子处理) 实验二:圆的绘制 题目:用Besenham法实现圆的绘制 基本要求: (1)数据输入项为:圆心坐标与半径 (2)直线与圆输出在CDC设备中 附加要求: (1)通过用户输入可改变线型(实线、虚线与点划线) (2)通过用户输入可改变线宽(用方刷子处理) 实验三:区域填充 题目:用种子填充算法(或扫描线填充算法)填充任一多边形域 基本要求: (1)数据输入项为:多边形的顶点数、各顶点x,y坐标。 对于种子填充算法要输入种子象素的x,y坐标。 对于扫描线填充算法要输入扫描线间距。 (2)填充区域输出在PictureBox控件中。 附加要求: (1)填充区中可内嵌多个多边形。 (2)对于扫描线填充算法使用一定距离的字符填充。
第1课 初识画笔 教学目标: 认识"画图板"窗口。 教学时间:1课时 教学过程: 同学们,喜欢画画吗?在我们的电脑中有一个强大的工具软件叫"画图板",在这个 软件里面有用不完的"颜料"和"画布",使用它可以绘制美丽的风景画、人物画、想象画 ,还可以用它制作名片、明信片和贺卡。 上图所示就是使用"画图板"程序画的画,怎么样,心动了吗?下面我们一起来学习 使用这个软件吧。 一、启动"画图" 1、画图程序是电脑中一个非常有趣实用的小程序,启动方法如下: 步骤1:启动电脑后,使用鼠标左键单击"开始"按钮; 步骤2:在弹出的菜单里选择"娱乐"; 步骤3:使用鼠标左键单击"画图"即可启动程序。 2、也可以使用画图程序的快捷图标起动程序:点击桌面"娱乐(4)"按钮,双击"画 图"图标启动程序。 二、认识"画图" 1、画图的窗口 "画图"窗口主要有3个区域,左边是工具栏,下面是颜料盒,中间的大块区域就是绘 图区(画布)等。 2、练一练 将下面的工具和它们对应的名称连接起来。 曲线 画笔 文本 选择(椭圆的) 颜色提取器 连接线 填充 颜色橡皮擦 喷雾罐 直线 选择(自由形式) 多边形 3、想一想 尝试使用工具箱中的不同工具,并注意观察工具箱下方"工具状态选择器"的变化。 4、看一看 使用"图像(I)"菜单中的"改变大小/缩放(E)……"命令可以调整画图区的大小 。 三、退出"画图" 使用完"画图"程序后,要正确地退出"画图"程序。 单击"关闭"按钮后,出现对话框,分别点击"保存(S)"、"放弃(D)"、"取消( C)",看看它们分别有什么作用? 四、讨论坊: 还有哪些计算机软件能帮助我们画图? 五、成果篮: 第2课 画圆 教学目标: 学习"椭圆"、"刷子"工具的使用方法。 教学时间:1课时 教学过程: 一、画云 1、用"椭圆"工具画出图中的"云"。 2、画图时,如果发现画得不满意,可以选择"编辑(E)"菜单中的"撤销(U)"命令 取消刚才的操作,注意最多只能撤销三步操作。 二、画气球和太阳 1、选择不同的颜色画出彩色的气球。 2、用同样的方法,画出另两只气球和太阳。 3、选择"椭圆"工具后,按住Shift键拖动,就能方便地画出圆。 4、练一练 画出下面的图形。 用"刷子"或"铅笔"工具画下面的图画: 三、保存作品 画好"云、气球和太阳"后,应及时保存。 四、实践园: 选择自己喜欢的颜色画下面的图画。 五、成果篮: 第3课 填充颜色 教学目标:学习画彩色的图形。 教学时间:1课时 教学过程: 一、画气球、太阳 1、选用"椭圆"工具中的填充模式,可以画出彩色的气球和太阳。 2、用同样的方法画出另外两只气球。 3、知识屋: 单击颜料盒中的颜色块,设置前景色;右击颜色块,设置背景色。其实在画画的时 候使用前景色和背景色就可以画画。选取刷子工具,在画图区域按下鼠标左键,能使用 前景色画画,按下鼠标右键,可以使用背景色画画。 二、加新的颜色到颜料盒 在填充颜色的过程中,我们发现从颜料盒中可以选择的颜色只有22种,很多想要的 颜色在颜料盒中并没有,需要添加新的颜色到颜料盒中。 步骤1:使用鼠标左键单击颜料盒中与自己需要的颜色最接近的一种颜色,比如在第 一排颜色中的最后一个棕色; 步骤2:单击菜单栏中的"颜色"——"编辑颜色"; 步骤3:在弹出的编辑颜色对话框中,选择基本颜色后单击"确定",所选择的颜色就 被添加到了颜料盒中。 如果在"基本颜色"中没有找到需要的颜色,还可以使用鼠标指针到左边的颜色中去 选择和编辑需要的颜色,然后单击"添加到自定义颜色中"按钮,这时新的颜色就到了"自 定义颜色"框中; 步骤4:单击"确定"按钮,关闭编辑颜色对话框,返回画图程序,可以看到新的颜色 出现在了颜料盒中。 三、涂出彩色气球和太阳 1、选择"用颜色填充"工具,也可以给图形涂色。 2、提示牌: "用颜色填充"工具只适用于对封闭区域进行涂色。 四、实践园: 画出下面的图画: 五、成果篮: 第4课 画矩形 教学目标:学习用"矩形"工具画长方形和正方形。 教学时间:1课时 教学过程: 一、画火车头和车厢 1、用"矩形"工具画出火车的头和车厢。 火车头和车厢都可以看成由一个个的长方形组成,在画图程序中,用来绘制长方形 和正方形的工具叫矩形工具。在工具栏上单击直角工具按钮就可以画长方形了。 当将鼠标指针移动到直角矩形工具按钮上单击鼠标左键时,我们看见在工具状态栏 上显示直角矩形工具有3种画图模式:"没有填充"、"以背景色填充"和"以前景色填充"。 选择不同的模式画图会有不同的效果,在这里选择第一种"没有填充"模式。 从绘制的长方形可以看出,图形的边框线条很细,通过下面的方法可以进行调整。 步骤1:使用鼠标左键单击工具栏上的直线工具按钮; 步骤2:在直线工具下面的选择框中选取合适粗细
软件介绍:   IrfanView4.53支持WIN7/WIN8/WIN10系统,这是一款媲美ACDSEE的看图软件,除了支持静态图片查看外,还支持查动态图片,可播放WAV/MID/AVI等音频视频文件,支持以幻灯片播放模式浏览图片。具备图像编辑能力,如图片格式转换、图片大小调整、颜色调整,添加文字水印等等。  工具使用说明:  选择工具用于一般用途,例如创建选区。  画笔工具用来随意绘画。按住左键并拖拽以绘制前景色。按住右键并拖拽以绘制背景色。  橡皮擦工具用来清除。按住左键并拖拽以还原背景色。按住右键并拖拽以还原原始图像。  仿制图章工具可以复制图像的一部分到另一个区域。可用于从照片移除尘埃和刮痕。按右键选取来源,然后在您要开始替换的位置按左键。  色彩替换工具用来以另一种色彩取代当前色彩。单击并拖拽以前景色取代背景色。右击并拖拽以背景色取代前景色。  字工具可以添加格式化的文字到图像。文字游标的十字将是插入文字的基准。文字将会在插入点处靠左、靠右或居中对齐。  直线工具可以绘制直线。单击并拖拽以定义直线。 放开鼠标按键来绘制它。要取消绘制,请单击右键。按住 CTRL 键绘制以开始点为中心的直线。按住 SHIFT 键绘制以 45° 为倍数的直线。  箭头线工具可以绘制箭头。单击并拖拽以定义箭头。 放开鼠标按键来绘制它。要取消绘制,请单击右键。按住 CTRL 键绘制以开始点为中心的箭头。按住 SHIFT 键绘制以 45° 为倍数的箭头。右击此按钮以打开 "箭头设定值" 对话框。  椭圆工具用来绘制圆形和椭圆形。如果勾选色彩图样上方的填充按钮,它将会是实心; 如果没有则是空心。单击并拖拽以定义椭圆形。 放开鼠标按键来绘制它。要取消绘制,请单击右键。按住 CTRL 键绘制以开始点为中心的椭圆形。按住 SHIFT 键以绘制圆形。  矩形工具用来绘制正方形和矩形。如果勾选色彩图样上方的填充按钮,它将会是实心; 如果没有则是空心。单击并拖拽以定义矩形。 放开鼠标按 键来绘制它。要取消绘制,请单击右键。按住 CTRL 键绘制以开始点为中心的矩形。按住 SHIFT 键以绘制正方形。  填充工具用来以单一色彩填充区域。单击以前景色填充一个区域。右击以背景色填充一个区域。  滴管工具用来从图像选取颜色。单击以选取前景色。右击以选取背景色。按住 SHIFT 键并点击此按钮以停用 自动返回先前工具。  矫正/旋转工具用来矫正图像。单击并拖拽在必须成为水平或垂直的图像之部分画 "底线" 。要取消操作,请单击右键。按住 CTRL 键绘 制以开始点为中心的直线。按住 SHIFT 键绘制以 45° 为倍数的直线。  使用测量工具可以测量图像上的距离和角度。单击并拖拽以选取要测量的距离。所有角度测量与水平线相关。要取消操作,单击鼠标右键。按住 CTRL 键绘制以开始点为中心的直线。按住 SHIFT 键绘制以 45° 为倍数的直线。右击此按钮以打开 "测量单位" 对话框,在此您可以 定义新的测量单位并编辑、删除和排序目前的测量单位。  显示画笔和刷子设定值对话框  使用仿制图章工具前您必须设定来源点 (鼠标右键单击)。启用详细辅助说明并阅读仿制图章工具的工具提示以获取更多资讯。

19,468

社区成员

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

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