QImage Zugriffsverletzung beim Laden eines Bitmaps
Verfasst: 26. April 2010 12:04
Hi, versuche grade auf ein Bitmap zuzugreifen, verwende dafür QImage. Ich habe jetzt allerdings das Problem, dass er scheinbar beim auslesen der Daten Probleme hat, leider weiß ich nicht genau woran das liegt. Interessant ist, dass das Problem jeweils an einer anderen Stelle auftritt, abhängig davon ob ich eine direkte Variable oder eine Pointer verwende. Unter beiden Versionen hängt er allerdings irgendwo innerhalb der QImage Routine mit einer Zugriffsverletzung.
Hier mal der Code und die jeweilige Stelle wo er Unterbricht:
Unterbrechung im QImage in der Zeile:
Image_Converter converter = *converterPtr;
Bei der Version mit Pointer sieht das ganze so aus:
Unterbrechung im QImage in der Zeile:
d = image.d;
Die Datei ist vorhanden und er zeigt ja auch überall an das sie nicht leer ist, die Unterbrechungen sind die selben wenn ich das Format weglasse und den default-Wert verwende.
In beiden Fällen ist es eine Zugriffsverletzung beim Schreiben.
Hier mal der Code und die jeweilige Stelle wo er Unterbricht:
Code: Alles auswählen
QImage* displayWidget::loadBMP(QString filename){
if(filename == "")
return NULL;
QFile f(filename);
if(!f.open(QIODevice::ReadOnly))
return NULL;
f.close();
QImage img;
if(img.load(filename, "BMP"))
return &img;
else return NULL;
}
Image_Converter converter = *converterPtr;
Code: Alles auswählen
QImage QImage::convertToFormat(Format format, Qt::ImageConversionFlags flags) const
{
if (!d || d->format == format)
return *this;
if (format == Format_Invalid || d->format == Format_Invalid)
return QImage();
const Image_Converter *converterPtr = &converter_map[d->format][format];
Image_Converter converter = *converterPtr;
if (converter) {
QImage image(d->width, d->height, format);
QIMAGE_SANITYCHECK_MEMORY(image);
image.setDotsPerMeterY(dotsPerMeterY());
image.setDotsPerMeterX(dotsPerMeterX());
[...]
Code: Alles auswählen
QImage* displayWidget::loadBMP(QString filename){
if(filename == "")
return NULL;
QFile f(filename);
if(!f.open(QIODevice::ReadOnly))
return NULL;
f.close();
QImage* img;
if(img->load(filename, "BMP"))
return img;
else return NULL;
}d = image.d;
Code: Alles auswählen
QImage &QImage::operator=(const QImage &image)
{
if (image.d)
image.d->ref.ref();
if (d && !d->ref.deref())
delete d;
d = image.d;
return *this;
}In beiden Fällen ist es eine Zugriffsverletzung beim Schreiben.