缩放进度条值

时间:2012-02-15 13:07:34

标签: c++ progress-bar

我按如下方式设置进度条:

void CProgressBar::add(int ammount)
{
    mProgress += ammount;
}

float CProgressBar::get()
{
    float pr = (float)mProgress * 100.0f / (float)mMax;
    return pr;
}

现在这就是问题。我正在尝试渲染一个小表面,虽然它没有正确填充它,因为我不能 弄清楚如何正确地扩展价值:

/*
    Progress bar box has size of 128x16
    |-----------|
    |-----------|
*/
float progress = progressBar->get();
float scale = 4.0f; //Here i have it hardcoded although i have to make this generic

progress *= scale;
graphics->color(prgColor);
graphics->renderQd(CRect(x,y,progress,height));

所以我很友好地请求帮助......

2 个答案:

答案 0 :(得分:1)

您必须在0%进度的矩形宽度和100%进度的矩形宽度之间进行线性插值。 E.G:

float width_0 = 0.f; // or any other number of pixels
float width_100 = 250.f; // or any other number of pixels

插值的工作原理如下:

float interpolated_width = (width_100 - width_0) * progress + width_0;

重要提示:progress必须在0到1的范围内!因此,您可能需要先更改CProgressBar::get()函数或除以100。

现在您可以使用新宽度渲染矩形:

graphics->renderQd(CRect(x,y,interpolated_width,height));

答案 1 :(得分:0)

进度条的宽度为128,进度> get()函数返回介于0和100之间的值,因此,在不知道库详情的情况下,您的比例应为1.28

我认为mMax是完全进步的价值。

对于小小的整理,我会使get() const而不是使用C风格的演员表。