Almond.cpp 2.9 KB

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