2017-04-14 62 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;'執行'screen.pixels [ i] =((256 * i)/screen.pixels.length)* 0x10000;'或者在R,G,B通道上使用任何基於'i/screen.pixels.length'作爲參數的漸變函數... like [可見光譜的RGB值](http://stackoverflow.com/a/22681410/2521214)或[明星BV顏色索引到明顯的RGB顏色](http://stackoverflow.com/a/22630970/2521214) – Spektre

回答

0

通過得到的十六進制代碼的RGB值,通過得到了梯度矩形的大小循環解決該問題,並且兩個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)); 
    } 
}