Ich versuche, eine Möglichkeit zum Abtasten einer Textur in Java zu implementieren. Ich möchte, dass dies genauso funktioniert, wie es mit GLSLs "Textur" -Funktion geschieht. Ich möchte, dass die benachbarten Pixel berücksichtigt werden, wenn die Farbe berechnet wird.Interpolieren zwischen Pixeln auf einem Bild
Sagen wir zum Beispiel, ich verwende einen Float, um die Bildfarbe bei einem bestimmten Pixel zu erhalten, und die Zahl fällt zwischen zwei Pixel. Wie kann ich eine Mischung der benachbarten Pixel berechnen? Hier ist ein Bild, das mein Ziel zeigt.
Gibt es eine einfache Möglichkeit, dies zu tun mit BufferedImage Klasse Java?
Hier ist der Code, den ich bisher habe, es funktioniert nur für die x-Position im Moment.
public static final java.awt.Color getColor(final BufferedImage image, final float x, final int y) {
final float imageX = x * image.getWidth();
final float decimal = imageX % 1f;
final java.awt.Color left = new java.awt.Color(image.getRGB(Maths.clamp((int) imageX - 1, 0, image.getWidth() - 1), y));
final java.awt.Color center = new java.awt.Color(image.getRGB(Maths.clamp((int) imageX, 0, image.getWidth() - 1), y));
final java.awt.Color right = new java.awt.Color(image.getRGB(Maths.clamp((int) imageX + 1, 0, image.getWidth() - 1), y));
if (decimal == 0.5f) return center;
if (decimal < 0.5f) {
final float distanceFromCenter = 0.5f - decimal;
final float distanceFromLeft = decimal + 0.5f;
final Vector3f leftColor = new Vector3f(left.getRed()/255f, left.getGreen()/255f, left.getBlue()/255f);
final Vector3f centerColor = new Vector3f(center.getRed()/255f, center.getGreen()/255f, center.getBlue()/255f);
leftColor.scale(1f - distanceFromLeft);
centerColor.scale(1f - distanceFromCenter);
final Vector3f color = Vector3f.add(leftColor, centerColor, null);
return new java.awt.Color(color.getX(), color.getY(), color.getZ());
} else {
final float distanceFromCenter = decimal - 0.5f;
final float distanceFromRight = 1f - decimal + 0.5f;
final Vector3f rightColor = new Vector3f(right.getRed()/255f, right.getGreen()/255f, right.getBlue()/255f);
final Vector3f centerColor = new Vector3f(center.getRed()/255f, center.getGreen()/255f, center.getBlue()/255f);
rightColor.scale(1f - distanceFromRight);
centerColor.scale(1f - distanceFromCenter);
final Vector3f color = Vector3f.add(rightColor, centerColor, null);
return new java.awt.Color(color.getX(), color.getY(), color.getZ());
}
}
was interpolieren genau hier bedeuten? Stellen Sie hier einen Code zur Verfügung, was ist das Problem und was versuchen Sie zu erreichen? –
so haben Sie Bild und Sie möchten ihre Farbe durch Pixel ändern? Mit gepufferten Bild? –
Ich möchte die Pixelfarbe bekommen, die ** wäre ** da wäre, wenn das Bild gestreckt würde, aber ohne das Bild wirklich zu strecken. – ASasseCreations