2010-12-12 28 views
1

J'ai une liste de valeurs de 0-1. Je souhaite convertir cette liste en image en utilisant un dégradé qui convertit ces valeurs en virgule flottante en valeurs RVB. Existe-t-il des outils Java qui vous offrent cette fonctionnalité?Recherche de couleurs de dégradé en Java

Répondre

0

0 doit être mis en correspondance 0
1 doit être mis en correspondance 255

garder à l'esprit que vous avez besoin 3 d'entre eux pour faire une couleur

donc multiplier par 255 le nombre flottant et le jeter aux int.

+0

Ceci est seulement pour la conversion aux valeurs RVB Photoshop, pour le gradient Laurence a suggéré un bel outil, dont vous n'avez pas besoin de faire le Conversion RVB –

0

Peut-être GradientPaint peut faire ce que vous voulez. Il n'est pas clair comment vous voulez qu'une liste de valeurs à virgule flottante soit convertie en un dégradé. Normalement, un dégradé se compose de deux couleurs et d'un mécanisme qui interpole entre ces couleurs. GradientPaint implémente un dégradé linéaire.

0

Supposons que vous avez un tableau fait de 64 000 triplets correspondant aux valeurs RVB, comme ceci:

final Random rand = new Random(); 
    final float[] f = new float[320*200*3]; 
    for (int i = 0; i < f.length; i++) { 
     f[i] = rand.nextFloat(); // <-- generates a float between [0...1.0[ 
    } 

Et que vous avez un BufferedImage qui a une taille de 320x200 (64 000 pixels) de type INT_ARGB (8 bits par valeur + 8 bits pour le niveau alpha):

final BufferedImage bi = new BufferedImage(320, 200, BufferedImage.TYPE_INT_ARGB); 

Ensuite, vous pouvez vous convertir tableau flotteur pour la valeur RVB et remplir l'image faire:

for (int x = 0; x < 320; x++) { 
     for (int y = 0; y < 200; y++) { 
      final int r = (int) (f[x+y*200*3] * 255.0); 
      final int g = (int) (f[x+y*200*3+1] * 255.0); 
      final int b = (int) (f[x+y*200*3+2] * 255.0); 
      bi.setRGB(x, y, 0xFF000000 | (r << 16) | (g << 8) | b); 
     } 
    } 

Notez que si vous affichez cette image, il apparaîtrait gris, mais si vous effectuez un zoom avant, vous verrez qu'il est en réalité fait de pixels colorés parfaitement aléatoires. C'est juste que le générateur de nombres aléatoires est si bon que tout semble gris sur l'écran :)