当前位置: 首页 > 面试题库 >

按位运算-如何更改现有颜色?

简意
2023-03-14
问题内容

我已经阅读了按位运算符(&| ^),并且了解如果要这样做:

alpha = 0xFF000000 >> 24 ;
blue = 0xFF0000FF & 0x000000FF;
red = 0xFFFF0000>>16 & 0x000000FF;
green = 0xFF00FF00>>8 & 0x000000FF;

然后我可以掩盖其他颜色,而只具有红色或蓝色(等…)成分,如果我要这样做

int color = alpha | blue | red | green;

然后我可以重新构造颜色,可以这么说。我很好奇的是,如果要在Java中创建两种颜色之间的双线性插值,该怎么办?我将如何进行构建?我想以标准的绿色(0xFF00FF00)开始,以黑色(0xFF000000)结尾,中间的颜色将从绿色变为较深的绿色,直到最终变为黑色。我认为我必须做些什么,在其中创建一个bufferedImage,该图像在顶部以绿色开始,然后创建一个for循环,该循环将读取前一个像素的颜色,然后将其移动直到前一个颜色的新版本被创建等等。不幸的是,由于我了解按位运算和理论上的转变,但是我不确定如何将其应用于此目的,因此我不确定如何实现这一点。任何帮助将不胜感激!先感谢您!


问题答案:

正如EJP所指出的,这些遮罩用于过滤出颜色分量/通道之一(红色,绿色,蓝色)的值。这通常是您进行移位/屏蔽操作的方式。使用获得的值所做的所有其他操作都是算术或更高级的数学。

彩色通道的范围是0-255,或十六进制值是0x00-0xFF。要重建它,您需要将组件值移回原位。可以与简单的算术加法放在一起:

// Example values
int r = 255; // 0xFF
int g = 1;   // 0x01
int b = 15;  // 0x0F

// go back to original form:
                      //    A  R  G  B
int color = r << 16;  // 0x00.FF.00.00
color += g << 8;      // 0x00.FF.01.00
color += b;           // 0x00.FF.01.0F

// just add back the alpha if it is going to be full on
color = += 255 << 24; // 0xFF.FF.01.0F

如果要在颜色之间进行一些插值,则需要对每个颜色分量分别进行插值,而不是将所有颜色组合在一起。在某些情况下,将表示形式从[0-255]更改为小数点后的[0.0f-1.0f]也可能是个好主意:

// Darken red value by 50%
int color = ...; // some color input
int mask = 0xFF;

int a = (color >> 24) & mask;
int r = (color >> 16) & mask;
int g = (color >> 8) & mask;
int b = color & mask;

// convert to decimal form:
float rDecimal = r / 255f; 
  // Let r: 0x66 = 102 => rDecimal: 0.4

// darken with 50%, basically divide it by two
rDecimal = r/2; 
  // rDecimal: 0.2

// Go back to original representation and put it back to r
r = (int)(rDecimal * 255); 
  // r: 51 = 0x33

// Put it all back in place
color = (a << 24) + (r << 16) + (g << 8) + b;

希望这会有所帮助。



 类似资料:
  • 问题内容: 我的意思是,单选按钮本身由一个圆形和一个位于中心的点组成(选择该按钮时)。我要更改的是两者的颜色。可以使用CSS完成吗? 问题答案: 一种快速的解决方法是使用来覆盖单选按钮的输入样式,但是创建自己的自定义工具箱可能是更好的做法。

  • 问题内容: 我不断收到以下错误:AttributeError:’NoneType’对象没有属性’configure’ 问题答案: 执行时,分配给该命令的结果是命令的结果, 而不是 对创建的对象的引用。 您需要在打包/网格化之前分配变量。它看起来应该像这样:

  • 我在图片中写的所有单词我需要更改导航颜色按钮警告颜色按钮非android:statusBarColor

  • 问题内容: 我想更改TextField的占位符颜色,但是找不到它的方法。 我尝试设置和,但它不会更改占位符的颜色。 这是代码: 也许还没有API? 问题答案: 目前还没有api。 但您可以 : 自己使用和实现占位符: 现在,您可以像老板一样使用任何类型的编辑。 -自定义TextField 您总是可以创建自己的custom,以在所有地方使用: 用法 (带占位符):

  • 问题内容: 我可以通过更改bootstrap v4中的主题颜色来更改主按钮的颜色。但这也会影响所有其他组件。如何设置主按钮颜色而不影响主题颜色?我不想设置主要品牌并实现这一目标。还有其他选择吗? 问题答案: Bootstrap 4.1+的2019更新 现在,Bootstrap 4使用了SASS,您可以使用mixins 轻松地 仅更改按钮颜色。由于您只想更改主按钮的颜色,而不是整个主主题的颜色,因此

  • 问题内容: 聚焦输入字段时如何更改占位符的颜色?我使用此CSS设置默认颜色,但是如何更改焦点? 问题答案: 试试这个,这应该工作: