效果如下:
头文件:
#ifndef IMAGETOTEXT_H
#define IMAGETOTEXT_H
#include <QWidget>
#include <QPlainTextEdit>
#include <QLabel>
class ImageToText : public QWidget
{
Q_OBJECT
public:
explicit ImageToText(QWidget *parent = nullptr);
~ImageToText();
void loadImage(const QString &path);
protected slots:
void onSliderValueChanged(int val);
protected:
void initialize();
void showText();
private:
QPlainTextEdit *m_pPlainText = nullptr;
QLabel *m_pLabel = nullptr;
QImage m_img;
int m_nVal = 125;
};
#endif // IMAGETOTEXT_H
源文件:
#include "imagetotext.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QImage>
#include <QPixmap>
#include <QSlider>
#include <QDebug>
ImageToText::ImageToText(QWidget *parent) : QWidget(parent)
{
initialize();
}
ImageToText::~ImageToText()
{
}
void ImageToText::loadImage(const QString &path)
{
m_img = QImage(path);
m_pLabel->setPixmap(QPixmap::fromImage(m_img));
m_img = m_img.scaled(100,50);
showText();
}
void ImageToText::onSliderValueChanged(int val)
{
m_nVal = val;
showText();
}
void ImageToText::initialize()
{
QHBoxLayout *pLayout = new QHBoxLayout;
m_pPlainText = new QPlainTextEdit;
m_pLabel = new QLabel;
QSlider *pSliderColor = new QSlider(Qt::Horizontal);
pSliderColor->setRange(0,255);
pSliderColor->setValue(m_nVal);
QVBoxLayout *pVLayout = new QVBoxLayout;
pVLayout->addWidget(pSliderColor);
pVLayout->addWidget(m_pLabel);
pLayout->addLayout(pVLayout);
pLayout->addWidget(m_pPlainText);
this->setLayout(pLayout);
this->resize(1500,750);
connect(pSliderColor,SIGNAL(valueChanged(int)),this,SLOT(onSliderValueChanged(int)));
}
void ImageToText::showText()
{
m_pPlainText->clear();
if(m_img.isNull()){
return;
}
int w = m_img.width();
int h = m_img.height();
for(int i=0; i < h;i++)
{
QString text;
for(int j= 0; j < w;j++)
{
QRgb pixel = m_img.pixel(j,i);
int gray = qGray(pixel);
if(gray > m_nVal){
text += ".";
}else{
text += "*";
}
}
text +"\n";
m_pPlainText->appendPlainText(text);
}
}