java三角插值如何又名rgb测试图像
java triangle interpolation how to aka rgb test image
所以我想做的是在没有任何外部库的情况下在 java 中插入一个三角形作为挑战,仅使用 swing 来显示图像。我在网上搜索,但找不到任何东西。这就是我做这个的原因。
解决方案:加权平均!
private int interpolate(int x, int y, int v1, int v2, int v3) {
// these are my triangle corners
Vector p1v = new Vector(p1.x, p1.y);
Vector p2v = new Vector(p2.x, p2.y);
Vector p3v = new Vector(p3.x, p3.y);
// current point
Vector f = new Vector(x, y);
// calculate weighted average
double a1 = triangleArea(f, p2v, p3v);
double a2 = triangleArea(f, p1v, p3v);
double a3 = triangleArea(f, p1v, p2v);
return (int) ((a1 * v1 + a2 * v2 + a3 * v3) / (a1 + a2 + a3));
}
用法 - 为 x 和 y 值放入双 for 循环:
int red = interpolate((int) x, y, p1red, p2red, p3red);
int green = interpolate((int) x, y, p1green, p2green, p3green);
int blue = interpolate((int) x, y, p1blue, p2blue, p3blue);
//System.out.println("xyrgb: " + (int)x + ", " + y + ", " + red + ", " + green + ", " + blue);
bI.setRGB((int)x, y, new Color(red, green, blue).getRGB());
您可以在我的 github 上找到更多代码:here
屏幕截图:
所以我想做的是在没有任何外部库的情况下在 java 中插入一个三角形作为挑战,仅使用 swing 来显示图像。我在网上搜索,但找不到任何东西。这就是我做这个的原因。
解决方案:加权平均!
private int interpolate(int x, int y, int v1, int v2, int v3) {
// these are my triangle corners
Vector p1v = new Vector(p1.x, p1.y);
Vector p2v = new Vector(p2.x, p2.y);
Vector p3v = new Vector(p3.x, p3.y);
// current point
Vector f = new Vector(x, y);
// calculate weighted average
double a1 = triangleArea(f, p2v, p3v);
double a2 = triangleArea(f, p1v, p3v);
double a3 = triangleArea(f, p1v, p2v);
return (int) ((a1 * v1 + a2 * v2 + a3 * v3) / (a1 + a2 + a3));
}
用法 - 为 x 和 y 值放入双 for 循环:
int red = interpolate((int) x, y, p1red, p2red, p3red);
int green = interpolate((int) x, y, p1green, p2green, p3green);
int blue = interpolate((int) x, y, p1blue, p2blue, p3blue);
//System.out.println("xyrgb: " + (int)x + ", " + y + ", " + red + ", " + green + ", " + blue);
bI.setRGB((int)x, y, new Color(red, green, blue).getRGB());
您可以在我的 github 上找到更多代码:here
屏幕截图: