bring the fastrenderer back again...

hihihi
This commit is contained in:
Jan Schuffenhauer
2020-01-09 10:35:01 +01:00
parent 72b235689e
commit 67b623a63a
7 changed files with 119 additions and 31 deletions

View File

@@ -2,9 +2,16 @@
#include <QSize> #include <QSize>
#include <QPainter> #include <QPainter>
IntelliImage::IntelliImage(int weight, int height) IntelliImage::IntelliImage(int width, int height, bool fastRendererOn)
: imageData(QSize(weight, height), QImage::Format_ARGB32){ : imageData(QSize(width, height), fastRendererOn ? QImage::Format_Indexed8 : QImage::Format_ARGB32){
imageData.fill(QColor(255,255,255,255)); if(fastRendererOn){
imageData = imageData.convertToFormat(QImage::Format_ARGB32);
}
imageData.fill(QColor(255,255,255,255));
if(fastRendererOn){
imageData = imageData.convertToFormat(QImage::Format_Indexed8);
}
this->fastRenderer = fastRendererOn;
} }
@@ -23,7 +30,7 @@ bool IntelliImage::loadImage(const QString &filePath){
// scaled Image to size of Layer // scaled Image to size of Layer
loadedImage = loadedImage.scaled(imageData.size(),Qt::IgnoreAspectRatio); loadedImage = loadedImage.scaled(imageData.size(),Qt::IgnoreAspectRatio);
imageData = loadedImage.convertToFormat(QImage::Format_ARGB32); imageData = loadedImage.convertToFormat(fastRenderer ? QImage::Format_Indexed8 : QImage::Format_ARGB32);
return true; return true;
} }
@@ -33,17 +40,23 @@ void IntelliImage::resizeImage(QImage*image, const QSize &newSize){
return; return;
// Create a new image to display and fill it with white // Create a new image to display and fill it with white
QImage newImage(newSize, QImage::Format_ARGB32); QImage newImage(newSize, QImage::Format_ARGB32);
newImage.fill(qRgb(255, 255, 255)); newImage.fill(qRgb(255, 255, 255));
// Draw the image // Draw the image
QPainter painter(&newImage); QPainter painter(&newImage);
painter.drawImage(QPoint(0, 0), *image); painter.drawImage(QPoint(0, 0), *image);
*image = newImage; *image = newImage;
if(fastRenderer){
this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8);
}
} }
void IntelliImage::drawPixel(const QPoint &p1, const QColor& color){ void IntelliImage::drawPixel(const QPoint &p1, const QColor& color){
// Used to draw on the widget if(fastRenderer){
this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32);
}
// Used to draw on the widget
QPainter painter(&imageData); QPainter painter(&imageData);
// Set the current settings for the pen // Set the current settings for the pen
@@ -51,20 +64,32 @@ void IntelliImage::drawPixel(const QPoint &p1, const QColor& color){
// Draw a line from the last registered point to the current // Draw a line from the last registered point to the current
painter.drawPoint(p1); painter.drawPoint(p1);
if(fastRenderer){
this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8);
}
} }
void IntelliImage::drawPoint(const QPoint &p1, const QColor& color, const int& penWidth){ void IntelliImage::drawPoint(const QPoint &p1, const QColor& color, const int& penWidth){
// Used to draw on the widget if(fastRenderer){
this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32);
}
// Used to draw on the widget
QPainter painter(&imageData); QPainter painter(&imageData);
// Set the current settings for the pen // Set the current settings for the pen
painter.setPen(QPen(color, penWidth, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); painter.setPen(QPen(color, penWidth, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
// Draw a line from the last registered point to the current // Draw a line from the last registered point to the current
painter.drawPoint(p1); painter.drawPoint(p1);
if(fastRenderer){
this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8);
}
} }
void IntelliImage::drawLine(const QPoint &p1, const QPoint& p2, const QColor& color, const int& penWidth){ void IntelliImage::drawLine(const QPoint &p1, const QPoint& p2, const QColor& color, const int& penWidth){
// Used to draw on the widget if(fastRenderer){
this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32);
}
// Used to draw on the widget
QPainter painter(&imageData); QPainter painter(&imageData);
// Set the current settings for the pen // Set the current settings for the pen
@@ -72,16 +97,34 @@ void IntelliImage::drawLine(const QPoint &p1, const QPoint& p2, const QColor& co
// Draw a line from the last registered point to the current // Draw a line from the last registered point to the current
painter.drawLine(p1, p2); painter.drawLine(p1, p2);
if(fastRenderer){
this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8);
}
} }
void IntelliImage::drawPlain(const QColor& color){ void IntelliImage::drawPlain(const QColor& color){
imageData.fill(color); if(fastRenderer){
this->imageData = this->imageData.convertToFormat(QImage::Format_ARGB32);
}
imageData.fill(color);
if(fastRenderer){
this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8);
}
} }
QColor IntelliImage::getPixelColor(QPoint& point){ QColor IntelliImage::getPixelColor(QPoint& point){
return imageData.pixelColor(point); if(fastRenderer){
QImage copy = this->imageData.convertToFormat(QImage::Format_ARGB32);
return copy.pixelColor(point);
}
return imageData.pixelColor(point);
} }
QImage IntelliImage::getImageData(){ QImage IntelliImage::getImageData(){
return imageData; return this->imageData;
}
void IntelliImage::updateRendererSetting(bool fastRendererOn){
this->fastRenderer = fastRendererOn;
this->imageData = this->imageData.convertToFormat(fastRenderer ? QImage::Format_Indexed8 : QImage::Format_ARGB32);
} }

