在我最近的一个涉及图像波浪/纹波生成的项目中,我似乎遇到了障碍.我在网格上制作了一个可以完美运行的基本颜色; 哎呀,我甚至根据波浪的高度添加了颜色.
然而,我的总体目标是使这种影响工作过的图像就像你看到这里.我正在遵循人们称之为Hugo Elias方法的算法(尽管如果他真的想出了设计,那就是idk).他的教程可以在这里找到!
在遵循该教程时,我发现他的伪代码难以理解.我的意思是大多数情况下的概念是有意义的,直到我在图像上击中高度贴图部分.问题是x和y偏移会抛出一个ArrayIndexOutOfBoundsException,因为他将偏移量添加到相应的x或y.如果波太大(即在我的情况下为512),则会抛出错误; 然而,如果它太小你就看不到它.
我试图实现他的算法的任何想法或修复都将成为我的一天.谢谢!
所以我不能真正制作一个小的可编译版本并显示问题,但我会给出我在算法中使用的三种方法.还要记住,buffer1和buffer2是wave(current和previous)的高度图,imgArray是一个bufferedImage,由一个充满ARGB值的int [img.getWidth()*img.getHeight()]表示.
无论如何你去:
public class WaveRippleAlgorithmOnImage extends JPanel implements Runnable, MouseListener, MouseMotionListener
{
private int[] buffer1;
private int[] buffer2;
private int[] imgArray;
private int[] movedImgArray;
private static double dampening = 0.96;
private BufferedImage img;
public WaveRippleAlgorithmOnImage(BufferedImage img)
{
this.img = img;
imgArray = new int[img.getHeight()*img.getWidth()];
movedImgArray = new int[img.getHeight()*img.getWidth()];
imgArray = img.getRGB(0, 0,
img.getWidth(), img.getHeight(),
null, 0, img.getWidth());
//OLD CODE
/*for(int y = 0; y < img.getHeight(); y++)
{ …Run Code Online (Sandbox Code Playgroud)