[gelöst] QImage keine hohe Auflösung möglich

Alles rund um die Programmierung mit Qt
Antworten
sfbeetle
Beiträge: 9
Registriert: 13. September 2017 12:55

[gelöst] QImage keine hohe Auflösung möglich

Beitrag von sfbeetle »

Ich möchte mit folgendem Code ein Bild zur Weiterverarbeitung scannen:
QPixmap Scanner::scannen(QStringList parameter_liste)
{
QByteArray meldung;
meldung.clear();

QPixmap user_pixmap;
QImage user_image;
user_image.pixel(700,1000);

scanimage = "scanimage";

scanner.start(scanimage,parameter_liste);
scanner.waitForFinished();
meldung = scanner.readAllStandardOutput();
scanner.close();

QMessageBox::information(NULL,"wsx",QString::number(meldung.size()));

user_image = QImage(700,1000,QImage::Format_ARGB32).fromData(meldung);

bool look = user_pixmap.convertFromImage(user_image);
QMessageBox::information(NULL,"ich habe umgewandelt",QString::number((int)look));

return user_pixmap;
}
Mit parameterer_liste werden Scannerdevice, Auflösung, ScanModus übergeben.

Das klappt soweit ganz gut. Leider nur bei Auflösungen bis max 300 - 400 dpi abhängig vom Scan-Modus.
Ich vermute daher das es bei QImage ein Grössenproblem gibt.
Das QByteArray speichert die Daten bei allen Auflösungen ( gem.... meldung.size) aber QImage übernimmt sie dann nicht mehr und liefert null zurück.

Muss ich ab einer bestimmten Auflösung Speicherplatz für QImage bereitstellen? Wenn ja, wie mache ich das und wo liegen die Standardeinstellungen
(habe dazu im Manual nichts gefunden).

Hat mein Problem eine andere Ursache ?

Ohne die Angaben für Grösse und Format bei QImage bekomme ich übrigens genau die gleichen Ergebnisse.

Freue mich über jede Anregung

sfbeetle
Zuletzt geändert von sfbeetle am 20. November 2017 01:10, insgesamt 1-mal geändert.
sfbeetle
Beiträge: 9
Registriert: 13. September 2017 12:55

Re:[gelöst] QImage keine hohe Auflösung möglich

Beitrag von sfbeetle »

nach längerem suchen habe folgenden Beitrag im Forum Stackoverflow gefunden:

https://stackoverflow.com/questions/708 ... imitations

Demnach kann Qimage max. 2147483647 (for 32-bit ints) verarbeiten. Diese Grösse ist bei meinen Vorgaben von 700*1000*4*Scanauflösung bei
ca 200 dpi des Scanners erreicht.
Die Lösung für dieses Problem habe ich dann im Artikel "Loading Large Images" auf

[url]http:://wiki.qt.io/Loading_Large_Images[/url].

gefunden.
Nach Umstellung auf QImageReader sieht der Code nun so aus:

Code: Alles auswählen

QPixmap Scanner::scannen(QStringList parameter_liste)
{
    meldung.clear();
    QPixmap user_pixmap;
    QImage user_image;
    scanimage = "scanimage";

    scanner.start(scanimage,parameter_liste);
    bool pruefer = scanner.waitForFinished(2400000);

    if (pruefer == true)
    {
        meldung = scanner.readAllStandardOutput();
        QBuffer buffer(&meldung);
        buffer.open( QIODevice::ReadOnly );
        QSize size(350,500);
        QImageReader *reader = new QImageReader(&buffer);
        reader->setScaledSize(size);
        user_image = reader->read();
        user_pixmap.convertFromImage(user_image);

        return user_pixmap;
    }
}
Um eine möglichst gute Bildqualität zu erhalten, werde ich die Imagegröße noch abhängig von der Scanereinstellung anpasssen.
Antworten