Use color pickers in image sampler

This commit is contained in:
Astrash
2022-08-12 12:34:27 +10:00
parent 274f864d6a
commit 4334b16ded
2 changed files with 11 additions and 7 deletions

View File

@@ -7,10 +7,9 @@
package com.dfsek.terra.addons.noise.image;
import net.jafama.FastMath;
import java.awt.image.BufferedImage;
import com.dfsek.terra.addons.image.picker.ColorPicker;
import com.dfsek.terra.addons.image.util.ColorUtil.Channel;
import com.dfsek.terra.api.noise.NoiseSampler;
@@ -21,17 +20,18 @@ public class ImageSampler implements NoiseSampler {
private final double frequency;
public ImageSampler(BufferedImage image, Channel channel, double frequency) {
private final ColorPicker colorPicker;
public ImageSampler(BufferedImage image, ColorPicker colorPicker, Channel channel, double frequency) {
this.image = image;
this.channel = channel;
this.frequency = frequency;
this.colorPicker = colorPicker;
}
@Override
public double noise(long seed, double x, double y) {
return ((channel.getChannel(image.getRGB(FastMath.floorMod(FastMath.floorToInt(x * frequency), image.getWidth()),
FastMath.floorMod(FastMath.floorToInt(y * frequency), image.getHeight()))) / 255D) - 0.5) *
2;
return channel.getChannel(colorPicker.apply(image, (int) (x * frequency), (int) (y * frequency))) / 255D * 2 - 1;
}
@Override

View File

@@ -11,6 +11,7 @@ import com.dfsek.tectonic.api.config.template.annotations.Value;
import java.awt.image.BufferedImage;
import com.dfsek.terra.addons.image.picker.ColorPicker;
import com.dfsek.terra.addons.image.util.ColorUtil.Channel;
import com.dfsek.terra.addons.noise.config.templates.SamplerTemplate;
import com.dfsek.terra.addons.noise.image.ImageSampler;
@@ -24,6 +25,9 @@ public class ImageSamplerTemplate extends SamplerTemplate<ImageSampler> {
@Value("image")
private @Meta BufferedImage image;
@Value("mode")
private @Meta ColorPicker colorPicker;
@Value("frequency")
private @Meta double frequency;
@@ -32,6 +36,6 @@ public class ImageSamplerTemplate extends SamplerTemplate<ImageSampler> {
@Override
public NoiseSampler get() {
return new ImageSampler(image, channel, frequency);
return new ImageSampler(image, colorPicker, channel, frequency);
}
}