mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-17 06:11:24 +00:00
Wrap BufferedImage access
This commit is contained in:
+3
-3
@@ -2,12 +2,12 @@ package com.dfsek.terra.addons.image;
|
|||||||
|
|
||||||
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
|
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.image.config.BufferedImageLoader;
|
import com.dfsek.terra.addons.image.config.ImageLoader;
|
||||||
import com.dfsek.terra.addons.image.config.sampler.SingleColorSamplerTemplate;
|
import com.dfsek.terra.addons.image.config.sampler.SingleColorSamplerTemplate;
|
||||||
import com.dfsek.terra.addons.image.config.sampler.TileColorSamplerTemplate;
|
import com.dfsek.terra.addons.image.config.sampler.TileColorSamplerTemplate;
|
||||||
|
import com.dfsek.terra.addons.image.image.Image;
|
||||||
import com.dfsek.terra.addons.image.sampler.ColorSampler;
|
import com.dfsek.terra.addons.image.sampler.ColorSampler;
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
@@ -37,7 +37,7 @@ public class ImageLibraryAddon implements AddonInitializer {
|
|||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
.register(addon, ConfigPackPreLoadEvent.class)
|
||||||
.priority(10)
|
.priority(10)
|
||||||
.then(event -> {
|
.then(event -> {
|
||||||
event.getPack().applyLoader(BufferedImage.class, new BufferedImageLoader(event.getPack().getLoader()));
|
event.getPack().applyLoader(Image.class, new ImageLoader(event.getPack().getLoader()));
|
||||||
})
|
})
|
||||||
.then(event -> {
|
.then(event -> {
|
||||||
CheckedRegistry<Supplier<ObjectTemplate<ColorSampler>>> colorSamplerRegistry = event.getPack().getOrCreateRegistry(
|
CheckedRegistry<Supplier<ObjectTemplate<ColorSampler>>> colorSamplerRegistry = event.getPack().getOrCreateRegistry(
|
||||||
|
|||||||
-33
@@ -1,33 +0,0 @@
|
|||||||
package com.dfsek.terra.addons.image.config;
|
|
||||||
|
|
||||||
import com.dfsek.tectonic.api.depth.DepthTracker;
|
|
||||||
import com.dfsek.tectonic.api.exception.LoadException;
|
|
||||||
import com.dfsek.tectonic.api.loader.ConfigLoader;
|
|
||||||
import com.dfsek.tectonic.api.loader.type.TypeLoader;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
|
||||||
import java.awt.image.BufferedImage;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.lang.reflect.AnnotatedType;
|
|
||||||
|
|
||||||
import com.dfsek.terra.api.config.Loader;
|
|
||||||
|
|
||||||
|
|
||||||
public class BufferedImageLoader implements TypeLoader<BufferedImage> {
|
|
||||||
private final Loader files;
|
|
||||||
|
|
||||||
public BufferedImageLoader(Loader files) {
|
|
||||||
this.files = files;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BufferedImage load(@NotNull AnnotatedType t, @NotNull Object c, @NotNull ConfigLoader loader, DepthTracker depthTracker)
|
|
||||||
throws LoadException {
|
|
||||||
try {
|
|
||||||
return ImageIO.read(files.get((String) c));
|
|
||||||
} catch(IOException e) {
|
|
||||||
throw new LoadException("Unable to load image", e, depthTracker);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+41
@@ -0,0 +1,41 @@
|
|||||||
|
package com.dfsek.terra.addons.image.config;
|
||||||
|
|
||||||
|
import com.dfsek.tectonic.api.depth.DepthTracker;
|
||||||
|
import com.dfsek.tectonic.api.exception.LoadException;
|
||||||
|
import com.dfsek.tectonic.api.loader.ConfigLoader;
|
||||||
|
import com.dfsek.tectonic.api.loader.type.TypeLoader;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.lang.reflect.AnnotatedType;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addons.image.image.BufferedImageWrapper;
|
||||||
|
import com.dfsek.terra.addons.image.image.Image;
|
||||||
|
import com.dfsek.terra.api.config.Loader;
|
||||||
|
|
||||||
|
|
||||||
|
public class ImageLoader implements TypeLoader<Image> {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(ImageLoader.class);
|
||||||
|
|
||||||
|
private final Loader files;
|
||||||
|
|
||||||
|
public ImageLoader(Loader files) {
|
||||||
|
this.files = files;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Image load(@NotNull AnnotatedType t, @NotNull Object c, @NotNull ConfigLoader loader, DepthTracker depthTracker)
|
||||||
|
throws LoadException {
|
||||||
|
try {
|
||||||
|
return new BufferedImageWrapper(ImageIO.read(files.get((String) c)));
|
||||||
|
} catch(IllegalArgumentException e) {
|
||||||
|
throw new LoadException("Unable to load image (image might be too large?)", e, depthTracker);
|
||||||
|
} catch(IOException e) {
|
||||||
|
throw new LoadException("Unable to load image", e, depthTracker);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+2
-3
@@ -4,8 +4,7 @@ import com.dfsek.tectonic.api.config.template.annotations.Default;
|
|||||||
import com.dfsek.tectonic.api.config.template.annotations.Value;
|
import com.dfsek.tectonic.api.config.template.annotations.Value;
|
||||||
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
|
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import com.dfsek.terra.addons.image.image.Image;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.image.sampler.ColorSampler;
|
import com.dfsek.terra.addons.image.sampler.ColorSampler;
|
||||||
import com.dfsek.terra.addons.image.sampler.transform.Alignment;
|
import com.dfsek.terra.addons.image.sampler.transform.Alignment;
|
||||||
|
|
||||||
@@ -13,7 +12,7 @@ import com.dfsek.terra.addons.image.sampler.transform.Alignment;
|
|||||||
public abstract class ColorSamplerTemplate implements ObjectTemplate<ColorSampler> {
|
public abstract class ColorSamplerTemplate implements ObjectTemplate<ColorSampler> {
|
||||||
|
|
||||||
@Value("path")
|
@Value("path")
|
||||||
protected BufferedImage image;
|
protected Image image;
|
||||||
|
|
||||||
@Value("align")
|
@Value("align")
|
||||||
@Default
|
@Default
|
||||||
|
|||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
package com.dfsek.terra.addons.image.image;
|
||||||
|
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
|
|
||||||
|
public class BufferedImageWrapper implements Image {
|
||||||
|
|
||||||
|
private final BufferedImage image;
|
||||||
|
|
||||||
|
public BufferedImageWrapper(BufferedImage image) {
|
||||||
|
this.image = image;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getRGB(int x, int y) {
|
||||||
|
return image.getRGB(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getWidth() {
|
||||||
|
return image.getWidth();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getHeight() {
|
||||||
|
return image.getHeight();
|
||||||
|
}
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
package com.dfsek.terra.addons.image.image;
|
||||||
|
|
||||||
|
public interface Image {
|
||||||
|
int getRGB(int x, int y);
|
||||||
|
|
||||||
|
int getWidth();
|
||||||
|
|
||||||
|
int getHeight();
|
||||||
|
}
|
||||||
+3
-4
@@ -1,19 +1,18 @@
|
|||||||
package com.dfsek.terra.addons.image.sampler;
|
package com.dfsek.terra.addons.image.sampler;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import com.dfsek.terra.addons.image.image.Image;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.image.sampler.transform.ImageTransformation;
|
import com.dfsek.terra.addons.image.sampler.transform.ImageTransformation;
|
||||||
|
|
||||||
|
|
||||||
public class SimpleColorSampler implements ColorSampler {
|
public class SimpleColorSampler implements ColorSampler {
|
||||||
|
|
||||||
private final BufferedImage image;
|
private final Image image;
|
||||||
|
|
||||||
private final Integer fallback;
|
private final Integer fallback;
|
||||||
|
|
||||||
private final ImageTransformation transformation;
|
private final ImageTransformation transformation;
|
||||||
|
|
||||||
public SimpleColorSampler(BufferedImage image, int fallbackColor, ImageTransformation transformation) {
|
public SimpleColorSampler(Image image, ColorSampler fallback, ImageTransformation transformation) {
|
||||||
this.image = image;
|
this.image = image;
|
||||||
this.fallback = fallbackColor;
|
this.fallback = fallbackColor;
|
||||||
this.transformation = transformation;
|
this.transformation = transformation;
|
||||||
|
|||||||
+3
-4
@@ -2,18 +2,17 @@ package com.dfsek.terra.addons.image.sampler;
|
|||||||
|
|
||||||
import net.jafama.FastMath;
|
import net.jafama.FastMath;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import com.dfsek.terra.addons.image.image.Image;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.image.sampler.transform.ImageTransformation;
|
import com.dfsek.terra.addons.image.sampler.transform.ImageTransformation;
|
||||||
|
|
||||||
|
|
||||||
public class TileColorSampler implements ColorSampler {
|
public class TileColorSampler implements ColorSampler {
|
||||||
|
|
||||||
private final BufferedImage image;
|
private final Image image;
|
||||||
|
|
||||||
private final ImageTransformation transformation;
|
private final ImageTransformation transformation;
|
||||||
|
|
||||||
public TileColorSampler(BufferedImage image, ImageTransformation transformation) {
|
public TileColorSampler(Image image, ImageTransformation transformation) {
|
||||||
this.image = image;
|
this.image = image;
|
||||||
this.transformation = transformation;
|
this.transformation = transformation;
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-5
@@ -1,29 +1,29 @@
|
|||||||
package com.dfsek.terra.addons.image.sampler.transform;
|
package com.dfsek.terra.addons.image.sampler.transform;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import com.dfsek.terra.addons.image.image.Image;
|
||||||
|
|
||||||
|
|
||||||
public enum Alignment implements ImageTransformation {
|
public enum Alignment implements ImageTransformation {
|
||||||
|
|
||||||
NONE() {
|
NONE() {
|
||||||
@Override
|
@Override
|
||||||
public int transformX(BufferedImage image, int x) {
|
public int transformX(Image image, int x) {
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int transformZ(BufferedImage image, int z) {
|
public int transformZ(Image image, int z) {
|
||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
CENTER {
|
CENTER {
|
||||||
@Override
|
@Override
|
||||||
public int transformX(BufferedImage image, int x) {
|
public int transformX(Image image, int x) {
|
||||||
return x + image.getWidth() / 2;
|
return x + image.getWidth() / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int transformZ(BufferedImage image, int z) {
|
public int transformZ(Image image, int z) {
|
||||||
return z + image.getHeight() / 2;
|
return z + image.getHeight() / 2;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
+3
-3
@@ -1,11 +1,11 @@
|
|||||||
package com.dfsek.terra.addons.image.sampler.transform;
|
package com.dfsek.terra.addons.image.sampler.transform;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import com.dfsek.terra.addons.image.image.Image;
|
||||||
|
|
||||||
|
|
||||||
public interface ImageTransformation {
|
public interface ImageTransformation {
|
||||||
|
|
||||||
int transformX(BufferedImage image, int x);
|
int transformX(Image image, int x);
|
||||||
|
|
||||||
int transformZ(BufferedImage image, int z);
|
int transformZ(Image image, int z);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user