Hallo alle zusammen,
ich suche nach einer Möglichkeit die Farben in einem BufferedImage schnell zu ändern. Hab was gesurft und code beispiele gefunden, nur waren diese sehr langsam und es kommt zum laggen des Bildes.
Die Idee kommt daher, das ich eine TagNacht Zyklus darstellen möchte und dazu das Bild nehme und die Farben der Tageszeit anpasse. Hab diesen Code momentan drinne aber der ist was lahm:
Bin für Vorschläge dankbar
ich suche nach einer Möglichkeit die Farben in einem BufferedImage schnell zu ändern. Hab was gesurft und code beispiele gefunden, nur waren diese sehr langsam und es kommt zum laggen des Bildes.
Die Idee kommt daher, das ich eine TagNacht Zyklus darstellen möchte und dazu das Bild nehme und die Farben der Tageszeit anpasse. Hab diesen Code momentan drinne aber der ist was lahm:
Java:
public void run() {
while (this.frame.isVisible()) {
if (this.frame.getBild() != null) {
BufferedImage img = this.frame.getBild();
LUT lut = new LUT();
RGBColor color = new RGBColor();
lut.setA(0.5);
for (int x = 0, w = img.getWidth(); x < w; x++) {
for (int y = 0, h = img.getHeight(); y < h; y++) {
int rgb = img.getRGB(x, y);
color.setColor(rgb);
color.setRGB(lut.getLUTValue(color.getRed()),
lut.getLUTValue(color.getGreen()),
lut.getLUTValue(color.getBlue()));
img.setRGB(x, y, color.getRGB());
}
}
}
try {
Thread.sleep(10);
} catch (Exception en) {
}
}
}
public class RGBColor {
private int farbe;
public RGBColor() {
}
public void setColor(int rgb) {
farbe = rgb;
}
public int getRed() {
return (farbe >> 16) & 0xFF;
}
public int getGreen() {
return (farbe >> 8) & 0xFF;
}
public int getBlue() {
return (farbe >> 0) & 0xFF;
}
public void setRGB(int r, int g, int b) {
farbe = ((255 & 0xFF) << 24) | ((r & 0xFF) << 16) | ((g & 0xFF) << 8) | ((b & 0xFF) << 0);
}
public int getRGB() {
return farbe;
}
}
public class LUT {
private int[] value;
private double a = 1;
private double b = 0;
public LUT() {
value = new int[256];
create();
}
public int getLUTValue(int x) {
return value[x];
}
public void setA(double a) {
this.a = a;
create();
}
public void setB(double b) {
this.b = b;
create();
}
private void create() {
for (int x = 0; x <= 255; x++) {
value[x] = (int) (a * x + b);
if (value[x] > 255) {
value[x] = 255;
}
if (value[x] < 0) {
value[x] = 0;
}
}
}
}
Bin für Vorschläge dankbar