小编Nic*_*ick的帖子

Canvas getImageData在某些移动设备上返回不正确的数据

我正在制作一个画布视频播放器,它具有一些基于视频帧的特殊功能.为了克服视频HTML5标签中不可靠的时序,我们使用的视频在每个帧中都嵌入了条形码,指示当前帧编号.使用canvas getImageData方法,我可以抓取像素并读取条形码以获取帧编号.这很好用,我有一个JSFiddle证明它可以工作(我无法绕过这个小提琴中的CORS将视频提供给画布,所以要看它工作,你必须在本地下载示例视频然后通过按钮.不理想,但它的工作原理).

在某些移动设备上(到目前为止只有Android),这种逻辑会中断.getImageData返回不正确的值.

它在我的三星Galaxy S5 v6.0.1上正常工作,但在运行android v7.1.2的Google Pixel上失败.我将尝试收集有关它失败的设备/操作系统版本的更多数据.

例如,在桌面上播放时,getImageData的第一次迭代返回:

Uint8ClampedArray(64) [3, 2, 3, 255, 255, 255, 255, 255, 246, 245, 247, 255, 243, 242, 243, 255, 241, 239, 241, 255, 242, 240, 242, 255, 242, 240, 242, 255, 242, 240, 242, 255, 242, 240, 242, 255, 242, 240, 242, 255, 242, 240, 242, 255, 242, 240, 242, 255, 242, 240, 242, 255, 242, 240, 242, 255, 242, 240, 242, 255, 242, 240, 242, 255]
Run Code Online (Sandbox Code Playgroud)

正确计算为framenumber 1.

然而在星系中,第一次迭代返回:

Uint8ClampedArray(64) …
Run Code Online (Sandbox Code Playgroud)

javascript html5 canvas

24
推荐指数
2
解决办法
608
查看次数

如何在OpenGL Image Viewer中跟踪“突出显示”

我正在尝试为OpenGL图像查看器实现一种“突出显示”功能的方法。我的想法是,我希望用户能够点击图像以突出显示一个区域,到目前为止,效果很好。我面临的问题是用户再次点击时。我想将两个高光都保留在放置它们的图像上。在第二次点击到达的时刻,第一个突出显示消失。

这是我当前的片段着色器:

precision mediump float;
uniform vec4 vColor;
varying vec2 v_TexCoordinate;
uniform sampler2D u_Image;
uniform float u_touchX;
uniform float u_touchY;

void main() {

    float radius = 0.1;
    float a = v_TexCoordinate.x - u_touchX;
    float b = v_TexCoordinate.y - u_touchY;
    float d = sqrt(abs(a*a + b*b));

    if(d < radius){
        gl_FragColor = texture2D(u_Image, v_TexCoordinate) + vColor;
    }else{
        gl_FragColor = texture2D(u_Image, v_TexCoordinate);
    }
}
Run Code Online (Sandbox Code Playgroud)

相当简单,我传入图像,突出显示颜色以及用户点击屏幕的位置的x和y。如果片段在该点的一定距离内,则添加高光。到目前为止效果很好。

但是,显然,一旦该触摸点移动,原始的高光就消失了。

我的目标是使此功能尽可能在GPU端运行。

