【问题标题】:Crop Fbo to a bounding box in Openframeworks在 Openframeworks 中将 Fbo 裁剪到边界框
【发布时间】:2016-04-05 14:44:25
【问题描述】:

我在fbo 中有一个绘图,并试图通过使用边界框裁剪到可见部分来减小fbo 的大小。这是我想要实现的视觉表示: bounding box example

我找到了解决方案:将fbo 数据传递给pixels,然后检测图像左、右、上、下部分的第一个彩色像素。

在代码的以下部分中,我试图检测底部交叉点。但是我遇到了一个奇怪的像素问题。

int w = 4;
int h = 4;

fbo.allocate(w, h, GL_RGBA);
fbo.begin();
ofClear(0, 0);
fbo.end();

fbo.begin();
ofSetColor(255, 0, 0);
ofDrawRectangle(0, 0, 4, 2);
fbo.end();

pixels.allocate(w, h, GL_RGBA);

fbo.readToPixels(pixels);

for(auto line = pixels.getLines().end(); line != pixels.getLines().begin(); --line){
    for(auto pixel: line.getPixels()){
        cout <<  "line: " << line.getLineNum() << " color: " << pixel.getColor() << endl;
    }
}

输出:

line: 4 color: 24, 215, 83, 118
line: 4 color: 255, 127, 0, 0
line: 4 color: 173, 7, 0, 0
line: 4 color: 1, 0, 0, 0
line: 3 color: 0, 0, 0, 0
line: 3 color: 0, 0, 0, 0
line: 3 color: 0, 0, 0, 0
line: 3 color: 0, 0, 0, 0
line: 2 color: 0, 0, 0, 0
line: 2 color: 0, 0, 0, 0
line: 2 color: 0, 0, 0, 0
line: 2 color: 0, 0, 0, 0
line: 1 color: 255, 0, 0, 255
line: 1 color: 255, 0, 0, 255
line: 1 color: 255, 0, 0, 255
line: 1 color: 255, 0, 0, 255

line:1 看起来不错,但line:4 有什么问题,那里的随机颜色在做什么?重建应用程序后,他们可能已经走了,但有随机机会。也许还有另一种方法可以通过图像的可见部分裁剪fbo? 这个solution 不适合我。

【问题讨论】:

    标签: c++ pixels openframeworks fbo


    【解决方案1】:

    你的循环是问题所在。第 4 行指向未初始化的内存区域,而第 0 行丢失。您的矩形绘制在第 0 行和第 1 行。

    来自 iterator::end() 文档:

    返回迭代器结束 返回一个迭代器,该迭代器引用向量容器中的末尾元素。

    past-the-end 元素是在向量中最后一个元素之后的理论元素。它不指向任何元素,因此不应被取消引用。

    一个问题的答案将帮助您: Iterating C++ vector from the end to the begin

    【讨论】:

    • 这是有道理的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多