簡體   English   中英

"將整數顏色值轉換為 RGB"

[英]Convert integer color value to RGB

我正在嘗試修改第三方軟件。 我想使用某些方法(我無法修改)返回的顏色作為整數。 但是,我想使用 RGB 格式,例如#FF00FF。 如何進行轉換?

這是一個 HTML 示例http://www.shodor.org/stella2java/rgbint.html我想在 Android 上用 Java 歸檔同樣的東西。

我發現對我來說最簡單和最好的解決方案是直接使用Color類,如下所示:

int red = Color.red(intColor);
int green = Color.green(intColor);
int blue = Color.blue(intColor);
int alpha = Color.alpha(intColor);

這樣我就可以處理整數值而不必處理字符串。 另一方面,如果代表rgb顏色的字符串是你需要的,Pankaj Kumar的答案是最好的。 我希望這對某人有用。

用這個

String hexColor = String.format("#%06X", (0xFFFFFF & intColor));

我們知道HEX中的顏色值長度是6.所以你在這里看到6。 %06X匹配來自(0xFFFFFF&intColor)的結果,如果length小於6,則通過在結果的左側附加ZERO使結果為6。 你看到#,所以這個#char被附加到結果,最后你得到一個HEX COLOR值。


API 26以來的更新

從API 26開始,為了類似的原因,引入了新的方法Color.valueOf(....)來轉換顏色。 你可以像使用它一樣

// sRGB
Color opaqueRed = Color.valueOf(0xffff0000); // from a color int
Color translucentRed = Color.valueOf(1.0f, 0.0f, 0.0f, 0.5f);

// Wide gamut color
ColorSpace sRgb = ColorSpace.get(ColorSpace.Named.SRGB);
@ColorLong long p3 = Color.pack(1.0f, 1.0f, 0.0f, 1.0f, sRgb);
Color opaqueYellow = Color.valueOf(p3); // from a color long

// CIE L*a*b* color space
ColorSpace lab = ColorSpace.get(Named.CIE_LAB);
Color green = Color.valueOf(100.0f, -128.0f, 128.0f, 1.0f, lab);

mView.setBackgroundColor(opaqueRed.toArgb());
mView2.setBackgroundColor(green.toArgb());
mView3.setBackgroundColor(translucentRed.toArgb());
mView4.setBackgroundColor(opaqueYellow.toArgb());

RGB使用六進制數字格式。 如果您有整數值,請將其轉換為hexa。

SDK 26開始,您就可以使用了

Color c = Color.valueOf(colorInt);

除此之外,似乎無法從任意argb創建Color實例。 底層代碼使用私有構造函數:

/**
 * Creates a new <code>Color</code> instance from an ARGB color int.
 * The resulting color is in the {@link ColorSpace.Named#SRGB sRGB}
 * color space.
 *
 * @param color The ARGB color int to create a <code>Color</code> from
 * @return A non-null instance of {@link Color}
 */
@NonNull
public static Color valueOf(@ColorInt int color) {
    float r = ((color >> 16) & 0xff) / 255.0f;
    float g = ((color >>  8) & 0xff) / 255.0f;
    float b = ((color      ) & 0xff) / 255.0f;
    float a = ((color >> 24) & 0xff) / 255.0f;
    return new Color(r, g, b, a, ColorSpace.get(ColorSpace.Named.SRGB));
}

Tt 似乎引用的值和所需的格式不匹配。 該值是十六進制,而 RGB 將讀取255, 0, 255整數是復合顏色表示。 由於尚不清楚正在完成什么,因此這里是所有三個變體:

如果您有一個復合顏色的整數,那么大多數顏色端點將接受未經修改的它。 這將類似於setBackgroundColor(colorInt)

如果您有十六進制值,則Color.parseColor(#colorHex)會將其轉換為顏色對象。

同樣, Color.rgb(redInt, greenInt, blueInt)會將紅色、綠色和藍色值轉換為顏色對象。

如果您需要將復合整數恢復為顏色對象,使用Color.valueOf(colorInt)會更簡單

暫無
暫無

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

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