大家好,有没有人知道photoshop中自由变换中变形的相关算法原理?
解决方案 »
- 如何不重载CToolBar类找到光标在ToolBar上移动的消息
- 用vc2005写的mfc程序,使用静态链接库,300多K,运行起来怎么占20多M内存?
- 请教:画图软件中拖动对象时的虚框是怎么做的?
- 高手请进,看看我的代码哪里出问题了!!
- VC中如何得到当前的周数???解决立即给分~~~~~~
- 哪位大哥用过flex cell grid这个表格控件,帮帮忙
- 组件 通过 ADO 访问 ACCESS 数据库
- 请问哪里有VC下的打印"控件"?
- 为什么我在创建套接字的时候会出错?
- 在VC下如何打印表格
- 单文档应用程序中关联控件变量的问题
- 急救!急救!急救!怎样判断CString类型的数据是不是数字?已经没分了!
如果X2 = a1*X1 + b1*Y1 + C1;
Y2 = a2*X1 + b2*Y1 + C2;
这样一个方程组,不同的a b c就能够组成不同的变换(实际上这个方程能够组成所有的一维变换,平移、仿射、对称、放大缩小等等)
对于上面楼主的实例,实际上PS是使用更高阶的方程组来描述这个变换而已,所谓最终就是确定方程的阶数和方程的参数,给一个通用的方程描述:
X2 = A1*X(n) + A2*X(n-1)+……+AnX(0)+B1*Y(n)+ B2*Y(n-1)……+C1*X(1)*Y(N-1)+……
Y2=…… x(n)表示X的N次方
类似的一个变换就能描述对图像的变换了,楼主的实例是进行了多个变换。一般来说2维变换就可以满足要求了,也就是方程的最高阶为2
http://images.google.cn/imglanding?q=photoshop%20warp&imgurl=http://images.digitalmedianet.com/2005/Week_15/s9443bf6/story/ps09-warp1.jpg&imgrefurl=http://corporatemedianews.digitalmedianet.com/articles/viewarticle.jsp%3Fid%3D31601-1&usg=__nfVYMTXipwJMcmyG-6NkTCPnGf4=&h=537&w=332&sz=18&hl=zh-CN&tbnid=-oPMXetVjStRoM:&tbnh=132&tbnw=82&prev=/images%3Fq%3Dphotoshop%2Bwarp%26gbv%3D2%26ndsp%3D21%26hl%3Dzh-CN%26sa%3DN%26start%3D63%26newwindow%3D1&gbv=2&ndsp=21&sa=N&start=60&newwindow=1#tbnid=-oPMXetVjStRoM&start=64
X2 = A1*X(2)+A2*Y(2)+A3*X*Y+A4*X+A5*Y+A6
Y2 = B1*X(2)+……+B6
确定A1-A6,B1-B6就相当于确定了这一组变换。
当然他使用的模型可能更加简单,也就是说AB中有些为0.
具体模型是什么样我这里也无法猜测。至于你拉动一些点,然后图形就变换,其实这些点是用来计算AB这些
参数使用的,所以点位变了之后,变换模型也就变了,如果你理解BEZIER曲线,那就是点的一维控制(控制斜率),变成了点控制二维的面而已。所以,你要完成以上的工作的话,首先确定一个变换模型,然后确定若干个控制点,控制点坐标计算模型变换参数。
我说的应该够详细了吧。剩下的就是确定一个模型,设置一些控制点来控制模型参数(这个部分比较复杂)
设置原来为Y,移动之后为Y1,你使用直接压缩的方式,将Y个像素插值到Y1个单元格内,就完成了你所要的效果,当然这个模型是最简单的一次模型。也就是Y = A*Y;
明白了没,今天不早了。回答了这么多也不给点分,不懂留言吧,明天再回
给你一点试探性的建议吧,你先做一个矩形,矩形的4边是4条BEZIER曲线,围成的框内就是一个图像。四条曲线端点位置固定,直线内的控制点可以移动(用来控制图片变形),然后Y方向是由上下两天曲线控制,X方向由左右两条曲线控制(图像边缘始终与曲线重合)X = 某固定值(P),LY是指从上曲线X固定值(P)的点到下曲线X固定值(P)的点的Y值的差(设为LY(P)),原始矩形的高为LY(0),对于每一个X(也就是P从矩形最左到最右),都使用原图像插值到扩展后的空间(Y(0)->Y(P))
对于Y=固定值,LX类似的处理,就完成了一个最简单的变化。