将公式转换为Java

时间:2012-11-27 18:59:29

标签: java math

我想采取这个公式:

Formula

并将其转换为java代码。我不认为下面的代码是正确的,因为我认为我得到了错误的结果。

return (int)(2 * a * b + Math.pow(a, 2) * (1 - 2 * b));

以下是我正在使用的原始图片: http://images2.fanpop.com/images/photos/4800000/Beach-beaches-4843817-1280-800.jpg

a =图像链接的反转
b =图像链接

以下是我期望输出看起来像(PhotoShop):

Expected Result

这就是我的输出实际上是什么样的(我的应用程序):

Actual Result

Invert inv = new Invert();
inv.setStage(stage);
inv.setParent(this);
BufferedImage img = inv.filter();
int[] invPixels = new int[stage.width * stage.height];
img.getRGB(0, 0, stage.width, stage.height, invPixels, 0, stage.width);
for(int i = 0; i < ImageSync.originalPixels.length; i++){
    int fg = invPixels[i];
    int bg = ImageSync.originalPixels[i];
    int color = Blends.softLight(fg, bg);
    invPixels[i] = color;
}
img = new BufferedImage(stage.width, stage.height, BufferedImage.TYPE_INT_ARGB);
img.setRGB(0, 0, stage.width, stage.height, invPixels, 0, stage.width);
Preview.setImage(img);
stage.preview = Preview.getImage();
this.repaint();

柔光:

public static int softLight(int background, int foreground){
    return (2 * background * foreground) + ((background * background) * (1 - 2 * foreground));
}

3 个答案:

答案 0 :(得分:5)

尝试琐碎的计算:

return (2 * a * b ) + (a * a * (1 - 2 * b));

答案 1 :(得分:2)

代码是正确的。但你将结果类型转换为int可以改变结果。 id建议使用double或float。

并且重要的是:确保&amp; b也是浮动的或双重的。

答案 2 :(得分:0)

int result = (2*a*b)+((a*a)*(1-(2*b)));

正如@shippy所说,请确保abint