web-dev-qa-db-ja.com

整数カラー値をRGBに変換

サードパーティのソフトウェアを変更しようとしています。いくつかのメソッドによって返される色(変更できません)を整数として使用します。ただし、#FF00FFのようなRGB形式を使用したいと思います。どうすれば変換できますか?

以下にHTMLの例を示します http://www.shodor.org/stella2Java/rgbint.html JavaでもAndroidでも同じことをアーカイブしたいと思います。

24
Marek

これを使って

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

16進数の色の長さは6であることがわかっています。したがって、ここでは6が表示されます。 %06Xは(0xFFFFFF&intColor)からの結果と一致し、長さが6未満の場合、結果の左側にZEROを追加して結果を6にします。そして、#が表示されるため、この#charが結果に追加され、最終的に16進数の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());
_
40
Pankaj Kumar

私にとって最も簡単で最善の解決策であることがわかったのは、次のようにColorクラスを直接使用することでした。

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

この方法で、文字列を処理することなく、すでに整数値を処理できます。一方、RGB色を表す文字列が必要な場合は、パンカジクマールの答えが最適です。これが誰かに役立つことを願っています。

65
Francesco D.M.

RGBは16進数形式を使用します。整数値がある場合は、intを16進数に変換します。

1
simaremare

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));
}
1
patrickf