質問
どのように変換するにはRGBA色のタプル例(96, 96, 96, 202), 対応するために、RGBカラーのタプル?
編集:
何をしたいのですが、このRGB値に最も類似のRGBAのタプルを視覚的に白い背景のもの。
解決
私upvotedヨハネス-'答えになっています。
*少数のコメントしてあげる私の答えが正しくありません。うまくいった場合のアルファ値を逆から。により定義し、これは動作しません。私はそのための更新は以下の式が正しいの。このものと同等@hkurabkoの答え以下*
具体的に答えたりのアルファ値は実際の色の結果に基づき不透明な背景色(またはマットとしている。
あのアルゴリズムのためのこれらの この wikipediaにリンク):
- NormaliseのRGBA値をそのように、彼らはすべて0と1だけで分割しそれぞれの値により255ではないかと思います。ま通話の結果
Source
. - Normaliseもにマット色(黒、白ど).ま通話の結果
BGColor
注意 この場合は、背景色も透明にしかできないrecurseのプロセスの最初のものを選んだマット)のソースRGBのために操作します。 現在の変換を定義して完全にpsuedoコードです。):
Source => Target = (BGColor + Source) = Target.R = ((1 - Source.A) * BGColor.R) + (Source.A * Source.R) Target.G = ((1 - Source.A) * BGColor.G) + (Source.A * Source.G) Target.B = ((1 - Source.A) * BGColor.B) + (Source.A * Source.B)
の最終0-255値 Target
するだけで増殖すべてのnormalised値に戻による255,けてくださいキャップで255の場合の値を超え1.0(このは以上の露出がより複雑なアルゴリズムに対する全体像処理など)。
編集:お問いしたいの白色背景その場合で固定BGColorに255,255,255.
他のヒント
HM ...
にについてhttp://en.wikipedia.org/wiki/Alpha_compositing#Alpha_blendingする
アンドラーシュゾルタンによって提供される溶液がわずかに変更する必要があります:
Source => Target = (BGColor + Source) =
Target.R = ((1 - Source.A) * BGColor.R) + (Source.A * Source.R)
Target.G = ((1 - Source.A) * BGColor.G) + (Source.A * Source.G)
Target.B = ((1 - Source.A) * BGColor.B) + (Source.A * Source.B)
この変更されたバージョンには、前に、私のために正常に動作します。バージョンRGBAは(0,0,0,0)マットRGBで(FF、FF、FF)RGB(0,0,0)に変更されます。
このは、使用する色空間に依存します。 RGBAがプリマルチカラー空間内にあり、半透明である場合は、正しいRGBカラーを取得するためにアルファを分割する必要があります。色は、非プリマルチカラー空間内にある場合、あなただけのアルファチャンネルを破棄することができます。
私の場合、私は、RGBにRGBAの画像を変換したかったし、次は期待と同じように働いています:
rgbImage = cv2.cvtColor(npimage, cv2.COLOR_RGBA2RGB)
ここでアンドラーシュに従ってとhkurabkoの答えで便利なSASSの機能があります。
@function rgba_blend($fore, $back) {
$ored: ((1 - alpha($fore)) * red($back) ) + (alpha($fore) * red($fore));
$ogreen: ((1 - alpha($fore)) * green($back) ) + (alpha($fore) * green($fore));
$oblue: ((1 - alpha($fore)) * blue($back) ) + (alpha($fore) * blue($fore));
@return rgb($ored, $ogreen, $oblue);
}
使用方法:
$my_color: rgba(red, 0.5); // build a color with alpha for below
#a_div {
background-color: rgba_blend($my_color, white);
}
ここではいくつかのJavaコードは(AndroidのAPI 24上で動作)です。
//int rgb_background = Color.parseColor("#ffffff"); //white background
//int rgba_color = Color.parseColor("#8a000000"); //textViewColor
int defaultTextViewColor = textView.getTextColors().getDefaultColor();
int argb = defaultTextViewColor;
int alpha = 0xFF & (argb >> 24);
int red = 0xFF & (argb >> 16);
int green = 0xFF & (argb >> 8);
int blue = 0xFF & (argb >> 0);
float alphaFloat = (float)alpha / 255;
String colorStr = rgbaToRGB(255, 255, 255, red, green, blue, alphaFloat);
機能:
protected String rgbaToRGB(int rgb_background_red, int rgb_background_green, int rgb_background_blue,
int rgba_color_red, int rgba_color_green, int rgba_color_blue, float alpha) {
float red = (1 - alpha) * rgb_background_red + alpha * rgba_color_red;
float green = (1 - alpha) * rgb_background_green + alpha * rgba_color_green;
float blue = (1 - alpha) * rgb_background_blue + alpha * rgba_color_blue;
String redStr = Integer.toHexString((int) red);
String greenStr = Integer.toHexString((int) green);
String blueStr = Integer.toHexString((int) blue);
String colorHex = "#" + redStr + greenStr + blueStr;
//return Color.parseColor(colorHex);
return colorHex;
}