我想知道是否有人能够做到惊人并帮助我完成我在Processing
工作的事情。我需要在实时Feed上播放带有透明度的视频文件,以便视频不仅仅是一个矩形。以下是我认为需要添加或更改内容的代码部分。我对这一切都非常陌生,我非常感谢任何可以提供帮助的人。
答案 0 :(得分:1)
如果您的视频有Alpha通道,那就太好了, 否则,您应该能够blend()其他内容。
这是概念草图的基本证明。它在实时源顶部覆盖了一个圆网格。使用空格键循环混合模式。根据您的内容和您想要实现的目标,有些人会比其他人工作得更好:
import processing.video.*;
Capture cam;
int w = 320;
int h = 240;
int np = w*h;
PImage overlay;
int blendMode = 1;
int[] blendModes = {BLEND,ADD,SUBTRACT,DARKEST,LIGHTEST,DIFFERENCE,EXCLUSION,MULTIPLY,SCREEN,OVERLAY,HARD_LIGHT,SOFT_LIGHT,DODGE,BURN};
String[] blendModesNames = {"BLEND","ADD","SUBTRACT","DARKEST","LIGHTEST","DIFFERENCE","EXCLUSION","MULTIPLY","SCREEN","OVERLAY","HARD_LIGHT","SOFT_LIGHT","DODGE","BURN"};
void setup(){
size(w,h);
cam = new Capture(this,w,h);
cam.start();
//test content to overlay, a grid of circles
background(0);fill(255);
for(int y = 0 ; y < height; y += 30)
for(int x = 0 ; x < width; x+= 30)
ellipse(x,y,15,15);
overlay = get();
}
void draw(){
image(cam,0,0);
blend(overlay,0,0,width,height,0,0,width,height,blendModes[blendMode]);
}
void keyReleased(){
if(key == ' ') {
blendMode = (blendMode+1)%blendModes.length;
println("blendMode: " + blendModesNames[blendMode]);
}
}
void captureEvent(Capture c){
c.read();
}
答案 1 :(得分:1)
我通过使用2个视频解决了(也许可以改进):第一个镜头是背景上带有白色的彩色地图;第二个镜头是哑光面具:白色用于&#34;重要&#34;部分,黑色其他。然后应用mask()函数,herunder是代码的重要部分:
Movie mov1;
Movie mov2;
void setup() {
....code...
mov1 = new Movie(this, "matte.mov");
mov2 = new Movie(this, "alpha.mov");
mov1.play();
mov1.pause();
mov2.play();
mov2.pause();
}
void draw() {
...code...
mov1.play();
mov2.play();
loadPixels();
mov2.mask(mov1);
image(mov2, 0, 0);
}
用于测试的视频是256x256,我总是使用两个数字的幂来获得更好的性能(浮动数学)。希望这有助于某人!