Datei einlesen und verwenden ??
Verfasst: 7. Mai 2009 09:34
Hallo,
ich habe ein Problem Dateien einzulesen. Ich habe es bisher geschafft einzelne Dateien die in meinem Debug Verzeichniss liegen mit QFile einzulesen. Nun soll ich das Programm umschreiben sodass der User auswählen kann welche Dateien man einlesen kann. Ich habe es mit QFileDialog::getOpenFileName probiert bekomme aber nicht die Verbindung hin wie ich die eingelesene Datei dann auch verwenden kann. Ich möchte eine 8bit oder 12bit raw Datei einlesen, welche Grauwerte von Bildern gespeichert habe. Diese sind 512x512 groß. Ich möchte sie in einer Pixmap einlesen. aber das klappt ja. Ich schaffe halt nur die Verbindung nicht. Hoffe ihr könnt mir helfen
hier der Code für das einlesen einer 8bit raw Datei:
#include "ct.h"
#include <QFile>
#include <QApplication>
#include <QMessageBox>
#include <QStringList>
#include <QFileDialog>
#include <QListWidget>
CT::CT(QWidget *parent, Qt::WFlags flags)
: QWidget(parent, flags)
{
ui.setupUi(this);
m_pImage = new char[512*512]; // für 8bit
m_pImage2 = new int[512*512]; // für 12bit
}
CT::~CT()
{
delete[] m_pImage;
delete[] m_pImage2;
}
void CT::on_pushButton_loadImage_EightBit_clicked()
{
// HIER MUESSTE EINGEFUEGT WERDEN DAS MAN ZWISCHEN
// VERSCHIEDENEN DATEIEN AUSWAEHLEN KANN
// VERSUCH MIT:
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
"/home",
tr("Images (*.png *.xpm *.jpg)"));
// UND
QStringList files = QFileDialog::getOpenFileNames(
this,
"Select one or more files to open",
"/home",
"Images (*.png *.xpm *.jpg)");
//Meine Frage wie bekomme ich die eingelesene Datei da hin wo im //Moment "/8bit.raw steht" ????
QFile DataFile(qApp->applicationDirPath().append("/8bit.raw"));
bool bFileOpen = DataFile.open(QIODevice::ReadOnly);
if (!bFileOpen)
{
QMessageBox::critical(this, "ACHTUNG", "Datei konnte nicht geöffnet werden");
return;
}
int iSize = sizeof(char/*short*/);
int iNum = DataFile.read((char*)m_pImage, 512*512*iSize);
loadImage_EightBit();
}
void CT::loadImage_EightBit()
{
QImage image(512,512,QImage::Format_RGB32);
for (int x = 0; x<512; x++)
{
for (int y = 0; y<512; y++)
{
int iGrayValue = m_pImage[x+y*512];
image.setPixel(x, y, qRgb(iGrayValue, iGrayValue, iGrayValue));
}
}
ui.label_image_EightBit->setPixmap(QPixmap::fromImage(image));
}
Ich hoffe ich habe alles verständlich erklärt
Moritz
ich habe ein Problem Dateien einzulesen. Ich habe es bisher geschafft einzelne Dateien die in meinem Debug Verzeichniss liegen mit QFile einzulesen. Nun soll ich das Programm umschreiben sodass der User auswählen kann welche Dateien man einlesen kann. Ich habe es mit QFileDialog::getOpenFileName probiert bekomme aber nicht die Verbindung hin wie ich die eingelesene Datei dann auch verwenden kann. Ich möchte eine 8bit oder 12bit raw Datei einlesen, welche Grauwerte von Bildern gespeichert habe. Diese sind 512x512 groß. Ich möchte sie in einer Pixmap einlesen. aber das klappt ja. Ich schaffe halt nur die Verbindung nicht. Hoffe ihr könnt mir helfen
hier der Code für das einlesen einer 8bit raw Datei:
#include "ct.h"
#include <QFile>
#include <QApplication>
#include <QMessageBox>
#include <QStringList>
#include <QFileDialog>
#include <QListWidget>
CT::CT(QWidget *parent, Qt::WFlags flags)
: QWidget(parent, flags)
{
ui.setupUi(this);
m_pImage = new char[512*512]; // für 8bit
m_pImage2 = new int[512*512]; // für 12bit
}
CT::~CT()
{
delete[] m_pImage;
delete[] m_pImage2;
}
void CT::on_pushButton_loadImage_EightBit_clicked()
{
// HIER MUESSTE EINGEFUEGT WERDEN DAS MAN ZWISCHEN
// VERSCHIEDENEN DATEIEN AUSWAEHLEN KANN
// VERSUCH MIT:
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
"/home",
tr("Images (*.png *.xpm *.jpg)"));
// UND
QStringList files = QFileDialog::getOpenFileNames(
this,
"Select one or more files to open",
"/home",
"Images (*.png *.xpm *.jpg)");
//Meine Frage wie bekomme ich die eingelesene Datei da hin wo im //Moment "/8bit.raw steht" ????
QFile DataFile(qApp->applicationDirPath().append("/8bit.raw"));
bool bFileOpen = DataFile.open(QIODevice::ReadOnly);
if (!bFileOpen)
{
QMessageBox::critical(this, "ACHTUNG", "Datei konnte nicht geöffnet werden");
return;
}
int iSize = sizeof(char/*short*/);
int iNum = DataFile.read((char*)m_pImage, 512*512*iSize);
loadImage_EightBit();
}
void CT::loadImage_EightBit()
{
QImage image(512,512,QImage::Format_RGB32);
for (int x = 0; x<512; x++)
{
for (int y = 0; y<512; y++)
{
int iGrayValue = m_pImage[x+y*512];
image.setPixel(x, y, qRgb(iGrayValue, iGrayValue, iGrayValue));
}
}
ui.label_image_EightBit->setPixmap(QPixmap::fromImage(image));
}
Ich hoffe ich habe alles verständlich erklärt
Moritz