QFile durch QImage ersetzten

Alles rund um die Programmierung mit Qt
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

QFile durch QImage ersetzten

Beitrag von nici »

Hallo Leute,

Ich öffne durch QFile eine Datei, aber ich möchte ein Bild öffnen. Wie kann ich das QFile durch ein QImage ersetzen und nach dem Laden das QImage in ein QPixmap konvertieren, welches dann in einem Label angezeigt wird. In der Doku habe ich leider nichts gefunden.

Bisher habe ich:

Code: Alles auswählen

 void FileN::loadFile()
 {
 	QFileDialog *tmp2 = new QFileDialog;
												  
	QString fileName = tmp2->getOpenFileName(this, "Open File",      
                                            "/home",("Images(*.png *.jgp)"));
												  
 	QFile file(fileName);
 if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) 
	{
 	qWarning()<<"Fehler beim öffnen der Datei!";
	}
 };
lg

nici
Hmm mir fällt nichts ein ^^
jerry42
Beiträge: 126
Registriert: 9. Oktober 2008 10:48

Beitrag von jerry42 »

Was hindert dich daran einfach folgenden Konstruktor von QImage im Zusammenhang mit deinem QString fileName zu nutzen?

Code: Alles auswählen

QImage::QImage ( const QString & fileName, const char * format = 0 )
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

danke, ich werde es sofort ausprobieren.(Das Problem ist, das ich im Bereich QT-Programmierung null Ahnung habe und erst seit 2 woche mich damit beschäftige)

lg

nici
Hmm mir fällt nichts ein ^^
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Nimm doch gleich ein QPixmap::load()
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

hi,
also ich hab mir das mal angeschaut, so ganz schlau werde ich aus der Doku leider nicht.

hab geschrieben.

Code: Alles auswählen

QImage image;
	QByteArray ba;
	QBuffer buffer(&ba);
	buffer.open(QIODevice::WriteOnly);
	image.save(&buffer, "PNG");
doch es tut sich nichts. Das QPixmap schaue ich mir jetzt auch mal an, ich hoffe das bringt mir mehr.

lg

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

Beitrag von nici »

hallo,

kann mir jemand sagen, wie ich ein Bild öffnen kann??

lg

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

Beitrag von nici »

hallo,

also ich habe jetzt mal QFile durch QImage ersetzt.

Code: Alles auswählen

 void FileN::loadFile()
 {
 	QFileDialog *tmp2 = new QFileDialog;
												  
	QString fileName = tmp2->getOpenFileName(this, "Open File", "/home",("Images(*.png *.jgp)"));
												  
 	QImage file(fileName);
if(!file.load(QIODevice::ReadOnly)) 
	{
 	qWarning()<<"Fehler beim öffnen der Datei!";
	}	
 };	
aber leider kommt eine Fehlermeldung, die ich nicht verstehe.

Fehlermeldung:


fileN.cpp: In member function 'void FileN::loadFile()':
fileN.cpp:56: error: no matching function for call to 'QImage::load(QIODevice::OpenModeFlag)'
/usr/include/qt4/QtGui/qimage.h:192: note: candidates are: bool QImage::load(QIODevice*, const char*)
/usr/include/qt4/QtGui/qimage.h:193: note: bool QImage::load(const QString&, const char*)
make: *** [fileN.o] Fehler 1

Etwas Hilfe würde mir sehr helfen, danke.

lg

nici
Hmm mir fällt nichts ein ^^
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

kann mir jemand sagen, wie ich ein Bild öffnen kann??


Du ignorierst die Doku und die Forumsantworten. Wie soll man dir da noch helfen können?
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

ich habe dich doku gelesen, aber sie hilft einem Anfänger überhautp nicht,(naja nicht wirklich viel, mir fehlen da die Beispiele)sry.
Das Problem mit dem Bildöffnen habe ich jetzt hinbekommen, jedoch kann ich das Bild nicht speichern. Ich möchte wenn ich das Bild geladen habe nach dem Typ, also Format fragen und die Endung dann beim Speichern automatisch dranhängen. Da ich aber ein statische QFileDialog habe geht das noch nicht.

