Nach "Cancel" verschwinden Werte

Alles rund um die Programmierung mit Qt
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

"getSaveFileName" ist übrigens "static" ..
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

hallo, ich habe ein Problem mit dem Laden. Ich kann ein Bild laden (png) und speichere es dann als tiff. Und wenn ich dann das tiff laden möchte, wird nichts angezeigt.

Code: Alles auswählen

void TabEins::loadPic() 
 { 	
	QString fileName = QFileDialog::getOpenFileName(this, "Open File", "/home",("Images(*.tiff *.png *.gif *.jgp *.jpeg *.bmp *.tiff *.xbm *.xpm)"));
	if(!fileName.isEmpty()){											  
		QImage file(fileName);
		if(file.isNull()) { qWarning()<<"Fehler beim öffnen der Datei!";
		}
		qWarning() << "ok";
		imageLabel->setPixmap(QPixmap::fromImage(file));
	}	
 }
Hmm mir fällt nichts ein ^^
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

das steht in der doku.... ganz ganz sicher ;-)

QImage::QImage ( const QString & fileName, const char * format = 0 )
Constructs an image and tries to load the image from the file with the given fileName.
The loader attempts to read the image using the specified format. If the format is not specified (which is the default), the loader probes the file for a header to guess the file format.
If the loading of the image failed, this object is a null image.
The file name can either refer to an actual file on disk or to one of the application's embedded resources. See the Resource System overview for details on how to embed images and other resource files in the application's executable.
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

ich hab mir jetzt QPixmap, Qlabel, QImage und QPicture angeschaut. Aber ich weiss trotzdem nicht weiter. Ich weiss, dass QPixmap kein "tiff" hat. Und QLabel hat kein "setImage". Vlt ein kleiner Tipp welches ich mir noch genauer anschauen sollte??

lg

nici
Hmm mir fällt nichts ein ^^
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Beitrag von archer »

Ich würde die Methodeeher so aufbauen

Code: Alles auswählen

void TabEins::loadPic()
{    
    QString fileName = QFileDialog::getOpenFileName(
                                      this, 
                                      "Open File",
                                      "/home",
                                      ("Images(*.tiff *.png *.gif *.jgp *.jpeg *.bmp *.tiff *.xbm *.xpm)"));
    if (fileName.isEmpty() == false)
    {                                  
        QImage file(fileName);
        if (file.isNull() == true) 
        { 
             qWarning()<<"Fehler beim öffnen der Datei!";
        }
        else
        {
             qWarning() << "ok";
             imageLabel->setPixmap(file);
        }
    }   
}
[/code]
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

hi,

also so funktioniert es leider auch nicht. Bei der letzten Zeile kommt eine Fehlermeldung, denn das muss

Code: Alles auswählen

imageLabel->setPixmap(QPixmap::fromImage(file));
heissen. (oder??)
trotzdem danke.

lg

nici
Hmm mir fällt nichts ein ^^
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

hat denn niemand einen Vorschlag für mich??
Hmm mir fällt nichts ein ^^
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Kannst du das tiff, welches du laden willst, in einem Betrachter öffnen (gwenview, gimp, ...)?
Klappt es mit anderen Tiffs?
Klappt das Anzeigen auf dem Label mit png, jpeg, ...?
Ist das tiff-plugin für dein Qt/Programm zugänglich?
Ansonsten kann man bei der Fülle an Infos nur raten.

Grüße
Franz
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

ne also das tiff-Bild das ich laden möchte, kann ich mit gimp nicht öffnen.
In meiner Oberfläche kann ich png, jpeg, .. öffnen.
Was für ein Plugin meinst du??

lg

nici
Hmm mir fällt nichts ein ^^
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

nici hat geschrieben:ne also das tiff-Bild das ich laden möchte, kann ich mit gimp nicht öffnen.
Dann probier doch mal ein Tiff in deinem Programm zu laden, welches mit Gimp geht.
In meiner Oberfläche kann ich png, jpeg, .. öffnen.
Was für ein Plugin meinst du??
Dass du png und jpeg öffnen kannst ist doch shconmal ein fortschritt. Denn es zeigt dir, dass deine Routine prinzipiell funktioniert.
Somit müssen wir nur noch schauen, dass das Tiff funktioniert.

Und das Plugin ist bei mir dieses:
/usr/lib/qt4/plugins/imageformats/libqtiff.so
Nur seh ich grad dass da auch jpeg als plugin drinnen liegt (Dachte das wäre wie png ein fester Bestandteil der qt-gui). Somit können wir annehmen, dass deine imageformats und somit auch das tiff-plugin (wenn es denn installiert ist) für dein Programm zugänglich sind.

Also liegts an nem fehlerhaften Tiff.
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

hmm das kann auch sein, vlt speicher ich ja falsch.

Code: Alles auswählen

void TabEins::savePic()
 {       
   QFileDialog *tmp = new QFileDialog; 
        
   QString Dateiendung= " *.tiff";
   
   QString fileName = tmp->getSaveFileName (this, "Speichern", "unbekannt" ," *.tiff;; *.png;; *.jgp;; *.jpeg;; *.bmp;; *.tiff;; *.xbm;; *.xpm", &Dateiendung);
   //falls vom Benutzer keine Dateiendung angegeben wird:    
   qWarning() << "TEST" << fileName;
	if(!fileName.isEmpty()){
		if (fileName.section('.', -1)!=Dateiendung.section('.',-1))
		{  //Dateiendung an den Namen hängen:
			fileName.append(Dateiendung.section('*',-1));
		}
		imageLabel->pixmap()->save(fileName);
   }
 };
lg

nici
Hmm mir fällt nichts ein ^^
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

hab mir ein tiff Bild runter geladen und mit gimp geöffnet und es ging.
Hmm mir fällt nichts ein ^^
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

In der Annahme, dass die Doku Recht hat und tiff nur mit QImage handhabbar ist (hab das nicht getestet), speicher mal so ab:

Code: Alles auswählen

imageLabel->pixmap()->toImage().save(fileName);
Wobei hier noch Raum für Fehlerbehandlung besteht.
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

das geht auch nicht. woran liegt denn das?
Hmm mir fällt nichts ein ^^
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Klappt es denn auch mit dem png, welches du lädst um es als tiff zu speichern?
Warum willst du eigentlich das Tiff speichern? Die Qualität wird nicht besser als das png, nur mehr (Platten)Speicher wird verbraten.

Ansonsten klappt hier alles bestens (Qt-4.4.2, Gentoo Linux, AMD64) mit diesen beiden Schnippseln:

Code: Alles auswählen

// Variante 1:
QImage image("./test.png");
image.save("test.tiff");

Code: Alles auswählen

// Variante 2:
QLabel label;
QPixmap pix("./test.png");
label.setPixmap(pix);

// save...
label.pixmap()->save("./test.tiff");
label.show();
Antworten