用黑色代替白色

时间:2017-04-24 10:29:12

标签: opengl qml glsl textures shader

我想用黑色替换图像中的每个白色像素,但保持其他一切不变

Window {
    id: window;
    width: 800;
    height: 600;
    visible: true;

    Image {
        id: sourceImage
        anchors.centerIn: parent
        source: "qrc:/source.png"
    }

    Item {
        anchors.fill: sourceImage
        layer.enabled: true
        layer.samplerName: "maskSource"
        layer.effect: ShaderEffect {
            fragmentShader: "
                             uniform lowp sampler2D maskSource;
                             uniform lowp float qt_Opacity;
                             varying highp vec2 qt_TexCoord0;
                             void main() {
                                 vec4 pixel = texture2D(maskSource, qt_TexCoord0);
                                 if (pixel == vec4(1.0, 1.0, 1.0, pixel.a)) {
                                     pixel = vec4(0.0, 0.0, 0.0, pixel.a);
                                 }
                                 gl_FragColor = vec4(pixel.r, pixel.g, pixel.b, pixel.a);
                             }"
        }
    }
}

我无法让它发挥作用

2 个答案:

答案 0 :(得分:1)

我找到了解决问题的方法:

var board = "";

//you can also set the size of the grid
var size = 8;

for ( var i = 1; i < size; i++ ) {

    for ( var j = 1; j < size; j++) {

      if ( i%2 === 0 ) {

        board += "#";
        board += " ";

      }
        else { 

          board += " ";
          board += "#";

      };

    };

   board += "\n";
};

console.log(board);

我用来检测白色的值(0.2,0.2,0.2)适用于我的图像,但它们可能不适用于所有情况。我不知道这是否是最好的。

答案 1 :(得分:-2)

也许您应该在image preprocessing algorithmPython中使用C++作为图片?然后将其加载到QML应用程序中。

QML旨在用于UI部分,您必须尽可能避免在QML中执行图像处理等操作。