滤镜之瓷砖TileReflect
首先看这两张效果图:
这个滤镜在ImageStone这个软件中有完整代码,现在改写如下:
#define PI 3.1415926535897932384626433832795struct Point
{float x;float y;
};void TileRefelctRGB(unsigned char* pInput,unsigned char* pOutput,int width,int height,int nStride,int nAngle,int nCount,int nSquareSize)
{float _sin,_cos,scale,curvature;int aasamples = 16;struct Point* aapt = (struct Point*)malloc(aasamples*sizeof(struct Point));float x,y;int i,j,k;float u,v,s,t;int xSample,ySample;float hw = width / 2.0;float hh = height / 2.0;int r,g,b,index;if(nAngle < -45)nAngle = -45;if(nAngle > 45)nAngle = 45;_sin = sin(nAngle*PI/180) ;_cos = cos(nAngle*PI/180) ;if(nSquareSize < 2)nSquareSize = 2;if(nSquareSize>200)nSquareSize = 200;scale = PI / (float)nSquareSize ;if (nCount < -20)nCount = -20 ;if(nCount > 20)nCount = 20;curvature = nCount * nCount / 10.0 * (abs(nCount)/nCount) ;for (i=0 ; i < aasamples ; i++){x = (i * 4) / (float)aasamples;y = i / (float)aasamples;x = x - (int)x ;aapt[i].x = _cos * x + _sin * y ;aapt[i].y = _cos * y - _sin * x ;}for (y=0;y<height;y++){for (x=0;x<width;x++){i = x - hw,j = y - hh ;r=g=b=0;for (k=0;k<aasamples;k++){u = i + aapt[k].x ;v = j - aapt[k].y ;s = _cos * u + _sin * v ;t = -_sin * u + _cos * v ;s += curvature * tan(s * scale) ;t += curvature * tan(t * scale) ;u = _cos * s - _sin * t ;v = _sin * s + _cos * t ;xSample = (int)(hw + u) ;ySample = (int)(hh + v) ;if(xSample > width-1)xSample = width-1;if(xSample<0)xSample = 0;if(ySample>height-1)ySample = height-1;if(ySample<0)ySample = 0;index = xSample*3 + ySample*nStride;r += pInput[index];g += pInput[index+1];b += pInput[index+2];}index = x*3+y*nStride;pOutput[index] = r / aasamples;pOutput[index+1] = g / aasamples;pOutput[index+2] = b / aasamples;}}free(aapt);
}
该滤镜有三个参数:
1. 角度:控制方向
2. 大小:控制瓷砖大小
3. 数量:控制瓷砖中变形的像素数
具体的流程大家可以根据代码去理解,无非是像素点的scale,rotate以及offset等,assample来控制精度。
滤镜之瓷砖TileReflect相关推荐
- 自定义背景_新版快绘精选:自定义背景墙 | 吊顶 | 云渲染滤镜升级
New自定义背景墙 没有合适的背景墙样板? 你需要一个全世界独一无二, 独属于你monent的背景墙? 没问题! 无论是要这样↓ 还是这样↓ 快绘都能帮到你! -- 请观看视频 -- New自定义吊顶 ...
- iOS绘图详解-多种绘图方式、裁剪、滤镜、移动、CTM
iOS绘图详解 摘要: Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎.它提供了低级别.轻量级.高保真度的2D渲染.该框架可以用于基于路径的 绘 ...
- 利用SVG滤镜实现水波倒影效果
SVG滤镜用来增加对SVG图形的特殊效果.多种滤镜巧妙结合起来可以实现很棒的视觉效果.下面利用svg的feTurbulence滤镜和feDisplacementMap来模拟真实的水波倒影特效.效果如下 ...
- 绘图与滤镜全面解析--Quartz 2D 、Core Image
绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz 2 ...
- ps2021神经ai滤镜无法使用,ps2021神经滤镜出现错误
photoshop 滤镜的下载以及安装方法 photoshop本身就带有很多滤镜.需要自己安装的滤镜我们都叫做外挂滤镜.photoshop怎么安装滤镜要看你下载的滤镜是什么样子的了. 有的滤镜下载下来 ...
- iOS GPUImage研究序一:内置滤镜
本片介绍关于GPUImage的125个内置过滤器:xoxo_x 著 本文参考:https://github.com/BradLarson/GPUImage#gpuimage 颜色调整 GPUImage ...
- |PS内置滤镜简介|
[转自]http://68ps.5d6d.com/thread-3707-1-8.html 转至百度贴吧某无名高人........ 内容: "风格化" 风格化:通过替换像素或增加相 ...
- iOS---GPUImage研究:内置滤镜解析
iOS GPUImage研究:内置滤镜解析. 颜色调整 GPUImageBrightnessFilter:调整图像的亮度 亮度:调整亮度(-1.0 - 1.0,默认为0.0) GPUImageExpo ...
- IOS 绘图 bitmap 滤镜 图片合成
CGSize size = CGSizeMake(800, 800);UIGraphicsBeginImageContextWithOptions(size, NO, 1);//1.获取bitmap上 ...
- php imagick 滤镜,PHP中imagick函数的中文解释
imagick的:: adaptiveBlurImage - 增加了自适应模糊滤镜图像 imagick的:: adaptiveResizeImage - 自适应调整图像数据依赖三角 imagick的: ...
最新文章
- 分类器评价与在R中的实现:混淆矩阵
- c/c++格式化字符串的标识
- [leveldb] 3.put/delete操作
- 一个程序员必须学会的Github使用技巧
- c语言subscripted_c语言。数组的问题。急!
- 使用 Drone 构建 Coding 项目
- matlab的7.3版本是什么_MX Linux 19.3 发布,Debian和antiX Linux的混合版本
- springboot项目启动rabbitmq报错org.springframework.amqp.AmqpIOException: java.io.IOException
- webservice python开发接口_基于Python的Webservice开发(四)-泛微OA的SOAP接口
- IE浏览器下常见的CSS兼容问题
- java检测栈溢出_java运行方法栈溢出
- vim 全局替换_VIM学习笔记 Ex模式 (Ex Mode)
- 开篇词 | 程序员的成长课
- 使用PIL剪切图片和拼接图片
- bzoj 1491: [NOI2007]社交网络
- 阿里云HaaS100物联网开发板学习笔记(二)硬件控制初步--让小灯闪烁起来
- EXP4恶意代码分析 20154306 刘宇轩
- android 6.0 电池曲线,Android6.0 RK3399 电池系统(一)BQ25700 IC 驱动分析 · Younix’s Studio...
- 英文论文写作常用词汇及句型
- 在你朋友面前伪装黑客2(程序代码)