Reworked RawImage class to use OpenCV
This commit is contained in:
+25
-12
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user