簡體   English   中英

將 RGB 值轉換為整數

[英]Convert RGB values to Integer

因此,在BufferedImage ,您會收到一個整數,其中包含 RGB 值。 到目前為止,我使用以下內容從中獲取 RGB 值:

// 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);

到目前為止,它有效。

我需要做的是弄清楚如何獲得一個整數,以便我可以使用BufferedImage.setRGB() ,因為它使用它給我的相同類型的數據。

我認為代碼是這樣的:

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

另外,我相信您可以使用以下方法獲取各個值:

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

如果您知道 r、g 和 b 值永遠不會 > 255 或 < 0,則不需要 &0x0ff

另外

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

不需要倍增。

如果 r, g, b = 3 個整數值,每個顏色從 0 到 255

然后

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

單個 rgb 值是 r,g,b 的組合值,總共有 16777216 種可能的色調。

int rgb = new Color(r, g, b).getRGB();

要獲得單個顏色值,您可以對像素(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();

以上將為您提供范圍為 0 到 255 的紅色、綠色和藍色的整數值。

要從 RGB 設置值,您可以通過以下方式進行:

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);

請注意,以上更改了單個像素的值。 因此,如果您需要更改整個圖像的值,您可能需要使用兩個 for 循環遍歷圖像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM