java - Android 上的着色图像处理

标签 java android image-processing

我试着关注 Image Processing – Tint Color (Yet Another) Tutorial ,但我不明白一些代码。我只知道一件事,即度数会影响音色的数量。你能给我解释一下吗?

以下是我看不懂的代码:

                int index = y * width + x;
                int r = ( pix[index] >> 16 ) & 0xff;
                int g = ( pix[index] >> 8 ) & 0xff;
                int b = pix[index] & 0xff;
                RY = ( 70 * r - 59 * g - 11 * b ) / 100;
                GY = (-30 * r + 41 * g - 11 * b ) / 100;
                BY = (-30 * r - 59 * g + 89 * b ) / 100;
                Y  = ( 30 * r + 59 * g + 11 * b ) / 100;
                RYY = ( S * BY + C * RY ) / 256;
                BYY = ( C * BY - S * RY ) / 256;
                GYY = (-51 * RYY - 19 * BYY ) / 100;

最佳答案

本质上,这段代码改变了图像中每个 RBG channel 的颜色。我将逐行分解。

            int r = ( pix[index] >> 16 ) & 0xff;
            int g = ( pix[index] >> 8 ) & 0xff;
            int b = pix[index] & 0xff;

上面的代码只是获取了原生的红色、蓝色和绿色值。

            RY = ( 70 * r - 59 * g - 11 * b ) / 100;
            GY = (-30 * r + 41 * g - 11 * b ) / 100;
            BY = (-30 * r - 59 * g + 89 * b ) / 100;

这些会在稍后反馈,但请注意,RY 将主要是红色,BY 将主要是蓝色,而 GY 将是绿色和红色的混合。一个关键特征是所有 3 个乘数加起来为 0,从而保持校正的中立性(图像不会变亮)。 GY 实际上无关紧要,因为它没有在代码的其他任何地方使用。

            Y  = ( 30 * r + 59 * g + 11 * b ) / 100;
            RYY = ( S * BY + C * RY ) / 256;
            BYY = ( C * BY - S * RY ) / 256;
            GYY = (-51 * RYY - 19 * BYY ) / 100;

同样,只需应用公式即可获得所需的着色效果。 S 和 C 是在调用函数时传递给函数的角度的 Sin 和 Cos 值。色调是通过的角度的函数。在角度 0 时,图像将最接近正常颜色,随着角度的变化,它会倾向于将红色变为蓝色,将蓝色变为红色,而绿色将是两者的某种组合,主要取决于红色。

关于java - Android 上的着色图像处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9586235/

相关文章:

java - iText PdfAcroForm GetAcroForm 不适用于给定的类型

java - 怎么听EditText?

java - 模块中的不同 Google Play 服务

android - 播放单轨Spotify SDK

c++ - 任何人都可以提供有关 rgbx8888 格式的详细解释吗?

java - 如何使用 "ff"在 Java 中格式化日期?

java - 错误: reached end of file while parsing

android - 如何获取android中gps中使用的卫星数量?

python - 将 BGR 彩色图像转换为除一种颜色之外的灰度图像

java - 使用java创建图像文件