gpt4 book ai didi

java - 对颜色值求和时使用位运算对数字求和的最快方法

转载 作者:行者123 更新时间:2023-12-01 22:28:29 24 4
gpt4 key购买 nike

我对数字求和的特殊情况涉及以整数表示的颜色。 Java 函数 BufferedImage.getRGB 返回 0x00RRGGBB 格式的图像。我正在创建一个函数,为您提供图像上颜色的灰度(独立于颜色)总和。目前,我的操作看起来很幼稚:

   //Just a pseudocode
int sum = 0;
for(x->width) {
for(y->height) {
int pixel = image.getRGB(x,y);
sum+=(pixel&0x00FF0000)+(pixel&0x0000FF00)+(pixel&0x000000FF);
}
}
//The average value for any color then equals:
float avg = sum/(width*height*3);

我想知道是否可以通过一些位移逻辑来做得更快。我问这个问题主要是为了了解有关位移位的更多信息,因为我怀疑任何答案都会真正显着加速程序。

最佳答案

R、G 和 B 并不同等地归因于感知强度。比这更好的总结方式:

sum+=(pixel&0x00FF0000)+(pixel&0x0000FF00)+(pixel&0x000000FF);

经过必要的位移和权重(假设 00RRGGBB):

sum+= ((pixel&0x00FF0000)>>16) * .30 / 255
+ ((pixel&0x0000FF00)>> 8) * .59 / 255
+ (pixel&0x000000FF) * .11 / 255;

您可能希望将 /255 部分保留在此处,并将 float 替换为按比例放大的整数(例如 30、59 和 11),请记住,您需要long sum 以在合理的程度上防止溢出。

关于java - 对颜色值求和时使用位运算对数字求和的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28253353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com