2017-04-14 8 views
0

このようなものにどのようにグラデーションを適用できますか?ちょうど無地を得ました。ピクセルへのグラディエント効果[Java]

for (int i = 0; i < screen.pixels.length; i++) 
    screen.pixels[i] = 0xff0000; 
+0

さて、[第二の実施例](http://stackoverflow.com/questions/32814623/fillarc-in-java-not-blending-color-as-expected/32814713#32814713が)のimpleemntationあります[この例](http://stackoverflow.com/questions/13223065/color-fading-algorithm/13223818#13223818)は[この例]でも使用されています(http://stackoverflow.com/questions/21270610/java)。 - 平滑 - 色遷移/ 21270957#21270957)。基本的には、色と点の配列をとり、パーセンテージの値を与える単純なカラーブレンドアルゴリズムです。使用する色を計算します。 – MadProgrammer

+0

代わりに 'screen.pixels [i] = 0xff0000;' do 'screen.pixels [ i] =((256 * i)/screen.pixels.length)* 0x10000; 'またはi/screen.pixels.length'に基づいてR、G、Bチャンネル上の任意の勾配関数をパラメータとして使用します。 [可視スペクトルのRGB値](http://stackoverflow.com/a/22681410/2521214)または[見た目のRGBカラーインデックスから見た目のRGBカラーインデックスへ](http://stackoverflow.com/a/22630970/2521214) – Spektre

答えて

0

勾配を持った矩形のサイズをループ、16進コードのRGB値を取得することにより問題を解決し、2つのR、G、Bの値の間の補間します。

float r = Color.decode(colourOne).getRed(); 
float g = Color.decode(colourOne).getGreen(); 
float b = Color.decode(colourOne).getBlue(); 
float r2 = Color.decode(colourTwo).getRed(); 
float g2 = Color.decode(colourTwo).getGreen(); 
float b2 = Color.decode(colourTwo).getBlue(); 
float interp, newR, newG, newB; 

for (int x = 0; x < width; x++) 
{ 
    for (int y = 0; y < height; y++) 
    { 
     interp = (float) (x + y)/(float) (width + height); 
     newR = r * (1 - interp) + r2 * interp; 
     newG = g * (1 - interp) + g2 * interp; 
     newB = b * (1 - interp) + b2 * interp; 

     pixels[x + y * width] = (int) (Math.floor(newR) * 0x10000 + Math.floor(newG) * 0x100 + Math.floor(newB)); 
    } 
} 
関連する問題