Удалите альфу из цвета, но сохраните ее текстуру

У меня цвет #6A8F6509

Я хочу удалить альфа-часть этого цвета и оставить только компоненты RGB (т. Е. #RRGGBB).

Полученный цвет должен быть идентичен исходному без прозрачности.

Как мне это сделать на Java от Java?

Обновление: исходный фон всегда белый (#FFF)

Для каждого цвета: C '= C (a / 255) + 255 (1- (a / 255))

Итак, для # 6A8F6509:

R '= 143 (106/255) + 255 (1- (106/255) = (приблизительно) 208

G '= 101 (106/255) + 255 (1- (106/255) = (приблизительно) 191

B '= 9 (106/255) + 255 (1- (106/255) = (приблизительно) 153

Поэтому ваш ответ должен быть: # D0BF99, если моя математика правильная. Это относится только ко всему белым фоном, а для небелого фона второе добавление должно иметь соответствующее соответствующее значение цвета фона вместо 255.

— РЕДАКТИРОВАТЬ —

Глядя на формулу снова, я не совсем уверен, применяется ли формула к каждому цвету или всему цвету (быстрый визуальный тест должен быть в состоянии рассказать вам – я угадываю за цвет). Я должен указать, что это формула, прямо из вики-страницы Alpha Compositing:

http://en.wikipedia.org/wiki/Alpha_compositing#Alpha_blending

 int newColor = oldColor | 0xFF000000; 

Если вы хотите сделать это с помощью кода, вы можете попробовать следующий код:

  static int stripAlpha(int color){ return Color.rgb(Color.red(color), Color.green(color), Color.blue(color)); } 

пытаться

 #FF8F6509 

Первые две цифры указывают альфа-значение любого цвета.

Я признаю, что не знаю Java на Java, но не можете ли вы просто изменить цвет с # 6A8F6509 на # FF8F6509? В большинстве современных языков программирования цвет обычно кодируется как ## AARRGGBB.

AA = Hex Alpha, от 0 (hex 00), полностью прозрачный, до 255 (hex FF), без прозрачности.

RR = Hex красной части цвета. Как и выше, 0 не является красным, 255 – красным.

GG = гекса зеленый.

BB = шестнадцатеричный синий.

-Редактировать-

Основываясь на вашем обновлении, вы можете сделать это, чтобы получить цвет:

Для каждого из красного, зеленого и синего: получите разницу между прозрачным цветом и цветом фона и умножьте его на значение альфа. Разделите это на 255 (hex FF, если хотите). Наконец, добавьте это число в значение прозрачного цвета.

В твоем случае:

 int transparentR = 0x8F; int transparentG = 0x65; int transparentB = 0x09; int backgroundR = 0xFF; int backgroundG = 0xFF; int backgroundB = 0xFF; int alpha = 0x6A; int newR = transparentR + ( ( (backgroundR - transparentR) * alpha ) / 255 ); int newG = transparentR + ( ( (backgroundG - transparentG) * alpha ) / 255 ); int newB = transparentR + ( ( (backgroundB - transparentB) * alpha ) / 255 ); 

-Изменить,

Хорошо, я переработал формулу, основанную на ответе LJ2, используя функцию Alpha Blending от Wikipedia. И его коллега подтвердил это с помощью Paint.Net. Это версия, где цвет фона полностью непрозрачен, и он находится на C #, извините:

  int transparentColor2(int intFgColor, int intBgColor, int intAlpha) { double dAlpha = (Convert.ToDouble(intAlpha)/255.0); double dFirst = Convert.ToDouble(intFgColor) * dAlpha; double dSecond = Convert.ToDouble(intBgColor) * (1 - dAlpha); return Convert.ToInt32(dFirst + dSecond); } 

Сделайте это для каждого значения R, G и B, и вы должны получить правильный ответ. Incase Android от Java отличается, double может быть Double / Single / Float, а int может быть Int32 / Int16 / Int64 / Byte. К сожалению, я не помню, как конвертировать между двумя в Java.

Intereting Posts
Изменение фона кнопки при касании Использование нестандартных настроек в PreferenceActivity Различать тайм-аут экрана и нажатия кнопки питания? Использовать фонарик камеры в Android Room – каталог экспорта схемы не предоставляется обработчику аннотаций, поэтому мы не можем экспортировать схему Чистый способ реализовать постепенное исчезновение яркости в Android? Бинарная строка XML-файла # 26: ошибка раздувания класса android.widget.TextView Автофинирование макета медиаплеера в андроиде Щелчок по плавающей кнопке ActionButton на правом углу позволяет щелкнуть элемент RecyclerView Расширение ширины градиента centerColor в Android Расчет времени восхода не соответствует результату Google ActionBarActivity getSupportActionBar (). Hide () throws NullPointerException Ошибка неразрешенной зависимости при создании нового проекта Android – Как я могу получить доступ к объекту View, созданному в onCreate in onResume? Webview не восстанавливает состояние после того, как он был убит пользователем