Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在给定像素数组的C语言中实现涟漪效应_C_Image_Ripple - Fatal编程技术网

在给定像素数组的C语言中实现涟漪效应

在给定像素数组的C语言中实现涟漪效应,c,image,ripple,C,Image,Ripple,我必须在像素阵列上实现涟漪效应。每个像素是一个32位整数,表示ARGB颜色。有人对如何开始有什么建议吗?通常,涟漪效应是图像的某种失真,其中失真量在“波浪”模式中逐点变化。因此,第一个任务是创建一个“深度映射”,为每个像素生成一个数字。直观地说,深度贴图将表示原始像素上方波纹水面的高度。实验的起点可以是 #define X_CENTER 100 // x pixel position of center #define Y_CENTER 100 // y pixel position o

我必须在像素阵列上实现涟漪效应。每个像素是一个32位整数,表示ARGB颜色。有人对如何开始有什么建议吗?

通常,涟漪效应是图像的某种失真,其中失真量在“波浪”模式中逐点变化。因此,第一个任务是创建一个“深度映射”,为每个像素生成一个数字。直观地说,深度贴图将表示原始像素上方波纹水面的高度。实验的起点可以是

#define X_CENTER 100   // x pixel position of center
#define Y_CENTER 100   // y pixel position of center
#define RADIUS 70      // approximate radius of circular wave train, in pixels
#define WAVELENGTH 10  // wavelength of ripples, in pixels
#define TRAINWIDTH 3.4 // approximate width of wave train, in wavelengths
#define SUPERPHASE 1.5 // phase vel. / group vel. (irrelevant for stills)

// returns a number from -1.0 to 1.0
double depth(int x, int y) {
  double dx = x - X_CENTER ; // or int, if the center coords are ints
  double dy = y - Y_CENTER ;
  double r = (sqrt(dx*dx+dy*dy)-RADIUS)/WAVELENGTH ;
  double k = r - (1-SUPERPHASE)*RADIUS/WAVELENGTH ;
  double a = 1 / (1.0 + (r/TRAINWIDTH)*(r/TRAINWIDTH));
  return a * sin(k*2*PI);
}
当您拥有深度贴图时(如果您只想将相同的涟漪应用于许多不同的图像,则可以预先计算深度贴图),您可以使用各种选项来处理它:

  • 根据像素的深度按比例变亮或变暗
  • 将深度贴图沿对角线方向移动几个像素,并根据移动贴图和未移动贴图之间的差异变亮或变暗
  • 将图像中的每个像素稍微移动一个向量,该向量与每个像素的深度与其(比如)东部和南部相邻像素的深度之差成比例。为了获得令人愉悦的视觉效果,可能需要进行一些平滑或过采样,尤其是当基础图像包含清晰的轴平行边时

可能需要对它们的组合和变化进行一些实验,以接近你心目中所期望的效果。

你心中是否有一个特定的涟漪效应,或者只是“看起来涟漪的东西”?你的目标是动画效果还是静止图像?静止图像。。。只是想有一个涟漪效应辐射从一个特定的起始像素(r,c)。谢谢你的信息,伙计。。。非常感谢。我要试试看!嗨,海宁。我在这里迟到了,但我希望如果你能告诉我,有没有可能在2d数组中给定一个插槽来获取相邻(周围)的插槽?我不太清楚这个过程是如何被调用的,因此我不知道用什么术语来形容谷歌。提前谢谢。