- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下代码是工作中的相机应用程序的一部分,该应用程序检测运动并保存预览,将运动部件涂成红色。
public class RgbMotionDetection implements IMotionDetection {
that detects motion
private static final int mPixelThreshold = 50; // Difference in pixel (RGB)
private static final int mThreshold = 10000; // Number of different pixels
private static int[] mPrevious = null;
private static int mPreviousWidth = 0;
private static int mPreviousHeight = 0;
/**
* {@inheritDoc}
*/
@Override
public int[] getPrevious() {
return ((mPrevious != null) ? mPrevious.clone() : null);
}
protected static boolean isDifferent(int[] first, int width, int height) {
if (first == null) throw new NullPointerException();
if (mPrevious == null) return false;
if (first.length != mPrevious.length) return true;
if (mPreviousWidth != width || mPreviousHeight != height) return true;
int totDifferentPixels = 0;
for (int i = 0, ij = 0; i < height; i++) {
for (int j = 0; j < width; j++, ij++) {
int pix = (0xff & ((int) first[ij]));
int otherPix = (0xff & ((int) mPrevious[ij]));
// Catch any pixels that are out of range
if (pix < 0) pix = 0;
if (pix > 255) pix = 255;
if (otherPix < 0) otherPix = 0;
if (otherPix > 255) otherPix = 255;
if (Math.abs(pix - otherPix) >= mPixelThreshold) {
totDifferentPixels++;
// Paint different pixel red
first[ij] = Color.RED;
}
}
}
我想充分理解这一点以便能够修改。
真正让我困惑的是:
int pix = (0xff & ((int) first[ij]));
它有什么作用?
谢谢
戴夫
最佳答案
如果我现在解释一些你知道的事情,请原谅我,但我想让它成为一个独立的答案。
像素的颜色可以存储在一个整数中。 Java 中的整数由四个字节组成,颜色通常(在此上下文中)用四个字节表示:红色、绿色和蓝色各一个字节,最后一个字节用于透明度。屏幕上子像素的混合导致观察到的颜色。
所以下面的整数代表一种颜色:
0 0 f f c c a a (Hexadecimal representation)
0000 0000 1111 1111 1100 1100 1010 1010 (Binary representation)
Transp.-- Red------ Green---- Blue----- (Color interpretation)
16764074 (Decimal representation, quite useless here)
在这种情况下,前两个字节 (00) 表示透明度,ff 表示红色子像素,cc 表示绿色,aa 表示蓝色。
如果我们只想得到其中的一部分,例如蓝色子像素,我们需要一个位掩码。
0000 0000 1111 1111 1100 1100 1010 1010 (Binary representation)
& (Binary AND: Return 1 if both bits are 1)
0000 0000 0000 0000 0000 0000 1111 1111 (Bitmask for blue, in hex 0x000000ff)
=
0000 0000 0000 0000 0000 0000 1010 1010
这是你提到的行中的操作结果,它只是使用掩码的简写十六进制解释:
int pix = (0xff & ((int) first[ij]));
由于数组 first
已经是一个 int
数组,因此 first[ij]
的转换是无用的。
如果你想要像素的另一部分,比如绿色部分,你需要移动掩码(或使用硬编码值)并且需要将结果移回:
00ffccaa
&
0000ff00 Hardcoded, alternative: ff << 8
=
0000cc00
将结果移动到整数内最右边的位置
0000cc00 >> 8 = 000000cc
类似于 16 和 24 的红色响应。透明度。
所以这条线给了你像素的蓝色子像素的值。该值在 0..255 范围内,因为这些是八位唯一可能的值(当被解释为无符号字节或存储在 Java int
中时,就像这里所做的那样;Java byte
已签名,不会使用该十进制表示,而是 -128..127);任何对其他值的检查在这里都是无用的。
关于java - "int pix = (0xff & ((int) first[ij])); "是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20817562/
本文整理了Java中ij.gui.YesNoCancelDialog类的一些代码示例,展示了YesNoCancelDialog类的具体用法。这些代码示例主要来源于Github/Stackoverflo
本文整理了Java中ij.plugin.ZProjector类的一些代码示例,展示了ZProjector类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,
今天,我尝试运行我的 ImageJ 插件 My_S 但 ImageJ 总是发出以下警告: Plugin or class not found: "My_S" (java.lang.ClassNot
考虑一个矩阵 Z包含 z = z(a,m,e) 的基于网格的结果. Z有形状 (len(aGrid), len(mGrid), len(eGrid)) . Z[0,1,2]包含 z(a=aGrid[0
当我有 some trouble installing and setting up derby ,我确实取得了部分成功: root@dur:~/apache-james-3.0-beta4/var/
本文整理了Java中ij.gui.YesNoCancelDialog.()方法的一些代码示例,展示了YesNoCancelDialog.()的具体用法。这些代码示例主要来源于Github/Stacko
本文整理了Java中ij.gui.YesNoCancelDialog.cancelPressed()方法的一些代码示例,展示了YesNoCancelDialog.cancelPressed()的具体用
本文整理了Java中ij.gui.YesNoCancelDialog.yesPressed()方法的一些代码示例,展示了YesNoCancelDialog.yesPressed()的具体用法。这些代码
本文整理了Java中ij.plugin.ZProjector.setMethod()方法的一些代码示例,展示了ZProjector.setMethod()的具体用法。这些代码示例主要来源于Github
本文整理了Java中ij.plugin.ZProjector.setImage()方法的一些代码示例,展示了ZProjector.setImage()的具体用法。这些代码示例主要来源于Github/S
本文整理了Java中ij.plugin.ZProjector.getProjection()方法的一些代码示例,展示了ZProjector.getProjection()的具体用法。这些代码示例主要来
本文整理了Java中ij.plugin.ZProjector.setStopSlice()方法的一些代码示例,展示了ZProjector.setStopSlice()的具体用法。这些代码示例主要来源于
本文整理了Java中ij.plugin.ZProjector.setStartSlice()方法的一些代码示例,展示了ZProjector.setStartSlice()的具体用法。这些代码示例主要来
本文整理了Java中ij.plugin.ZProjector.()方法的一些代码示例,展示了ZProjector.()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Mav
本文整理了Java中ij.plugin.ZProjector.doProjection()方法的一些代码示例,展示了ZProjector.doProjection()的具体用法。这些代码示例主要来源于
当我键入“Describe [someTable];”时非常长的列(超过 20 个字符)的列名被截断,并使用 & 符号。例如,我有两列似乎名为 WowThisIsAVeryLongC&。 当我运行 s
有没有J的stdlib.ijs的详细文档或者注释版? Jwiki link不包括太多。 stdlib.ijs 中的函数是供用户使用还是仅供内部使用? copy stdlib.ijs 本地安装比the
有没有办法在 ij 中“漂亮地打印”查询结果?由于在查询结果中到处乱扔列,因此默认结果看起来非常难以理解。 在 PostgreSQL 中,有/pset 命令来控制 pgsql 命令的结果,我正在为 D
我想截断以 I、J 或 IJ 结尾的可变长度字符向量的末尾部分,但还没有完全正确: 当前尝试,使用一个简单的案例。 vars <- c("VARI", "VARJ", "VARIJ") sapply(
我从上周开始就一直在使用 Google Tango 设备。我成功地使用 Threejs 库在网络浏览器中显示它们。但我只使用了 TangoPoseData 类中的 xyz。我不知道“ij”是什么意思?
我是一名优秀的程序员,十分优秀!