Ausgabe von Pixmap in Datei speichern

Alles rund um die Programmierung mit Qt
Antworten
Moritz
Beiträge: 16
Registriert: 26. März 2009 18:00
Wohnort: Aachen

Ausgabe von Pixmap in Datei speichern

Beitrag von Moritz »

Hi,
ich bin bei der Arbeit mit Qt auf folgendes Problem gestoßen:
Ist es möglich etwas in einem QLabel durch eine Pixmap ausgeben zu lassen (in dem Beispiel was ich hier poste ist es einfach nur eine rote Linie) und danach einfach in einer jpg Datei oder auch gerne in anderen Formaten abzuspeichern um diese Datei später wieder verwenden zu können? Wäre nett wenn ihr mir helfen könntet. Danke. Hier is der Code.

header

Code: Alles auswählen

#ifndef IMAGE_H
#define IMAGE_H

#include <QtGui/QWidget>
#include "ui_image.h"

class Image : public QWidget
{
	Q_OBJECT

public:
	Image(QWidget *parent = 0, Qt::WFlags flags = 0);
	~Image();

private:
	Ui::ImageClass ui;

private slots:
	void on_pushButton_loadImage_clicked();
};

#endif // IMAGE_H
cpp

Code: Alles auswählen

#include "image.h"

Image::Image(QWidget *parent, Qt::WFlags flags)
	: QWidget(parent, flags)
{
	ui.setupUi(this);
}

Image::~Image()
{

}

void Image::on_pushButton_loadImage_clicked()
{
	QImage image(256, 256, QImage::Format_RGB32);
	for (int x = 0; x<256; x++)
	{
	image.setPixel(x, 120, qRgb(255, 0, 0));
	}
	ui.label_Image->setPixmap(QPixmap::fromImage(image));
}
Also nur damit ich keine Verwirrung stifte ich möchte alles was sich in dem grau unterlegten 256*256 Feld befindet in einer Bild-Datei abspeichern.
So sieht die Ausgabe aus:
Dateianhänge
RedLine.JPG
RedLine.JPG (13.76 KiB) 3317 mal betrachtet
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Moritz
Beiträge: 16
Registriert: 26. März 2009 18:00
Wohnort: Aachen

Beitrag von Moritz »

hi, danke für die antwort, aber irgendwie komm ich mit der antwort nicht so ganz weiter, vermutlich weil ich die befehle nicht so recht kapier. ich habs versucht anzuwenden aber der compiler gibt immer nur fehler aus. bis dann danke
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Und da der Fehler geheim ist, ist auch die Antwort geheim.
Moritz
Beiträge: 16
Registriert: 26. März 2009 18:00
Wohnort: Aachen

Beitrag von Moritz »

mir ist schon klar das das komplett falsch ist was ich hier gemacht hab und das man nicht einfach den code aus dem assistant kopiert und in sein programm einfügt und hofft das es geht, aber ich weiß es einfach nicht besser. ich weiß nicht wie ich die funktionen zum speichern in meinem programm intelligent verwenden soll. habe bei google auch nichts gefunden und was in meinem qt buch steht hilft mir auch nicht besonders weiter. hier sind code und fehler.

Code: Alles auswählen

void Image::on_pushButton_loadImage_clicked()
{
	QImage image(256, 256, QImage::Format_RGB32);
	for (int x = 0; x<256; x++)
	{
	image.setPixel(x, 120, qRgb(255, 0, 0));
	}
	ui.label_Image->setPixmap(QPixmap::fromImage(image));
	
	QImage image;
    QByteArray ba;
    QBuffer buffer(&ba);
	buffer.open(QIODevice::WriteOnly);
    image.save(&buffer, "png"); // writes image into ba in PNG format
}
Fehler:
Fehler 1 error C2086: 'QImage image': Neudefinition Zeile: 24
Fehler 2 error C2065: 'QBuffer': nichtdeklarierter Bezeichner Zeile: 26
Fehler 3 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'buffer' Zeile: 26
Fehler 4 error C3861: "buffer": Bezeichner wurde nicht gefunden. Zeile: 26
Fehler 5 error C2065: 'buffer': nichtdeklarierter Bezeichner Zeile: 27
Fehler 6 error C2228: Links von ".open" muss sich eine Klasse/Struktur/Union befinden. Zeile: 27
Fehler 7 error C2065: 'buffer': nichtdeklarierter Bezeichner Zeile: 28
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Was ist an der Fehlermeldung so schwer verständlich?

QImage 2x definiert.

Header von QBuffer nicht eingebunden.

Und falls das mal funktionieren sollte verschmeist du die Daten eh wieder, da du dem Link von pfid nicht mal gelesen hast.
Moritz
Beiträge: 16
Registriert: 26. März 2009 18:00
Wohnort: Aachen

Beitrag von Moritz »

ich weiß doch nur nicht wie ich das vernünftig in mein programm einbauen soll. wie gesagt ich kenne mich einfach noch nicht aus. und versuche mir im moment beispiele zu schaffen um an funktionierenden programmen nachzuvollziehen, was ich einigermaßen sinnvoll finde. was heißt denn hier verschmeißen? einfach das ich die daten nicht weiterbenutze? und ich habe den link gelesen nur vollziehe ich den assistant nicht so ganz nach, da ich die beispiele dort nicht ans laufen bekomme. kann man sich irgendwo funktionierende programme beschaffen um an diesen zu lernen? bis dann
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Warum das QImage image ein zweites mal definieren? Du hast doch die Daten eh schon im ersten QImage-Objekt, welches du auf das Label legst.
Und warum nicht sehen können dass es 2 Methoden "QImage::save" gibt?
Die zweite mit dem QIODevice, aber die erste ist doch VIIIEEEL angenehmer!
bool QImage::save ( const QString & fileName, const char * format = 0, int quality = -1 ) const

Saves the image to the file with the given fileName, using the given image file format and quality factor. If format is 0, QImage will attempt to guess the format by looking at fileName's suffix.

The quality factor must be in the range 0 to 100 or -1. Specify 0 to obtain small compressed files, 100 for large uncompressed files, and -1 (the default) to use the default settings.

Returns true if the image was successfully saved; otherwise returns false.
Und wenn man nicht weiter kommt mit einer Methode, kann man immer lesen was dazu in der Doku steht. Und wenn man mit den Parametern nicht klar kommt, kann man da fast immer drauf klicken, und sich die Doku dazu ansehen. Erfordert bissl Übung, aber wer einen Webbrowser bedienen kann sollte es mit der Zeit auch mit der Doku schaffen :)
Antworten