View File

@@ -8,8 +8,8 @@
#include <QWidget> #include <QWidget>
#include <vector> #include <vector>
#include "IntelliHelper/IntelliRenderSettings.h"
#include "IntelliHelper/IntelliTriangulation.h" #include "IntelliHelper/IntelliTriangulation.h"
#include "IntelliHelper/IntelliRenderSettings.h"
class IntelliTool; class IntelliTool;
@@ -40,13 +40,20 @@ QImage imageData;
* \brief The Type, an Image is. * \brief The Type, an Image is.
*/ */
ImageType TypeOfImage; ImageType TypeOfImage;
/*!
* \brief fastRenderer is the flag that represents the usage of 8bit pictures.
*/
bool fastRenderer;
public: public:
/*! /*!
* \brief The Construcor of the IntelliImage. Given the Image dimensions. * \brief The Construcor of the IntelliImage. Given the Image dimensions.
* \param width - The width of the Image. * \param width - The width of the Image.
* \param height - The height of the Image. * \param height - The height of the Image.
* \param fastRendererOn - Represents the flag for 8bit picture handelling.
*/ */
IntelliImage(int width, int height); IntelliImage(int width, int height, bool fastRendererOn);
/*! /*!
* \brief An Abstract Destructor. * \brief An Abstract Destructor.
@@ -142,7 +149,17 @@ virtual bool loadImage(const QString &filePath);
*/ */
virtual QColor getPixelColor(QPoint& point); virtual QColor getPixelColor(QPoint& point);
QImage getImageData(); /*!
* \brief updateRendererSetting updates the existing image format to the new format.
* \param fastRendererOn flag for the 8bit image handeling.
*/
virtual void updateRendererSetting(bool fastRendererOn);
/*!
* \brief getImageData returns the data of the current image.
*/
virtual QImage getImageData();
}; };
#endif #endif

View File

