图像处理按位指令概念解释

时间:2012-04-21 11:20:42

标签: image-processing bitwise-operators

代码来自Qt库,它有助于生成具有图像形状的按钮;它扫描所有行y和所有宽度x,当像素的rgb部分与屏蔽部分重合时产生以下变化(mp是行开头的指针,并且预填充0xff):

*(mp +(x>&gt; 3))&amp; =〜(1 <&lt;(x&amp; 7));

我无法解释它;有背景的人可以伸手吗?

2 个答案:

答案 0 :(得分:1)

从代码的外观来看,mp指向每像素1位图像的当前行。代码清除表示X处像素的位。它将X偏移转换为字节偏移(x>> 3),然后逻辑AND是字节,其中从反向1创建的掩码向左移位X位置字节。

答案 1 :(得分:0)

凡人;好的,背景:http://www.cprogramming.com/tutorial/bitwise_operators.html; &amp; =意味着我们要做一个按位乘法;在rhs中,〜是补码,所以它用0s翻转1s,反之亦然;二进制7中最后有3个,前面都是0,所以x&amp; 7保留x中的最后3位;结合&lt;&lt;这将根据指数将第一位中的1从char 1移动到左边一定数量的位置;由于指数仅使用x的最后3位,因此小于8(2 ^ 3);所以带有一个的位将进入char的8位内的1-8位;翻转〜将把事物变成全部1s,除了那个魔法位置;由&amp; =执行的乘法将保留lhs中的所有内容,除了一位。现在为lhs;我们用&gt;&gt;踢x out的最后一个字节或最后3位在右移操作中;这意味着我们将为x的每8个增量修改相同的字节(char类型的mp);当我们跳过&#34;时,我们只需要一个字节;当x = 9时,它将进入mp + 1,当x = 17时,它将进入mp + 2;所以它就像整数运算中的x / 2 ^ 3,但是在一个移位操作中;好的,现在我们有了理解整个事情的元素;

tmask已经预先填充了0xff,所有的;这意味着它在&amp; =操作时将是被动的,保留rhs的命令;这意味着如果在if语句中有一个命中,检查特定像素是否等于背景,则执行此行,我们将擦除与该像素相关的特定位;