「玩一玩」带节点的曲线,可以鼠标拖动节点,类似PS

Conmajia 2012-06-26 10:47:58
加精
酒喝多了,吐槽:无聊,很无聊。。

整个论坛就没好玩的,

新手就只有问题问题问题问题问题。

高手就只有语重心长语重心长语重心长语重心长。

辩论也只有对骂对骂对骂对骂对骂对骂。

有那精力有那水平想点东西来做好不好?就剩我这种门外汉瞎j8在弄在玩。

我承认我是闲的大把时间玩,你们上班都很累了,你们做的都是拿来赚钱的,不能放出来。

累了你上店里放松去,别上网啊。

毛伯伯甩出去小妹妹「大哥」「老公」「亲爱的」叫得亲热,比这听「前辈」「高人」「大牛」爽多了。

谁来介绍点乐子啊,人生太无聊了。我的智商已经无限低了。

………………

下周开始戒赌戒票。。去大学蹭课。。




先来PS的


再来刚做的,极其简单。


思路很简单

1.曲线由一组Point表示节点
2.鼠标移动节点实际是修改单个Point
3.插入删除Point
4.一个节点是一个手柄Handle,就是一个小方块
5.在Paint里画出一条经过所有节点的曲线DrawCurve
6.随便画个十字准星表示当前节点
7.鼠标按下,判断是否在某个已有节点里,如果有,标记之,否则添加新节点
8.鼠标按下且移动,如果已有节点,则节点坐标为鼠标坐标
9.刷新画图

懒得写分析什么的了。

画图的时候分层就行。

背景
准星
曲线
手柄

代码贴出来自己看。

节点:
 List<Point> points;


手柄
        Rectangle getHandle(Point p)
{
Rectangle rect = new Rectangle(
p.X - 3,
p.Y - 3,
6,
6);
return rect;
}


判断一个点Point在不在手柄里
        bool isInside(Point p, Rectangle rect)
{
return rect.Contains(p);
}


判断点在不在曲线的某个节点里

        bool isHandle(Point p)
{
foreach (Point pt in points)
{
if (isInside(p, getHandle(pt)))
{
downIndex = points.IndexOf(pt);
downPoint = pt;
current = pt;
return true;
}
}

return false;
}


画手柄
        void drawHandle(Graphics g, Point p)
{
if (points.IndexOf(p) == downIndex)
g.FillRectangle(
Brushes.Black,
getHandle(p));
else
g.DrawRectangle(
Pens.Black,
getHandle(p));
}


画曲线
        void drawCurve(Graphics g)
{
g.DrawCurve(Pens.Black, points.ToArray());
}


画十字准星(交叉线)
        void drawCrosshair(Graphics g, Point p)
{
g.DrawLine(
Pens.Gray,
0, p.Y,
clientRect.Width,
p.Y);
g.DrawLine(
Pens.Gray,
p.X,
0,
p.X,
clientRect.Height);
}


拖动
        protected override void OnMouseMove(MouseEventArgs e)
{
mousePoint = e.Location;
if (mouseDown)
{
if (Current != null)
{
Current = mousePoint;
}

Refresh();
}
}


完整代码看这里

下载源码
...全文
4835 139 打赏 收藏 转发到动态 举报
写回复
用AI写文章
139 条回复
切换为时间正序
请发表友善的回复…
发表回复
失落的神庙 2013-11-14
  • 打赏
  • 举报
回复
起晚了没占到前排
CZLJ2008 2013-11-14
  • 打赏
  • 举报
回复
牛牛牛!!!!!!!
kxyzjm62 2013-11-14
  • 打赏
  • 举报
回复
不错哦 支持下
zhoujk 2013-11-14
  • 打赏
  • 举报
回复
这个贴子早点出现就好了,前段时间为了在网页上实现贝塞尔曲线,没少花精力
wenping0313 2013-11-13
  • 打赏
  • 举报
回复
不错,还是很有参考价值的。
Ki1381 2013-10-22
  • 打赏
  • 举报
