我試圖實現一種在Java中採樣紋理的方法。我希望它能像使用GLSL的「紋理」功能一樣工作。我想要在計算顏色時將相鄰像素考慮在內。圖像上的像素之間的插值
例如,假設我使用浮點數來獲取特定像素處的圖像顏色,並且數字落在兩個像素之間。我如何計算相鄰像素的混合?這是顯示我的目標的圖像。
是否有一個簡單的方法來做到這一點使用Java的BufferedImage類?
下面是我到目前爲止的代碼,它現在只適用於x位置。
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());
}
}
這裏究竟意味着什麼?在這裏提供一些代碼作爲問題和你想要達到的目標? –
所以你有圖像,你想通過像素改變它們的顏色?使用緩衝圖像? –
我想要獲取像素顏色,如果圖像被拉伸,但沒有實際拉伸圖像,**會出現在那裏。 – ASasseCreations