@@ -3,9 +3,10 @@
#include <QRect> #include <QRect>
#include <QDebug> #include <QDebug>
IntelliRasterImage::IntelliRasterImage(int weight, int height) IntelliRasterImage::IntelliRasterImage(int width, int height, bool fastRendererOn)
: IntelliImage(weight, height){ : IntelliImage(width, height, fastRendererOn){
TypeOfImage = IntelliImage::ImageType::Raster_Image; TypeOfImage = IntelliImage::ImageType::Raster_Image;
this->fastRenderer = fastRendererOn;
} }
IntelliRasterImage::~IntelliRasterImage(){ IntelliRasterImage::~IntelliRasterImage(){
@@ -13,7 +14,7 @@ IntelliRasterImage::~IntelliRasterImage(){
} }
IntelliImage* IntelliRasterImage::getDeepCopy(){ IntelliImage* IntelliRasterImage::getDeepCopy(){
IntelliRasterImage* raster = new IntelliRasterImage(imageData.width(), imageData.height()); IntelliRasterImage* raster = new IntelliRasterImage(imageData.width(), imageData.height(), false);
raster->imageData.fill(Qt::transparent); raster->imageData.fill(Qt::transparent);
raster->TypeOfImage = IntelliImage::ImageType::Raster_Image; raster->TypeOfImage = IntelliImage::ImageType::Raster_Image;
return raster; return raster;
@@ -29,6 +30,9 @@ QImage IntelliRasterImage::getDisplayable(int alpha){
QImage IntelliRasterImage::getDisplayable(const QSize& displaySize, int alpha){ QImage IntelliRasterImage::getDisplayable(const QSize& displaySize, int alpha){
QImage copy = imageData; QImage copy = imageData;
if(fastRenderer){
copy = copy.convertToFormat(QImage::Format_ARGB32);
}
for(int y = 0; y<copy.height(); y++) { for(int y = 0; y<copy.height(); y++) {
for(int x = 0; x<copy.width(); x++) { for(int x = 0; x<copy.width(); x++) {
QColor clr = copy.pixelColor(x,y); QColor clr = copy.pixelColor(x,y);
@@ -36,6 +40,9 @@ QImage IntelliRasterImage::getDisplayable(const QSize& displaySize, int alpha){
copy.setPixelColor(x,y, clr); copy.setPixelColor(x,y, clr);
} }
} }
if(fastRenderer){
copy = copy.convertToFormat(QImage::Format_Indexed8);
}
return copy.scaled(displaySize,Qt::IgnoreAspectRatio); return copy.scaled(displaySize,Qt::IgnoreAspectRatio);
} }

View File

@@ -18,8 +18,9 @@ public:
* \brief The Construcor of the IntelliRasterImage. Given the Image dimensions. * \brief The Construcor of the IntelliRasterImage. Given the Image dimensions.
* \param width - The width of the Image. * \param width - The width of the Image.
* \param height - The height of the Image. * \param height - The height of the Image.
* \param fastRendererOn - Represents the flag for 8bit picture handelling.
*/ */
IntelliRasterImage(int width, int height); IntelliRasterImage(int width, int height, bool fastRendererOn);
/*! /*!
* \brief An Destructor. * \brief An Destructor.

View File

@@ -4,9 +4,10 @@
#include <QRect> #include <QRect>
#include <QDebug> #include <QDebug>
IntelliShapedImage::IntelliShapedImage(int weight, int height) IntelliShapedImage::IntelliShapedImage(int width, int height, bool fastRendererOn)
: IntelliRasterImage(weight, height){ : IntelliRasterImage(width, height, fastRendererOn){
TypeOfImage = IntelliImage::ImageType::Shaped_Image; TypeOfImage = IntelliImage::ImageType::Shaped_Image;
this->fastRenderer = fastRendererOn;
} }
IntelliShapedImage::~IntelliShapedImage(){ IntelliShapedImage::~IntelliShapedImage(){
@@ -18,7 +19,7 @@ QImage IntelliShapedImage::getDisplayable(int alpha){
} }
IntelliImage* IntelliShapedImage::getDeepCopy(){ IntelliImage* IntelliShapedImage::getDeepCopy(){
IntelliShapedImage* shaped = new IntelliShapedImage(imageData.width(), imageData.height()); IntelliShapedImage* shaped = new IntelliShapedImage(imageData.width(), imageData.height(), false);
shaped->setPolygon(this->polygonData); shaped->setPolygon(this->polygonData);
shaped->imageData.fill(Qt::transparent); shaped->imageData.fill(Qt::transparent);
shaped->TypeOfImage = IntelliImage::ImageType::Shaped_Image; shaped->TypeOfImage = IntelliImage::ImageType::Shaped_Image;
@@ -26,7 +27,11 @@ IntelliImage* IntelliShapedImage::getDeepCopy(){
} }
void IntelliShapedImage::calculateVisiblity(){ void IntelliShapedImage::calculateVisiblity(){
if(polygonData.size()<=2) { if(fastRenderer){
this->imageData = imageData.convertToFormat(QImage::Format_ARGB32);
}
if(polygonData.size()<=2) {
QColor clr; QColor clr;
for(int y=0; y<imageData.height(); y++) { for(int y=0; y<imageData.height(); y++) {
for(int x=0; x<imageData.width(); x++) { for(int x=0; x<imageData.width(); x++) {
@@ -35,6 +40,9 @@ void IntelliShapedImage::calculateVisiblity(){
imageData.setPixelColor(x,y,clr); imageData.setPixelColor(x,y,clr);
} }
} }
if(fastRenderer){
this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8);
}
return; return;
} }
QColor clr; QColor clr;
@@ -42,7 +50,7 @@ void IntelliShapedImage::calculateVisiblity(){
for(int x=0; x<imageData.width(); x++) { for(int x=0; x<imageData.width(); x++) {
QPoint ptr(x,y); QPoint ptr(x,y);
clr = imageData.pixelColor(x,y); clr = imageData.pixelColor(x,y);
bool isInPolygon = IntelliTriangulation::isInPolygon(triangles, ptr); bool isInPolygon = IntelliTriangulation::isInPolygon(triangles, ptr);
if(isInPolygon) { if(isInPolygon) {
clr.setAlpha(std::min(255, clr.alpha())); clr.setAlpha(std::min(255, clr.alpha()));
}else{ }else{
@@ -51,10 +59,16 @@ void IntelliShapedImage::calculateVisiblity(){
imageData.setPixelColor(x,y,clr); imageData.setPixelColor(x,y,clr);
} }
} }
if(fastRenderer){
this->imageData = this->imageData.convertToFormat(QImage::Format_Indexed8);
}
} }
QImage IntelliShapedImage::getDisplayable(const QSize& displaySize, int alpha){ QImage IntelliShapedImage::getDisplayable(const QSize& displaySize, int alpha){
QImage copy = imageData; QImage copy = imageData;
if(fastRenderer){
copy = copy.convertToFormat(QImage::Format_ARGB32);
}
for(int y = 0; y<copy.height(); y++) { for(int y = 0; y<copy.height(); y++) {
for(int x = 0; x<copy.width(); x++) { for(int x = 0; x<copy.width(); x++) {
QColor clr = copy.pixelColor(x,y); QColor clr = copy.pixelColor(x,y);
@@ -62,6 +76,9 @@ QImage IntelliShapedImage::getDisplayable(const QSize& displaySize, int alpha){
copy.setPixelColor(x,y, clr); copy.setPixelColor(x,y, clr);
} }
} }
if(fastRenderer){
copy = copy.convertToFormat(QImage::Format_Indexed8);
}
return copy.scaled(displaySize,Qt::IgnoreAspectRatio); return copy.scaled(displaySize,Qt::IgnoreAspectRatio);
} }
@@ -73,7 +90,7 @@ void IntelliShapedImage::setPolygon(const std::vector<QPoint>& polygonData){
for(auto element:polygonData) { for(auto element:polygonData) {
this->polygonData.push_back(QPoint(element.x(), element.y())); this->polygonData.push_back(QPoint(element.x(), element.y()));
} }
triangles = IntelliTriangulation::calculateTriangles(polygonData); triangles = IntelliTriangulation::calculateTriangles(polygonData);
} }
calculateVisiblity(); calculateVisiblity();
return; return;

View File

@@ -30,8 +30,9 @@ public:
* \brief The Construcor of the IntelliShapedImage. Given the Image dimensions. * \brief The Construcor of the IntelliShapedImage. Given the Image dimensions.
* \param width - The width of the Image. * \param width - The width of the Image.
* \param height - The height of the Image. * \param height - The height of the Image.
* \param fastRendererOn - Represents the flag for 8bit picture handelling.
*/ */
IntelliShapedImage(int width, int height); IntelliShapedImage(int width, int height, bool fastRendererOn);
/*! /*!
* \brief An Destructor. * \brief An Destructor.

View File

@@ -60,9 +60,9 @@ int PaintingArea::addLayer(int width, int height, int widthOffset, int heightOff
newLayer.widthOffset = widthOffset; newLayer.widthOffset = widthOffset;
newLayer.heightOffset = heightOffset; newLayer.heightOffset = heightOffset;
if(type==IntelliImage::ImageType::Raster_Image) { if(type==IntelliImage::ImageType::Raster_Image) {
newLayer.image = new IntelliRasterImage(width,height); newLayer.image = new IntelliRasterImage(width,height,renderSettings.getFastRenderer());
}else if(type==IntelliImage::ImageType::Shaped_Image) { }else if(type==IntelliImage::ImageType::Shaped_Image) {
newLayer.image = new IntelliShapedImage(width, height); newLayer.image = new IntelliShapedImage(width, height, renderSettings.getFastRenderer());
} }
newLayer.alpha = 255; newLayer.alpha = 255;
this->layerBundle.push_back(newLayer); this->layerBundle.push_back(newLayer);
@@ -158,10 +158,12 @@ void PaintingArea::movePositionActive(int x, int y){
} }
void PaintingArea::moveActiveLayer(int idx){ void PaintingArea::moveActiveLayer(int idx){
if(Tool->getIsDrawing()){ if(Tool != nullptr){
IntelliTool* temp = copyActiveTool(); if(Tool->getIsDrawing()){
delete this->Tool; IntelliTool* temp = copyActiveTool();
this->Tool = temp; delete this->Tool;
this->Tool = temp;
}
} }
if(idx==1) { if(idx==1) {
this->selectLayerUp(); this->selectLayerUp();