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

Hos*_*ain 10 c# silverlight argb

我对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
 }
Run Code Online (Sandbox Code Playgroud)

什么是">>"来转换价值?

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

提前致谢.

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

Ed *_* S. 16

它是二元移位运算符.

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

AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
Run Code Online (Sandbox Code Playgroud)

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

AAAAAAAA
Run Code Online (Sandbox Code Playgroud)

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

AAAAAAAARRRRRRRR
Run Code Online (Sandbox Code Playgroud)

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

(byte)AAAAAAAARRRRRRRR == RRRRRRRR
Run Code Online (Sandbox Code Playgroud)

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

AAAAAAAARRRRRRRR &
0000000011111111
----------------
00000000RRRRRRRR
Run Code Online (Sandbox Code Playgroud)


Rob*_*vey 12

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

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

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

int current = (alpha << 24) | (red << 16) | (green << 8) | blue; 
Run Code Online (Sandbox Code Playgroud)