lg

nici
Hmm mir fällt nichts ein ^^
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Wurde oben bereits erwähnt, steht auch hier, und habe ich nicht ausprobiert:

Code: Alles auswählen

void Irgendwo::Irgendwas()
{
   QLabel* label = new QLabel(this);
   QPixmap pixmap;

   pixmap.load("mein_image.jpg");
   label->setPixmap(pixmap);
}
Speichern könntest du das ganze dann so wie hier:

Code: Alles auswählen

void Irgendwo::Irgendwasanderes()
{
   pixmap.save("mein_image.jpg", "JPG");
}
Um den User nach dem Format zu fragen, könntest du einen QInputDialog verwenden:

Code: Alles auswählen

void Irgendwo::Irgendwasanderes()
{
   QStringList items;
   items << "JPG" << "PNG" << "BMP";

   bool ok;
   QString item = QInputDialog::getItem(this, "Bild speichern...", "Format wählen:", items, 0, false, &ok);
}

Den Dateiname holst du dann z. B. mit QFileDialog::getSaveFileName() und übergibst dort das ausgewählte Format als selectedFilter:

Code: Alles auswählen

void Irgendwo::Irgendwasanderes()
{
   QString fileName = QFileDialog::getSaveFileName(this, "Bild speichern...", "/path/to/root_or_selected_file.png", "Bilder (*.png *.xpm *.jpg)", ausgwähltesFormat);
}
Steht doch alles in der Doku ;)
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

hi,
danke für deine Antwort, die hilft mir schon eher,
der Benutzer soll ja nicht unbedingt ein Format aussuchen, das Format vom geladenen Bild soll übernommen werden, oder zumindest vorgeschlagen werden.

lg

nici
Hmm mir fällt nichts ein ^^
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

nici hat geschrieben:hi,
danke für deine Antwort, die hilft mir schon eher,
der Benutzer soll ja nicht unbedingt ein Format aussuchen, das Format vom geladenen Bild soll übernommen werden, oder zumindest vorgeschlagen werden.

lg

nici
Dann musst du das wohl aus dem Dateinamen des gelandenen Bilds holen ;) Dazu hilft dir das oder, wenn dus umständlich aber einfach ( :D ) haben willst das und das
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

hi,

also mein speichern geht noch immer nicht. Kann sich das mal jmd angucken? Danke.

Code: Alles auswählen

void FileN::saveFile()
 {	 	
 	//QFileDialog *tmp = new QFileDialog;
 	
 	QString Dateiendung = "*.png";
 	QString fileName = QFileDialog::getSaveFileName (this, "Speichern", QDir::currentPath(), "Bilder(*.bmp;;*.jgp;;*.jpeg;;*.png;;*.tiff;;*.xbm;;*.xpm)", &Dateiendung);
				//&Dateiendung weisst dem filter die ausgewählte Dateiendung zu
 	
 	//falls vom Benutzer keine Dateiendung angegeben wird: 	
	qWarning() << "TEST" << fileName;
	if (fileName.section('.', -1)!=Dateiendung.section('.',-1))
 {
 	
 	//Dateiendung an den Namen hängen:
 	fileName.append(Dateiendung.section('*',-1));
 }
 };
lg

nici
Hmm mir fällt nichts ein ^^
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

1) wo ist das Speichern?

2) bist du sicher, dass der getSaveFileName() Aufruf nicht schon die Endung dranhängt?
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

hi,

was meinst du mit "wo ist dein Speichern", das ist halt die Methode zum speichern.
Es wird keine Endung drangehängt und es wird überhaupt nicht gespeichert. Weiss auch nicht warum.
Hmm mir fällt nichts ein ^^
Antworten