JPF Öffnen

Alles rund um die Programmierung mit Qt
Antworten
QtNewbie
Beiträge: 11
Registriert: 2. November 2009 11:10

JPF Öffnen

Beitrag von QtNewbie »

Hallo ihr,

ich habe ein Problem. Wie die Überschrift schon sagt möchte ich mit QImage ein .JPG Bild einladen, anzeigen und in einem Array speichern. Ich habe soetwas schon mit .raw Dateien gemacht war ganz einfach, deshalb dachte ich das wird schon kein großes Problem, aber ich stecke trotzdem fest. Im Qt Assistant steht das QImage JPG als Format schreiben und lesen kann. Perfekt.
QImage ( const QString & fileName, const char * format = 0 )
mit dieser Funktion sollte man es machen können oder? Klar erster Parameter ist der Filename wenn es im debug Ordner liegt auch ohne Pfad. Aber wie fütter ich den zweiten Parameter? Bisher habe ich die Funktion
QImage ( int width, int height, Format format ) genommen und da musste man bei Format QImage::Format_RGB32 eingeben. Damit bekomme ich aber nen error. Ich finde jedenfalls nirgens was man für const char * format = 0 eingeben muss damit er jpgs erkennt. Es wäre voll lieb wenn ihr ne idee hättet komme hier sonst absolut nicht weiter.

lg
Newbie
koko
Beiträge: 4
Registriert: 14. März 2009 14:23

Beitrag von koko »

Hi,

vielleicht wird einfach "JPG", "PNG" usw als String erwartet, wie in dieser Tabelle:
http://doc.trolltech.com/4.6/qimage.htm ... mage-files

Laut Doku kannst du auch einfach den zweiten Parameter des Konstruktors weglassen, und er versucht dann selbst das richtige Format zu finden.

http://doc.trolltech.com/4.6/qimage.html#QImage-10


koko
QtNewbie
Beiträge: 11
Registriert: 2. November 2009 11:10

Beitrag von QtNewbie »

Hallo,
vielen Dank für die schnelle antwort.
Ich habs sofort ausprobiert und du hattest recht der Konstruktor braucht den zweiten Param. nicht. habe folgendes gecodet.

Code: Alles auswählen

void OpenJpg::on_pushButton_loadImage_clicked()
{
	QImage image("Reg_0001.jpg");
	bool a = image.load("Reg_0001.jpg");
}
das kann er nun compilieren. ich dachte nun teste mal ob er das bild denn wirklich eingeladen hat. aber bei der bool a variable kommt false mit Breakpoint raus. was kann ich da jetzt machen und wie komme ich an die pixel des jpgs wenn ich das laden geschafft habe.
Curtis Newton
Beiträge: 122
Registriert: 11. Juni 2008 18:39

Beitrag von Curtis Newton »

QtNewbie hat geschrieben:Hallo,
vielen Dank für die schnelle antwort.
Ich habs sofort ausprobiert und du hattest recht der Konstruktor braucht den zweiten Param. nicht. habe folgendes gecodet.

Code: Alles auswählen

void OpenJpg::on_pushButton_loadImage_clicked()
{
	QImage image("Reg_0001.jpg");
	bool a = image.load("Reg_0001.jpg");
}
das kann er nun compilieren. ich dachte nun teste mal ob er das bild denn wirklich eingeladen hat. aber bei der bool a variable kommt false mit Breakpoint raus. was kann ich da jetzt machen und wie komme ich an die pixel des jpgs wenn ich das laden geschafft habe.
Werden die jpg-Plugins geladen? An die Pixel des jpgs kommst Du wie bei jeden anderen Bild ran (Stichwort scanLine).

C.
QtNewbie
Beiträge: 11
Registriert: 2. November 2009 11:10

Beitrag von QtNewbie »

hallo,

nochmals danke an alle. kannst du mir sagen wie man feststellt ob man die jpg plugins geladen hat? so auf anhieb findet man da bei dr google nix. oder wo bekommt man die dann her. ich habe mal für mich folgenden ansatz probiert.

Code: Alles auswählen

void OpenJpg::on_pushButton_loadImage_clicked()
{
	//QImage image("Reg_0001.jpg");
	//bool a = image.load("Reg_0001.jpg");
	//ui.label_Image->setPixmap(image);
	//mainLayout.addWidget(imageLabel);

	QFile DataFile = QFileDialog::getOpenFileName(NULL, tr("Open File"),
                     "/home",
                     tr("Images (*.png *.xpm *.jpg *.raw *.dcm)"));
	bool bFileOpen = DataFile.open(QIODevice::ReadOnly);
	if (!bFileOpen)
	{
		QMessageBox::critical(NULL, "Achtung", "Datei konnte nicht geöffnet werden");
		return;
	}
	m_pImage = new short[256*256];
	DataFile.read((char*)m_pImage, (256*256)*sizeof(short));
	loadData();
}

void OpenJpg::loadData()
{
	QImage image(256,256,QImage::Format_RGB32);
	int iGrayValue;
	for (int x = 0; x < 256; x= x + 1)
	{ 
		for (int y = 0; y< 256; y = y + 1)
			{	
				iGrayValue = m_pImage[x+y*256];
				image.setPixel(x,y, qRgb(iGrayValue,iGrayValue,iGrayValue));
			}
	}
	ui.label_Image->setPixmap(QPixmap::fromImage(image));
}
liefert folgendes Bild im Anhang. das ist allerdings nicht das was ich haben wollte meins sollte wie bild rechts aussehen. so hab ich s auf dem weg gemacht wie ich auch raw dateien geöffnet habe. echt verflixt. hoffe weiterhin auf hilfe
lg[/code]
Dateianhänge
Unbenannt.jpg
Unbenannt.jpg (37.64 KiB) 4594 mal betrachtet
Antworten