diff options
author | Nicholas Bottone <nick@bottone.io> | 2023-12-13 01:33:39 -0500 |
---|---|---|
committer | Nicholas Bottone <nick@bottone.io> | 2023-12-13 01:37:01 -0500 |
commit | 5bea9a70aa43b9a9ccc1c892255890d3df2339b8 (patch) | |
tree | fd100f84ff71b174ad38c15a7e6b804dc2e2651b /src | |
parent | 086dff023dc8a13d5e3a8867a845d6244409c8ef (diff) |
Add image saving functionality
Diffstat (limited to 'src')
-rw-r--r-- | src/raytracer/raytracer.cpp | 17 | ||||
-rw-r--r-- | src/raytracer/raytracer.h | 1 | ||||
-rw-r--r-- | src/settings.h | 3 |
3 files changed, 20 insertions, 1 deletions
diff --git a/src/raytracer/raytracer.cpp b/src/raytracer/raytracer.cpp index d9d467d..66a6f73 100644 --- a/src/raytracer/raytracer.cpp +++ b/src/raytracer/raytracer.cpp @@ -68,7 +68,17 @@ void RayTracer::render(RGBA *imageData, const RayTraceScene &scene) { } } } - settings.rotation += 0.5f; + + if (settings.bulkOutputFilePath.size() > 0) { // means we are doing bulk rendering + // save the image to the bulk directory + std::string filePath = settings.bulkOutputFilePath + QDir::separator().toLatin1() + std::to_string(settings.currentTime) + ".png"; + saveViewportImage(filePath); + if (settings.currentTime < settings.maxTime) { // still more to render + // render the next frame + settings.currentTime++; + emit settingsChanged(m_imageLabel); // emit to allow the UI to update then render the next frame + } + } } @@ -197,6 +207,7 @@ void RayTracer::settingsChanged(QLabel* imageLabel) { QImage image = QImage(576, 432, QImage::Format_RGBX8888); image.fill(Qt::black); RGBA *data = reinterpret_cast<RGBA *>(image.bits()); + m_imageData = data; imageLabel->setPixmap(QPixmap::fromImage(image)); return; } @@ -288,3 +299,7 @@ void RayTracer::keyReleaseEvent(QKeyEvent *event) { m_keyMap[Qt::Key(event->key())] = false; } +void RayTracer::saveViewportImage(std::string filePath) { + QImage image = QImage((uchar *) m_imageData, 576, 432, QImage::Format_RGBX8888); + image.save(QString::fromStdString(filePath)); +} diff --git a/src/raytracer/raytracer.h b/src/raytracer/raytracer.h index cf32a99..da4ec2d 100644 --- a/src/raytracer/raytracer.h +++ b/src/raytracer/raytracer.h @@ -177,6 +177,7 @@ public: int m_depth; QImage m_image; + void saveViewportImage(std::string filename); signals: void xyRotationChanged(float value); void xzRotationChanged(float value); diff --git a/src/settings.h b/src/settings.h index 1d9e358..0865e44 100644 --- a/src/settings.h +++ b/src/settings.h @@ -15,6 +15,9 @@ struct Settings { float rotation = 0.f; bool negative = false; float w = 0.f; + int currentTime = 0; + int maxTime = 0; + std::string bulkOutputFilePath; }; |