回复
野比君的创意+分享精神才是最珍贵的
木_玉 2013-10-22
  • 打赏
  • 举报
回复
谢谢分享,刚好是所需要的
shenmj2012 2012-10-14
  • 打赏
  • 举报
回复
还不错的设计,有点意思
  • 打赏
  • 举报
回复
背景那块白色和那条线是怎么画出来的?
  • 打赏
  • 举报
回复
大侠,我想问一下:那个在form里面的控件mouseDragCurve1是怎么做的?可以讲一讲么???
szgrape 2012-07-06
  • 打赏
  • 举报
回复
[Quote=引用 125 楼 的回复:]
引用 124 楼 的回复:

比比干嘛的啊,天天啤酒烤鱼好滋润啊

闲来写点东西娱乐

你干嘛的呢,方便透露一下么


失业闲人
[/Quote]

这么才气外漏的人还能失业,哥等人真的是干不了程序员了
whpa008 2012-07-05
  • 打赏
  • 举报
回复
神奇的曲线,有趣!!
程序员一灯 2012-07-05
  • 打赏
  • 举报
回复
不知道楼主能不能看到。
一般在网上到处拉屎的人。在生活中多是性格温和的人。
早恋 2012-07-05
  • 打赏
  • 举报
回复
实话说,不服不行
Conmajia 2012-07-05
  • 打赏
  • 举报
回复
[Quote=引用 124 楼 的回复:]

比比干嘛的啊,天天啤酒烤鱼好滋润啊

闲来写点东西娱乐

你干嘛的呢,方便透露一下么
[/Quote]

失业闲人
szgrape 2012-07-05
  • 打赏
  • 举报
回复
比比干嘛的啊,天天啤酒烤鱼好滋润啊

闲来写点东西娱乐

你干嘛的呢,方便透露一下么
zdzcool 2012-07-05
  • 打赏
  • 举报
回复
呵呵,不错哦。
tyj_130 2012-07-04
  • 打赏
  • 举报
回复
果断学习 拍砖 哈哈 鼓掌
tyj_130 2012-07-04
  • 打赏
  • 举报
回复
什么意思啊??头晕哦
Conmajia 2012-07-04
  • 打赏
  • 举报
回复
[Quote=引用 118 楼 的回复:]

