2

私はこの式を取りたい:

方式

それを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):

期待される結果

これは私の出力が実際にどのように見えるかです (私のアプリケーション):

実結果

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));
}
4

3 に答える 3

5

簡単な計算を試してください:

return (2 * a * b ) + (a * a * (1 - 2 * b));
于 2012-11-27T19:01:47.407 に答える
2

コードは正しいです。ただし、結果を変更できる int に結果を型キャストします。double または float を使用することをお勧めします。

重要: a と b も float または double であることを確認してください。

于 2012-11-27T19:05:44.247 に答える
0
int result = (2*a*b)+((a*a)*(1-(2*b)));

@shippyが言ったように、 と であることを確認しabくださいint

于 2012-11-27T19:13:56.560 に答える