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é.
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;
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.
int rgb = new Color(r, g, b).getRGB();
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.
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.