android - 试图理解 Bitmap.Config.ARBG_8888
问题描述
我试图了解 ARGB_8888 格式的颜色字节包装。
该文档指出应使用以下公式进行打包:
int color = (A & 0xff) << 24 | (B & 0xff) << 16 | (G & 0xff) << 8 | (R & 0xff);
但它不应该是:
int color = (A & 0xff) << 24 | (R & 0xff) << 16 | (G & 0xff) << 8 | (B & 0xff);
当我从具有所有红色像素的 ARGB_8888 颜色编码位图中解压缩样本像素时,我正在使用:
final int r = (p >> 16) & 0xff;
final int g = (p >> 8) & 0xff;
final int b = p & 0xff;
这确实为我返回了每种颜色的正确值。
我的意思是,是文档错误还是我遗漏了什么?
解决方案
是的,您是正确的,文档是错误的。如果您查看Color.java的Android 源代码,它是通过第二种方式完成的:
* <h4>Encoding</h4>
* <p>The four components of a color int are encoded in the following way:</p>
* <pre class="prettyprint">
* int color = (A & 0xff) << 24 | (R & 0xff) << 16 | (G & 0xff) << 8 | (B & 0xff);
* </pre>
再往下……
@ColorInt
public static int argb(
@IntRange(from = 0, to = 255) int alpha,
@IntRange(from = 0, to = 255) int red,
@IntRange(from = 0, to = 255) int green,
@IntRange(from = 0, to = 255) int blue) {
return (alpha << 24) | (red << 16) | (green << 8) | blue;
}
推荐阅读
- javascript - 有没有办法用 Highcharts Boost 更新一个点?
- c# - 带有 Redis 的 OutputCache 可在 Localhost 上运行,但不能在 Azure WebApp 上运行
- c# - 在 UserControl 中注册附加属性
- php - Wordpress 自定义帖子中的反斜杠转义
- javascript - Django 在模板中使用 AJAX 渲染模板
- arm - STM32F4 SPI每个数据帧之间的空闲时间,为什么太长了?
- c# - 如何让 Visual Studio 使用抽象控件类来定义 FormMain.cs.design 中的控件?
- python - Python 文件到 MSI Windows 安装程序
- python - Python setup.py:缺少一些文件
- vb.net - 当 Vscroll bar 改变时更新 label.txt (live) (vb2010)