Я расширил Qt Imageviewer example с помощью некоторых функций. Я в основном хочу добавить функцию сохранения. В этом примере есть две функции одного и того же класса обработки открытого процесса изображения:C++ (Qt5.5) Расход изображения Пример просмотра с помощью функции сохранения
void ImageViewer::open()
{
QStringList mimeTypeFilters;
foreach (const QByteArray &mimeTypeName, QImageReader::supportedMimeTypes())
mimeTypeFilters.append(mimeTypeName);
mimeTypeFilters.sort();
const QStringList picturesLocations = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation);
QFileDialog dialog(this, tr("Open File"),
picturesLocations.isEmpty() ? QDir::currentPath() : picturesLocations.last());
dialog.setAcceptMode(QFileDialog::AcceptOpen);
dialog.setMimeTypeFilters(mimeTypeFilters);
dialog.selectMimeTypeFilter("image/jpeg");
while (dialog.exec() == QDialog::Accepted && !loadFile(dialog.selectedFiles().first())) {}
}
и
bool ImageViewer::loadFile(const QString &fileName)
{
QImageReader reader(fileName);
reader.setAutoTransform(true);
const QImage image = reader.read();
if (image.isNull()) {
QMessageBox::information(this, QGuiApplication::applicationDisplayName(),
tr("Cannot load %1.").arg(QDir::toNativeSeparators(fileName)));
setWindowFilePath(QString());
imageLabel->setPixmap(QPixmap());
imageLabel->adjustSize();
return false;
}
imageLabel->setPixmap(QPixmap::fromImage(image));
scaleFactor = 1.0;
printAct->setEnabled(true);
fitToWindowAct->setEnabled(true);
convAct->setEnabled(true); // so the image can be converted if it was loaded ...
updateActions();
if (!fitToWindowAct->isChecked()) {
imageLabel->adjustSize();
}
setWindowFilePath(fileName);
return true;
}
Так я добавил кнопку Сохранить в меню, и в классе imageviewer.h:
class ImageViewer : public QMainWindow
{
Q_OBJECT
public:
ImageViewer();
bool loadFile(const QString &);
private slots:
void open();
void print();
void save(); // <---
Все это хорошо, но я не знаю, как получить мое изображение в новой функции, кроме того, что я, очевидно, сделать неправильный переход от QPixmap к QImage - но я также пытался заменив его на QPixmap test = imageLabel->pixmap()
без каких-либо успехов.
void ImageViewer::save()
{
QImage test = imageLabel->pixmap();
qWarning()<< test;
QByteArray bytes;
QBuffer buffer(&bytes);
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, "BMP");
QString monobitmap = QString::fromLatin1(bytes.toBase64().data());
}
В конце концов, я хочу сохранить его как монохромное растровое изображение (независимо от того, что было раньше). Извините за размещение большого количества кода.
'QImage test = imageLabel-> pixmap() -> toImage();' сделал трюк. Спасибо! Также вызывается упомянутый «QImage mono = test.convertToFormat (QImage :: Format_Mono);». Благодаря! – xtlc