繁体   English   中英

>>操作符在C#中做什么?

[英]What does the >> operator do in C#?

我对C#很陌生并试图做一个基本的图像处理软件。 我理解这个片段从WriteableBitmap像素“当前”的ARGB int值中提取A,R,G,B

for(int i = 0; i < bitmapArray.Length; i++) {
    var current = bitmapArray[i];

    var alpha = (byte)(current >> 24);
    var red = (byte)(current >> 16);
    var green = (byte)(current >> 8);
    var blue = (byte)(current);
    //Some code
 }

什么是“>>”来转换价值?

另外,如果我单独对r,g和b进行一些计算,如何将它们转换回整数ARGB值以用新的像素替换原始像素?

提前致谢。

编辑:谢谢你们,现在有道理。

它是二元移位运算符。

如果您有一个由(a,r,g,b)定义的颜色,它的二进制表示将如下所示(假设通道深度为8位):

AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB

所以,将整个事物转移到24个地方,你就会留下alpha通道

AAAAAAAA

移动16,你得到alpha通道和红色通道

AAAAAAAARRRRRRRR

现在,由于它被转换为字节,因此只提取前8位

(byte)AAAAAAAARRRRRRRR == RRRRRRRR

您还可以通过移动16个位置获得红色通道,并使用11111111(0xFF)进行AND运算

AAAAAAAARRRRRRRR &
0000000011111111
----------------
00000000RRRRRRRR

它将current值的位移到右侧。 在这个特定代码snippit的情况下,它似乎是从所选位图数组元素中将每个字节的颜色信息提取成单独的颜色字节。

http://msdn.microsoft.com/en-us/library/xt18et0d.aspx

假设你的数组包含int,要将计算值返回到数组元素中,你可以反转位移过程并将结果重新组合在一起,如下所示:

int current = (alpha << 24) | (red << 16) | (green << 8) | blue; 

继罗伯特的答案 - 以及覆盖问题的第二部分 - 您可以使用<< (左移)|将单独的组件组合回整数| (按位OR)运算符:

int combined = (alpha << 24) | (red << 16) | (green << 8) | blue;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM