web-dev-qa-db-fra.com

Convertir les valeurs RVB en entier

Ainsi, dans un BufferedImage, vous recevez un seul entier qui contient les valeurs RVB. Jusqu'à présent, j'utilise ce qui suit pour en obtenir les valeurs RVB:

// rgbs is an array of integers, every single integer represents the
// RGB values combined in some way
int r = (int) ((Math.pow(256,3) + rgbs[k]) / 65536);
int g = (int) (((Math.pow(256,3) + rgbs[k]) / 256 ) % 256 );
int b = (int) ((Math.pow(256,3) + rgbs[k]) % 256);

Et jusqu'à présent, cela fonctionne.

Ce que je dois faire, c'est comprendre comment obtenir un entier afin que je puisse utiliser BufferedImage.setRGB(), car cela prend le même type de données qu'il m'a donné.

47
Rahat Ahmed

Je pense que le code est quelque chose comme:

int rgb = red;
rgb = (rgb << 8) + green;
rgb = (rgb << 8) + blue;

De plus, je pense que vous pouvez obtenir les valeurs individuelles en utilisant:

int red = (rgb >> 16) & 0xFF;
int green = (rgb >> 8) & 0xFF;
int blue = rgb & 0xFF;
87
camickr
int rgb = ((r&0x0ff)<<16)|((g&0x0ff)<<8)|(b&0x0ff);

Si vous savez que vos valeurs r, g et b ne sont jamais> 255 ou <0, vous n'avez pas besoin de & 0x0ff

De plus

int red = (rgb>>16)&0x0ff;
int green=(rgb>>8) &0x0ff;
int blue= (rgb)    &0x0ff;

Pas besoin de multiplier.

26
KitsuneYMG
int rgb = new Color(r, g, b).getRGB();
20
Nicholas

si r, g, b = 3 valeurs entières de 0 à 255 pour chaque couleur

puis

rgb = 65536 * r + 256 * g + b;

la valeur rgb unique est la valeur composite de r, g, b combinés pour un total de 16777216 nuances possibles.

19
Jay

Pour obtenir des valeurs de couleur individuelles, vous pouvez utiliser Couleur comme suit pour le pixel (x, y).

import Java.awt.Color;
import Java.awt.image.BufferedImage;

Color c = new Color(buffOriginalImage.getRGB(x,y));
int red = c.getRed();
int green = c.getGreen();
int blue = c.getBlue();

Ce qui précède vous donnera les valeurs entières de rouge, vert et bleu dans une plage de 0 à 255.

Pour définir les valeurs à partir de RVB, vous pouvez le faire en:

Color myColour = new Color(red, green, blue);
int rgb = myColour.getRGB();

//Change the pixel at (x,y) ti rgb value
image.setRGB(x, y, rgb);

Veuillez noter que ce qui précède modifie la valeur d'un seul pixel. Donc, si vous devez modifier la valeur de l'image entière, vous devrez peut-être parcourir l'illustration à l'aide de deux boucles for.

3
Ajay Sant