Almond.cpp 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #include "Almond.h"
  2. #include <QIntValidator>
  3. #include <QFileDialog>
  4. #include <QMessageBox>
  5. #include "benchmarkdialog.h"
  6. Almond::Almond(QWidget *parent) :
  7. QMainWindow(parent),
  8. mandelContext(mnd::initializeContext())
  9. {
  10. ui.setupUi(this);
  11. printf("not yet created!\n");
  12. mw = std::make_unique<MandelWidget>(mandelContext, ui.centralWidget);
  13. //qRegisterMetaType<MandelWidget>("MandelWidget");
  14. printf("created!\n");
  15. ui.verticalLayout_left->addWidget(mw.get());
  16. //ui.verticalLayout_left->addWidget(new MyGLWidget(ui.centralWidget));
  17. //mw->show();
  18. }
  19. void Almond::on_pushButton_clicked()
  20. {
  21. ExportImageDialog dialog(this);
  22. auto response = dialog.exec();
  23. if (response == 1) {
  24. mnd::MandelInfo mi;
  25. mi.maxIter = dialog.getMaxIterations();
  26. mi.view = mw->getViewport();
  27. mi.bWidth = dialog.getWidth();
  28. mi.bHeight = dialog.getHeight();
  29. mi.view.adjustAspectRatio(mi.bWidth, mi.bHeight);
  30. mnd::Generator& g = mandelContext.getDefaultGenerator();
  31. auto fmap = Bitmap<float>(mi.bWidth, mi.bHeight);
  32. g.generate(mi, fmap.pixels.get());
  33. auto bitmap = fmap.map<RGBColor>([](float i) { return i < 0 ? RGBColor{ 0,0,0 } : RGBColor{ uint8_t(cos(i * 0.015f) * 127 + 127), uint8_t(sin(i * 0.01f) * 127 + 127), uint8_t(i) }; });//uint8_t(::sin(i * 0.01f) * 100 + 100), uint8_t(i) }; });
  34. QImage img((unsigned char*)bitmap.pixels.get(), bitmap.width, bitmap.height, bitmap.width * 3, QImage::Format_RGB888);
  35. img.save(dialog.getPath());
  36. }
  37. }
  38. ExportImageDialog::ExportImageDialog(QWidget* parent) :
  39. QDialog{ parent }
  40. {
  41. eid.setupUi(this);
  42. eid.maxIterations->setValidator(new QIntValidator(1, 10000000, this));
  43. eid.imgWidth->setValidator(new QIntValidator(1, 10000000, this));
  44. eid.imgHeight->setValidator(new QIntValidator(1, 10000000, this));
  45. }
  46. int ExportImageDialog::getMaxIterations(void) const
  47. {
  48. return std::stoi(eid.maxIterations->text().toStdString());
  49. }
  50. int ExportImageDialog::getWidth(void) const
  51. {
  52. return std::stoi(eid.imgWidth->text().toStdString());
  53. }
  54. int ExportImageDialog::getHeight(void) const
  55. {
  56. return std::stoi(eid.imgHeight->text().toStdString());
  57. }
  58. QString ExportImageDialog::getPath(void) const
  59. {
  60. return eid.savePath->text();
  61. }
  62. void ExportImageDialog::on_pushButton_clicked()
  63. {
  64. QString saveAs = QFileDialog::getSaveFileName(this,
  65. tr("Save exported image"), "",
  66. tr("PNG image (*.png);;JPEG image (*.jpg);;All Files (*)"));
  67. eid.savePath->setText(saveAs);
  68. this->repaint();
  69. }
  70. void ExportImageDialog::on_buttonBox_accepted()
  71. {
  72. if (eid.savePath->text() == "") {
  73. QMessageBox msgBox;
  74. msgBox.setText("Please specify a path.");
  75. msgBox.exec();
  76. reject();
  77. }
  78. }
  79. void Almond::on_pushButton_2_clicked()
  80. {
  81. BenchmarkDialog bd(mandelContext, this);
  82. bd.exec();
  83. }