В dlib.image появилась возможность отслеживать прогресс во время работы фильтров. Для этого используется многопоточность – необходимо создать класс-враппер, наследующий от FilteringThread. Прогресс (от 0 до 1) считывается из свойства progress для SuperImage. В данном примере показано, как использовать эту функциональность для вывода прогресса свертки в консоль:
import std.stdio;
import dlib.image.image;
import dlib.image.io.png;
import dlib.image.filters.convolution;
import dlib.image.fthread;
class ConvolutionThread: FilteringThread
{
float[] kernel;
this(SuperImage img, float[] k)
{
super(img);
kernel = k;
}
override void run()
{
output = image.convolve(kernel);
}
override void onRunning()
{
writef("Convolving %s%%", cast(uint)(image.progress * 100));
write("r");
stdout.flush();
}
override void onFinished()
{
writeln();
}
}
void main()
{
auto img = loadPNG("test.png");
img = (new ConvolutionThread(img, Kernel.Emboss)).filtered;
img.savePNG("output.png");
}