很不错,你把这些最后总结个Demo库就更好了。支持。
[/Quote]
http://blog.csdn.net/conmajia/article/details/7599862
加载更多回复(96)
用photoshop制作图片卷页效果 卷页效果是我们在设计图像中常用的一种修饰效果。不少滤镜都能做到,如由AVBros.公司出品的PageCurl,或大名鼎鼎的KPT等。但如果用过你就会发现,这些滤镜作出的效果过于死板,更重要的是不够逼真,一眼就看出人工的痕迹。所以只用过一次,我就放弃了。如果你和我一样,不喜欢滤镜的固定模式,而希望用一种更灵活的方式来表现你的图像,这篇教程也许会给你一些启示。 由于我们在这篇教程中会用到很多路径的知识,所以,在开始之前,我希望你已经能够较熟练的操纵Photoshop的路径工具。如果你是一个Photoshop的新手,那么这篇教程也能帮助你复习路径的用法。1.让我们从最简单的卷页效果开始。新建一个文档,320㗴20像素大小,分辨率为72,白色背景。选择矩形矢量形状工具,用新建工作路径的方式,绘制一个和页面差不多大小的矩形,和边缘留下一定空隙。(图01) 图01 2.用直接选择工具选择工作路径,在工具箱中选择钢笔工具,在屏幕上方的工具栏中选择自动添加/删除,在路径的右边和底边上分别添加一个节点。按住ALT键,将钢笔放置在新添加的节点上,可以看到钢笔工具变成了转换点工具,拖拽节点,将之改变为平滑点;按下CTRL,钢笔工具又变成了直接选择工具,将底边上新增节点向上移动,右边上新增节点向左移动;再将右下角的节点移动到页面中央偏左下方,将之转换为平滑节点拖动平滑点,接着调整方向点,调节曲线段的位置。如图所示,用贝兹曲线分别调整各曲线段,使之完美接洽(图02)。所完成的路径形状就是卷页的形状。打开路径面板,将工作路径保存起来,便于修改。路径是卷页效果的关键,一定要仔细调整。 图02 如果你还不习惯用快捷键,也可以用各种相应的工具来实现,不过这样做效率会低很多。 3.下面我们要使用这个路径形状。新建一层,命名为Paper,选择同色调的深浅两种颜色分别作为前景/背景色,在这里,我选择的是前景色RGB(221,191,151),背景色为RGB(238,224,204)。在路径可视的情况下,按CTRL+ENTER,将路径转换为选区,在新层内,选择线性渐变工具,按对角线方向拖动渐变工具,使选区从左上角至右下角由深变浅。(图03) 图03 4.在Paper层下新建一层,命名为Curl。选择多边形套索工具,如图04所示,选择一个选区。 图04 要特别注意的是,选区边缘要和曲线相切,即不可以多,也不可以少。(图05) 图05 反转前景色和背景色,在选区内,用线性渐变填充。奇迹出现了!由于Curl层位于Paper层之下,所有不必要的部分都会被覆盖,这样,你已经初步完成了卷页效果。或者,你可能需要加深背景色来加大页面的反差。(图06) 图06 需要说明的是,如果在上一步中,你的路径绘制的很合适,那么在这一步,你会很轻松的取得你所需要的效果。但如果曲线的角度不合适,那么卷页效果会非常生硬。这样的话,你就必须返回到路径中去,重新调整路径,然后再用渐变填充的方法来检验效果。因为有时候路径看起来虽然不错,但要在填充上颜色以后,缺点才会暴露出来。你可能要进行许多次才能达到满意的效果。另外,渐变的方向也非常重要。 5.如果你在看这一步的话,那就证明你已经得到了所需要的路径曲线了。下面,我们要为卷页效果添加一些修饰,使它更自然。首先,要给纸张增加厚度。方法很简单,在Paper层上新建一层,命名为Stroke,载入Paper的选区,将前景色设为白色,选择“编辑>描边”命令,描边宽度为1px,位置居内。取消选择,用橡皮工具擦去多余的部分。减低图层不透明度。这样,一张颇有厚度的纸就出现了。纸张的厚度决定于你用的描边色。举例来说,如果你用前景色RGB(244,235,226)来描边,你会发现这时的纸张要比用白色描边的纸张显得薄一些(图07)。 图07 6.如果觉得渐变对表现明暗不够理想,可以在Curl层上新建一层,命名为Highlight,选择一个大一些的柔化笔头,用白色在页面卷起的边角处喷涂以增加高光,控制笔画尽量柔和,将不透明度减低为51%,图层混合模式改为叠加。在Curl层内。选择加深工具,将范围设为中间调,曝光度为25%,在高光相对的一条边上加深。(图08) 图08 7.增加立体感有很多方法,其中最常用到的是为物体添加阴影。在我们这个例子中,纸张的不规则形状,决定了我们不能用一般的方法。我们需要亲自勾勒出阴影的形状。打开路径面板,用钢笔工具勾出如下路径(图09),保存路径后,将之转化为选区,在Curl层下新建一层,命名为Shadow,用黑色填充选区。取消选择后,运用高斯模糊滤镜,半径为2像素。将图层
计算机专业2008级《平面设计》课程期中考试试卷 __ __ __成绩: 1. 选择题〔每题1分,共40分〕下列各题A>、B>、C>、D>四个选项中,选择一个最合适的 答案,并填在答题卡相应位置上,答在试卷上不得分. 1、下列哪种操作为显示"缩放〞工具的快捷键:< A > A、 按Z键 B、按X键 C、按C键 D、按D键 2、用"挑选〞工具选定群组对象中隐藏的对象,需按住< B > 键 A、Shift+Alt B、Ctrl+Alt C、Shift+Ctrl D、Shift+BackSpace 3、双击"挑选〞工具将会选择 < A > A、页面内的对象 B、某个单个对象 C、文档中的所有对象 4、CorelDRAW提供了途径来创建绘图中的副本. A、复制,再制、粘贴 B、复制、再制、剪贴板 C、再制、克隆、剪贴板 D、复制、克隆 5、负片的制作方法 < C > A、变暗 B、爆光 C、反色 D、增亮 6、能够断开路径并将对象转换为曲线的工具是 < B > A、节点编辑工具 B、擦除器工具 C、刻刀工具 7、显示器、打印机以与打样的样品三者颜色相差很大时,印刷的成品与谁最接近〔 C 〕 A、显示器 B、打印机 C、打样的样品 8、当我们有许多个选择对象时,要取消所有选定对象按< D >键 A、Shift B、Alt C、Ctrl D、Esc 9、< D >键可以从群组对象中选定单个对象 A、Ctrl+Shift B、Ctrl+Tab C、Ctrl+Alt D、Ctrl 10、CorelDRAW中我们可否将选定对象精确定位 < A > A、可以 B、不可以 11、当我们需要绘制一个正圆形或正方形时,需要按住< C >键 A、Shift B、Alt C、Ctrl D、Esc 12、当你用鼠标点击一个物体时,它的周围出现< C >各控制方块 A、4 B、6 C、8 D、9 13、当你两次点击一个物体后你可以拖动它四角的控制点进行< C > A、移动 B、缩放 C、旋转 D、推斜 14、CorelDRAW中有< B >文本格式 A、1 B、2 C、3 D、4 15、CorelDRAW中文本对齐方式有< C >种 A、4 B、5 C、6 D、7 16、在CorelDRAW中可以转化的位图色彩模式包含以下< A >种 CMYK,LAB, RGB,HSV,YIQ.HSB.GRAYSCALE,BLACK AND WHITE A、5 B、6 C、7 D、8 17、交互式阴影工具的阴影可以改变颜色吗< A > A、可以 B、不可以 18、"01K 010% K%"是< E >调色板的颜色名称 A、CorelDRAW PALETTES B、UNIFORM COLORS C、INTERNET EXPLORER D、TRUMATCH COLORS E、HKS COLORS F、PANTONE PROCESS COLOR SYSTEM 19、"R"字符包含在< C >字体中 A、WEBDINGS B、WINGDINGS C、SYMBOL 20、双击选择工具等于< A > A、Ctrl+A B、Ctrl+F4 C、Ctrl+D D、Alt+F2 21、现在有一个圆形,我们将它填充为辐射渐变,红色〔m100〕黑色〔k100〕从美观的角 度来讲,我们应该把渐变两色的色值设为 < B > A、 M100;K100 B、 M100;K100 C、 M100;M50 K100 D、 M100 K50; K100 22、在Coreldraw中置入的图片,在旋转、镜像等操作后,打印输出会出现错误的是〔 A 〕 A、PSD B、TIF C、JPG D、Bitmap 23、在CorelDRAW中做"转换为位图〞会造成〔 C 〕 A、分辨率损失 B、图象大小损失 C、色彩损失 D、什么都不损失 24、〔 B 〕情况下段落文本无法转换成美术文本 A、文本被设置了间距 B、运用了交互式封套 C、文本被填色 D、文本中有英文 25、能够看到PS填充图纹的是〔 C 〕查看模式 A、框架模式 B、正常模式 C、增强模式 D、草图模式 26、在制作稿件时,常会遇到"出血〞线,那么出血的尺寸为〔 A 〕 A、3mm B、5mm C、1mm D、随意 27、3个曲线点最多可以形成〔 C 〕个弧 A、2个 B、3个 C、4个 D、5个 28、下面哪种交互式工具是CorelDRAW10.0新增的〔 D 〕 A、交互式填充 B、交互式透明 C、交互式框架 D、交互式网状填充 29、安装Corel GRAPHICS SUITE10后,在Coreldraw中双击一幅位图,结果是:〔 C 〕 A、没有反应 B、位图转换成了向量图 C、位图转入Corelpaint中进行编辑 D、显示位图编辑菜单 30

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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