到目前为止,我有一些想法,但是我希望比我更聪明的人可以向我展示一种更好的方法。

  1. 我最不喜欢的策略是跟踪CPU端的XY接触点,并每帧向下传递更新的列表。这里明显的缺陷是,触摸列表可能很快就变得很大,因此屠宰性能很快。我希望用户能够根据需要突出显示整个图像,而这种解决方案似乎并不实际。
  2. 跟踪CPU上图像中每个像素的状态。我想我可以通过创建一个位图(或者代表每个像素的2D布尔数组)来实现图像的确切大小,并跟踪哪个片段被“突出显示”。然后,将整个数组向下均匀传递,并将每个v_TexCoordinate与数组中的对应值进行比较。我也不喜欢这个想法(尽管它比#1更好),因为它又需要每帧将大量数据移入GPU。在旧的android设备上,这很容易成为一个初学者。
  3. 我在这里遇到了类似问题的答案。询问者想操纵纹理数据,答案建议在使用FBO时使用“渲染到纹理”方法。我有点主意,但我真的不明白这将如何解决记住以前的“亮点”的问题。也许我很傻,想念这个答案可能告诉我的东西,但... \ _(?)_ /¯

必须有一种更好的方法,但是我目前空虚,希望有人可以指出正确的方向。

android opengl-es

6
推荐指数
1
解决办法
74
查看次数

无法理解/使用修改后的CRT功能

我正在从事密码学项目。我们需要使用NTL big num库,尤其是使用该库的CRT函数生成公共密钥。该库的CRT功能未使用标准的中国剩余定理算法;它是修改后的版本,我无法确切了解其工作方式。

CRT(a,b,c,d)

据我所知,如果a%b == c%d,CRT会返回1,但情况并非总是如此,在以下结果中,我将b = 5设置为d = 6,而a = c是介于1和2之间的随机整数-6:

a%b:3 c%d:3 CRT:1

a%b:0 c%d:5 CRT:1

a%b:2 c%d:2 CRT:0

a%b:1 c%d:1 CRT:0

a%b:4 c%d:4 CRT:1

a%b:1 c%d:0 CRT:1

以下是库中CRT功能的代码。ZZ是一种库特定类型,用于表示大数。

long CRT(ZZ& gg, ZZ& a, const ZZ& G, const ZZ& p){
  long modified = 0;

  ZZ g;

  if (!CRTInRange(gg, a)) {
    modified = 1;
    ZZ a1;
    rem(g, gg, a);    // g = gg%a
    RightShift(a1, a, 1);    // a1 = (a >> 1) 
    if (g > a1) sub(g, g, …
Run Code Online (Sandbox Code Playgroud)

c++ cryptography

5
推荐指数
1
解决办法
534
查看次数

不能在Runtime.exec()+ linux中使用&&运算符

我正在尝试使用下面粘贴的代码从Java运行可执行文件.通过在终端中使用&&运算符,我可以使用单个命令导航到并运行可执行文件.我试图通过Runtime.getRuntime().exec()命令传递相同的命令,但它似乎不喜欢&&运算符.有谁知道这方面的工作?在下面发布的代码中,我只是将"cd && pwd"作为测试用例; 一个更简单的命令,但它仍然无法正常工作.谢谢

try{
                int c;
                textArea.setText("Converting Source Code to XML");
                //String[] commands = {"/bin/bash", "-c", "cd /home/Parallel/HomeMadeXML", "&&", "./src2srcml --position" + selectedFile.getName() + "-o targetFile.xml"};
                String commands = "bash -c cd && pwd";
                System.out.println(commands);
                Process src2XML = Runtime.getRuntime().exec(commands);
                InputStream in1 = src2XML.getErrorStream();
                InputStream in2 = src2XML.getInputStream();
                while ((c = in1.read()) != -1 || (c = in2.read()) != -1) {
                        System.out.print((char)c);
                    }
                src2XML.waitFor();
                }
            catch(Exception exc){/*src2srcml Fail*/}
            }
Run Code Online (Sandbox Code Playgroud)

java linux bash terminal runtime.exec

3
推荐指数
1
解决办法
1296
查看次数

Windows 10上的Visual Studio + localdb

我刚拿到一台新机器并把它放在上面.我是学生,所以我有一个dreamspark帐户,显然想要下载最新版本的VS,我认为与dreamspark是2015社区.我想使用本地数据库创建包含数据库的网站,然后将它们部署到Azure.2015社区是否提供了我需要做的所有事情,或者我还必须获得SQL Server 2014并且它是否都可以在Windows 10上运行?

sql-server visual-studio localdb

3
推荐指数
1
解决办法
618
查看次数

React-Native Android:调整本机 UI 组件大小会导致黑屏

我有一个非常奇怪的问题,我正在努力解决有关在 Android 上使用 GLSurfaceView 和 React Native 的问题。

我创建了一个自定义 OpenGL 渲染器,我想将其用作更大的 React Native 视图中的组件。问题是,当我将 JS 端的组件调整为我希望屏幕的其余部分变黑的大小时。

在此输入图像描述

这是创建该视图的 React Native 代码:

    public render() {
       return (
            <View style={{ backgroundColor: '#ffffff' }}>
                <Text>Hello World!</Text>
                <ImageBlendView style={{ height: 50 }} boxColour="#f442df" />
            </View>
        );
    }
Run Code Online (Sandbox Code Playgroud)

ImageBlendView 是一个反应原生 UI 组件,我按照 RN 网站上的说明制作这就是创建带有紫色矩形的红色的原因。它只是一个非常基本的 Opengl 渲染器,它使用从 JS 传入的颜色和红色透明颜色绘制一个矩形。我在其上方添加了一个文本字段,并将组件的大小调整为 50 高度。

我不明白为什么 ImageBlendView 组件被黑色包围。

清晰的颜色是红色,所以我知道它不是我的渲染器清除像素,它不应该是这样。但是,它似乎与我的渲染器类有关,因为当我注释掉 GLSurfaceView 类中将其设置为渲染器的行时,正常的白色背景会回来,并且组件上方的文本可见。

// setRenderer(new OpenGLRenderer(_context, colour));
Run Code Online (Sandbox Code Playgroud)

自定义 UI 组件遵循与教程中相同的结构,但我将彻底介绍它。

ImageBlendView 被添加到包中并捆绑在视图管理器列表中:

public class OTSNativePackage implements ReactPackage {

    @Nonnull
    @Override
    public …
Run Code Online (Sandbox Code Playgroud)

javascript java android react-native

3
推荐指数
1
解决办法
4191
查看次数

无法从辅助函数调用模板函数

我正在使用我在网上找到的模板函数,它用于返回C++中数组的长度.我发现,如果我直接调用该方法,但是当我通过另一种方法调用它时,我会得到错误no instance of function template "array_size" matches the argument list.

我显然误解了如何通过方法传递数组,但我很难过为什么这不起作用.

template<size_t SIZE, class T> inline size_t array_size(T(&arr)[SIZE]) {
    return SIZE;
}
int wordLength(char* word) {
    return array_size(word) - 1; // Gets argument error
}
void fooBar() {
    int n = array_size("Hello"); // Works!
    int m = wordLength("Hello"); // What I want    }
Run Code Online (Sandbox Code Playgroud)

我错过了哪些细节以及如何修复它以便我可以打电话 wordLength

c++

1
推荐指数
1
解决办法
83
查看次数

如何通过npm将自定义库导入Ember

尽管似乎有很多关于它的博客文章,我仍然在努力通过npm完善使用自定义库作为我的ember应用程序的依赖项.

我编写了一个WebGL库,目前通过npm从私有存储库安装它导入我的Ember应用程序.这当前有效并且正在生产中,但工作流程有点笨重.该库是使用NodeJS模块编写的(require - > export.modules).目前我只是在我的src文件上使用babel,这导致一个构建文件夹,文件的ES5版本仍然分开.

然后我有一个如下所示的索引文件:

var Helper = require('./com/XXXX/utils/Helper');
module.exports = {
  Module1: require('./com/XXXX/media/Module1'),
  Module2: require('./com/XXXX/media/Module2'),
  Module3: require("./com/XXXX/media/Module3"),
  Module4: require('./Module4'),
  Module5: require('./com/XXXX/media/Module5'),
  Module6: Helper.Module6,
  Module7: Helper.Module7
};
Run Code Online (Sandbox Code Playgroud)

使用npm我可以将此构建目录安装到我的Ember应用程序中,并使用以下语法导入我需要的模块:

import webglRenderLibrary from 'npm:webglRenderLibrary';
const { Module5 } = webglRenderLibrary;
Run Code Online (Sandbox Code Playgroud)

其中Module5是库中导出的类,如下所示:

class Module5 {
  //Magic rendering code
}
module.exports = Module5;
Run Code Online (Sandbox Code Playgroud)

我没有必要安装任何其他插件或将库文件导入到ember供应商文件中,因为很多博客文章都说你必须这样才能让它工作.我真的不明白为什么这种方法有效,但确实如此.

¯\ _(ツ)_ /¯

我从来没有真正喜欢这个设置/工作流程(并且不知道它为什么会起作用)所以我正在努力改进它,但我在Ember,JS模块等方面的许多知识差距使得它变得困难.

我想做的第一件事是将库移到ES6模块(导入 - >导出).从我的理解ES6模块更精简和未来所以我宁愿将它们用于我的库.更改所有源代码有点劳动密集,但它工作得很好,并允许我为我的库开发创建一个很好的工作流程.

Module5现在看起来像这样:

export default class Module5 {
  //Magic rendering code
}
Run Code Online (Sandbox Code Playgroud)

package.json库中我有很多npm脚本现在调用watchify,所以我可以单独在demo文件中测试我的模块.

{
  "name": "webglRenderLibrary",
  "main": "dist/js/app.js",
  "version": "2.0.5",
  "author": "JibJab …
Run Code Online (Sandbox Code Playgroud)

javascript npm ember.js ecmascript-6

1
推荐指数
1
解决办法
483
查看次数

用C++将消息传递给Caller

我有两个类,A和B.ClassA调用classB中的一个方法,它迭代一个大循环.ClassA还会打印到Qt消息框.我想要的是能够将%完成打印到classA的消息框中.有没有办法在C++中做到这一点?

ClassA calls ClassB.method();

ClassA <-- 10% -- ClassB.method();

ClassA -- 10% --> MessageBox
Run Code Online (Sandbox Code Playgroud)

c++ qt

-2
推荐指数
1
解决办法
56
查看次数