Seite 1 von 1
JPF Öffnen
Verfasst: 8. März 2010 07:13
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
Verfasst: 8. März 2010 08:00
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
Verfasst: 8. März 2010 08:26
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.
Verfasst: 8. März 2010 09:42
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.
Verfasst: 8. März 2010 10:02
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]