Datei einlesen und verwenden ??
Datei einlesen und verwenden ??
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
warum nicht mit:
zum 2 Punkt: Ich weiss nicht wie du 8 von 12bit unterscheiden kannst beim Datei auswählen (das gehts nur übers format).Allerdings kriegst du es doch beim einlesen raus oder?
Achja BITTE Codetags benutzen
Code: Alles auswählen
QFile DataFile(QFileDialog::getOpenFileName(this, tr("Open File"),
"/home",
tr("Images (*.png *.xpm *.jpg)")));Achja BITTE Codetags benutzen
Ich glaub er will einfach statt
das
Und mit der Liste musst du dir halt die einzelnen Dateinamen geben lassen (per index oder iterator), und dann einzeln verarbeiten.
Grüße
Franz
Code: Alles auswählen
QFile DataFile(qApp->applicationDirPath().append("/8bit.raw"));Code: Alles auswählen
QFile DataFile(qApp->applicationDirPath().append(fileName));Grüße
Franz
Naja dann ist man aber immer an den App Pfad gebunden.... ist ja dann nicht mehr so schön 
Man kann aber auch das hier machen :
BTW:
Der Value eines 8bit Grauwertes kann max 255 sein (Wertebereich der Pixel zwischen 0 .. 255) //S/W
Die Zeilen hier erachte ich mal für falsch....
Man kann aber auch das hier machen :
Code: Alles auswählen
QFile DataFile(QFileDialog::getOpenFileName(this, tr("Open File"),
qApp->applicationDirPath(),
tr("Images (*.png *.xpm *.jpg)")));BTW:
Der Value eines 8bit Grauwertes kann max 255 sein (Wertebereich der Pixel zwischen 0 .. 255) //S/W
Die Zeilen hier erachte ich mal für falsch....
Code: Alles auswählen
int iGrayValue = m_pImage[x+y*512];
image.setPixel(x, y, qRgb(iGrayValue, iGrayValue, iGrayValue));Einfacher Viewer:
Code: Alles auswählen
void Dialog::on_pushButton_clicked()
{
QImage img(QFileDialog::getOpenFileName(this, tr("Open File"),
qApp->applicationDirPath(),
tr("Images (*.png *.xpm *.jpg)")));
ui->label->setPixmap( QPixmap::fromImage(img) );
ui->label->adjustSize();
this->adjustSize();
this->adjustSize();
}