Reworked RawImage class to use OpenCV

This commit is contained in:
2020-05-10 17:02:16 +02:00
parent fcc1696c2c
commit 1e45a78b39
9 changed files with 265 additions and 227 deletions
+25 -12
View File
@@ -3,6 +3,7 @@
#include <QDebug>
#include <QKeyEvent>
#include <QOpenGLDebugLogger>
#include <QOpenGLPixelTransferOptions>
ImageScrollAreaGL::ImageScrollAreaGL(QWidget *parent) : QOpenGLWidget(parent)
{
@@ -17,32 +18,41 @@ ImageScrollAreaGL::~ImageScrollAreaGL()
makeCurrent();
}
void ImageScrollAreaGL::setImage(RawImageAbs *image)
void ImageScrollAreaGL::setImage(RawImage *image)
{
if(image == nullptr)return;
m_image->destroy();
m_image->setFormat(QOpenGLTexture::R16_UNorm);
m_image->setSize(image->width(), image->height());
m_image->setMinMagFilters(QOpenGLTexture::LinearMipMapLinear, QOpenGLTexture::Linear);
m_image->allocateStorage();
if(RawImage<uint8_t> *i8 = dynamic_cast<RawImage<uint8_t>*>(image))
switch(image->type())
{
m_image->setData(QOpenGLTexture::Red, QOpenGLTexture::UInt8, i8->data());
case RawImage::UINT8:
m_image->setData(0, QOpenGLTexture::Red, QOpenGLTexture::UInt8, image->data(), m_transferOptions.get());
m_range = UINT8_MAX;
}
else if(RawImage<uint16_t> *i16 = dynamic_cast<RawImage<uint16_t>*>(image))
{
m_image->setData(QOpenGLTexture::Red, QOpenGLTexture::UInt16, i16->data());
break;
case RawImage::UINT16:
m_image->setData(0, QOpenGLTexture::Red, QOpenGLTexture::UInt16, image->data(), m_transferOptions.get());
m_range = UINT16_MAX;
}
else if(RawImage<uint32_t> *i32 = dynamic_cast<RawImage<uint32_t>*>(image))
{
m_image->setData(QOpenGLTexture::Red, QOpenGLTexture::UInt32, i32->data());
m_range = UINT32_MAX;
break;
case RawImage::FLOAT32:
break;
}
m_image->generateMipMaps();
repaint();
}
void ImageScrollAreaGL::setImage(const QPixmap &pixmap)
{
QImage img = pixmap.toImage();
m_image->destroy();
m_image->setData(img);
repaint();
}
void ImageScrollAreaGL::setLow(int low)
{
m_low = low/m_range;
@@ -127,4 +137,7 @@ void ImageScrollAreaGL::initializeGL()
m_image->bind(0);
m_image->setMinificationFilter(QOpenGLTexture::LinearMipMapLinear);
m_image->setMagnificationFilter(QOpenGLTexture::Linear);
m_transferOptions = std::unique_ptr<QOpenGLPixelTransferOptions>(new QOpenGLPixelTransferOptions);
m_transferOptions->setAlignment(1);
}