java lowpoly低多边形风格图片生成
来源:互联网 发布:java实现下载断点续传 编辑:程序博客网 时间:2024/04/30 00:27
lowpoly风格的图片生成,java实现。
闲着没事干刷知乎,刷到这样一个问题http://www.zhihu.com/question/29856775
看看觉得还是挺好看的,那么,我也想提高b格走一波。于是乎根据前人的经验,用java实现了一波,效果不错,根据原图生成效果如下:
有没有很酷的感觉,哈哈哈哈。
源码在文章最后有打包,想直接看源码的下拉!
看完效果,我们来说下原理。
首先,一张图片,难点是如何拼出来这些三角形?
第一步,我们先确定边缘点,用这些点去生成这堆三角形。
边缘点如何确定?【sobel算子】是常用的方法。
具体的算法内容我也解释不清,实现就是
【0,-1,0】
【-1,4,,-1】
【0,-1,0】
用这个矩阵去和图片矩阵做卷积和。
得出来新的图片中再根据灰度过滤出来一些点。
大概实现如下:
BufferedImage newPic = new BufferedImage(imageWidth, imageHeight,BufferedImage.TYPE_3BYTE_BGR);float[] elements = { 0.0f, -1.0f, 0.0f, -1.0f, 4.0f, -1.0f, 0.0f,-1.0f, 0.0f };Kernel kernel = new Kernel(3, 3, elements);ConvolveOp cop = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);cop.filter(originalPic, newPic);return newPic;这里就得到了新的灰度图,然后过滤一些点。
for (int y = 1; y < height - 1; ++y){for (int x = 1; x < width - 1; ++x){int rgb=buf.getRGB(x, y);rgb=(rgb & 0xff0000) >> 16;//留灰度if(rgb>graMax){//dt.delaunayPlace(new Pnt(x,y));//加入三角点pnts.add(new MyPoint(x,y));//outBinary.setRGB(x, y, 0xffffffff);}}}灰度大于特定值的点我们才取,一般用30,40左右。
(为了效率,我们需要控制最后点的数量,所以先把点存入list,然后打乱,随机取出特定数量,我这里使用4000个点来生成三角形,
即使只有4000个点,我的破笔记本还是用了1分钟来生成最后的效果图,所以需要耐心等待。。。)
那么,现在我们有了一堆点,接下来呢?
接下来用这些点拼接三角形。我们使用【Delaunay三角剖分算法】具体的思路参考这里:
Watson算法的基本步骤是:1、构造一个超级三角形,包含所有散点,放入三角形链表。2、将点集中的散点依次插入,在三角形链表中找出外接圆包含插入点的三角形(称为该点的影响三角形),删除影响三角形的公共边,将插入点同影响三角形的全部顶点连接起来,完成一个点在Delaunay三角形链表中的插入。3、根据优化准则对局部新形成的三角形优化。将形成的三角形放入Delaunay三角形链表。4、循环执行上述第2步,直到所有散点插入完毕。
来自于百度百科:http://baike.baidu.com/link?url=pQU5YL2rQxa50zO7NWS10uUdOEIIv8h4QaNGKE_-tftyIpbMxhhP0wxZ-RqIePPHhKyn_PA8vInKAJ8n2NYB-_
如果想深入了解的话,建议去搜搜其他博文。
由于我自己对三角剖分的理解不足,所以我这里采用了别人的算法实现。
最后一步,我们构建好了所有的三角形,取出每个三角形中间点的颜色填充三角形,于是乎,就有了开头的效果图。
最后的最后。所有源码的打包,运行PicDemo就可以查看演示,记得自行更改图片的路径!!!
链接: http://pan.baidu.com/s/1pKeHjJ1 密码: dvnd
- java lowpoly低多边形风格图片生成
- Unity Shader(一) Lowpoly动态低多边形 (QQ登录界面低边动画)
- LowPoly
- libgdx 识别png图片轮廓,得到多边形数组,生成刚体
- 图片生成 Low Poly 风格图片的 app
- 风格和股东会低功耗,
- 低功耗的风格和
- java 使用TexturePaint和Graphics2D可以实现多边形图片裁剪
- java生成jpg图片
- 使用JAVA生成图片
- Java生成图片
- java生成图片文字
- JAVA生成GIF图片
- Java生成图片
- java 生成图片验证
- 使用JAVA生成图片
- 使用JAVA生成图片
- java图片生成
- jquery动态添加tab内嵌ifream插件
- Controller注解形式做Spring MVC开发
- tableView identifier问题
- HDOJ 2019 数列有序!
- C++命名空间
- java lowpoly低多边形风格图片生成
- 对UIViewContentMode的模式理解
- mysql安装start service步骤出错问题解决
- NSString常用方法(读写、比较、搜索、动态截取、替换、删除)
- OCP 053 exam c 30-60
- instancetype与id对比
- 顺序表的实现
- python中输入与输出
- 搭建主流框架_下拉/上拉刷新数据(OC)