java如何在Android上抑制图像的蓝色或绿色通道? 1 周,3 日 Questions & Answers 626 我想在Android应用程序中制作立体3D图像。为此,我需要删除图像的蓝色或绿色通道 我如何在安卓上做到这一点
# 1 楼答案 我假设您有一个表示为Android Bitmap对象的图像。要“禁用”颜色通道,只需将than channel的像素值设置为零,这意味着它不再对图像有贡献。下面是一个简单的方法: Bitmap bitmap = ... //Assuming you have a bitmap somehow for (int x = 0; x < bitmap.getWidth(); x++) { for (int y = 0; y < bitmap.getHeight(); y++) { bitmap.setPixel(x, y, bitmap.getPixel(x, y) & 0xFFFF0000); } } 这里需要理解的关键部分是,位图颜色由一个四字节整数表示;第一个字节是alpha(透明度)值,第二个字节是红色通道值,第三个字节是绿色,第四个字节是蓝色。因此,十六进制值0xFFFF0000表示“最大alpha”(因为FF是最大字节值)、“最大红色”、“零绿色”和“零蓝色” 然后,我使用&操作符,使用0xFFFF0000作为我的掩码,使用&旧的像素值执行bitwise AND操作。这基本上是“选择”红色值,而忽略蓝色和绿色,给出一个只包含红色通道的新的像素值 你可以用其他频道做类似的事情;如果你只想要蓝色通道,如果你正在制作一幅立体图像,你可能会想要蓝色通道,你可以使用遮罩0xFF0000FF,如果你只想要绿色通道,你可以使用0xFF00FF00 顺便说一句,我不完全确定这是创建浮雕图像的最佳方式,但它可能仍然有效——尽管如此,这是您实际问题的答案:)
# 1 楼答案
我假设您有一个表示为Android
Bitmap
对象的图像。要“禁用”颜色通道,只需将than channel的像素值设置为零,这意味着它不再对图像有贡献。下面是一个简单的方法:这里需要理解的关键部分是,位图颜色由一个四字节整数表示;第一个字节是alpha(透明度)值,第二个字节是红色通道值,第三个字节是绿色,第四个字节是蓝色。因此,十六进制值
0xFFFF0000
表示“最大alpha”(因为FF
是最大字节值)、“最大红色”、“零绿色”和“零蓝色”然后,我使用
&
操作符,使用0xFFFF0000
作为我的掩码,使用&
旧的像素值执行bitwise AND操作。这基本上是“选择”红色值,而忽略蓝色和绿色,给出一个只包含红色通道的新的像素值你可以用其他频道做类似的事情;如果你只想要蓝色通道,如果你正在制作一幅立体图像,你可能会想要蓝色通道,你可以使用遮罩
0xFF0000FF
,如果你只想要绿色通道,你可以使用0xFF00FF00
顺便说一句,我不完全确定这是创建浮雕图像的最佳方式,但它可能仍然有效——尽管如此,这是您实际问题的答案:)