Absturz von Qt bei QImage

Alles rund um die Programmierung mit Qt
Antworten
pospiech
Beiträge: 232
Registriert: 1. September 2006 17:20
Wohnort: Hannover

Absturz von Qt bei QImage

Beitrag von pospiech »

Hier die Aufrufliste:
QtGuid4.dll!6517cff0()
[Unten angegebene Rahmen sind möglicherweise nicht korrekt und/oder fehlen, keine Symbole geladen für QtGuid4.dll]
QtGuid4.dll!6517c0a8()
QtGuid4.dll!6517c030()
QBeamShapingd.exe!QImage::`scalar deleting destructor'() + 0x43 Bytes C++
> QBeamShapingd.exe!GratingVariationExternalMovie::SaveImage(QImage * image=0x00dce0d0, const int number=1) Zeile 275 + 0x12 Bytes C++
QBeamShapingd.exe!GratingVariationExternalMovie::createImages(const int i=44, const int number=1) Zeile 255 C++
QBeamShapingd.exe!GratingVariationExternalMovie::runThread() Zeile 236 C++
QBeamShapingd.exe!GratingVariationExternalMovie::run() Zeile 223 C++
in der Funktion

Code: Alles auswählen

	void SaveImage(QImage * image, const int number)
	{		
		QSize Monitor = QSize(1024,768);
		QImage  * saveimage = new QImage(Monitor.width(),Monitor.height(), QImage::Format_RGB32);
		saveimage->fill(QColor(0,0,0).rgb());

		QPainter painter( saveimage );
		int offsetx = (Monitor.width() - image->width())/2;
		painter.drawImage(offsetx, 0, *image );

		for (int j = 0; j < number; j++)
		{
			QString imagesavename = m_DirFileName + "-image-" + QString("%1").arg(m_Iteration) + ".png";
			saveimage->save(imagesavename,"PNG");
			emit signalNewImageSaved(m_Iteration);
			++m_Iteration;
		}
		delete saveimage;
	}
Was ich daran nicht verstehe ist, dass 143 Bilder gepspeichert wurden bevor der Fehler auftauchte. Muss ich nun etwas ändern?

Matthias
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Warum speicherst du n-mal das gleiche Bild?

Warum es crasht ist nicht ersichtlich - bau mal ein kleines Testcase damit wir es auch reproduzieren können.

/edit: Außerdem fehlt ein QPainter::end() sehe ich gerade
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
pospiech
Beiträge: 232
Registriert: 1. September 2006 17:20
Wohnort: Hannover

Beitrag von pospiech »

Christian81 hat geschrieben:Warum speicherst du n-mal das gleiche Bild?
Ich will einen Film erzeugen. Das mache ich mit Virtualdub. Ich würde es auch direkt aus dem C++ Programm erzeugen, wenn ich wüsste wie. Als animiertes gif kann ich es allerdings nicht machen, da es sich hier um >> 1k Bilder handelt.
Christian81 hat geschrieben: Warum es crasht ist nicht ersichtlich - bau mal ein kleines Testcase damit wir es auch reproduzieren können.
Ich habe den Pointer von saveimage weggenommen und es als normales Objekt Variable erzeugt, und seitdem habe ich kein Problem mehr. Kann es sein, dass Qt die save Anweisung intern threaded und es sein kann das die Objekte noch nicht gespeichert wurden bevor das delete aufgerufen wurde?

Sieht dann jetzt so aus:

Code: Alles auswählen

	void SaveImage(QImage * image, const int number)
	{		
		QSize Monitor = QSize(1024,768);
		QImage saveimage = QImage(Monitor.width(),Monitor.height(), QImage::Format_RGB32);
		saveimage.fill(QColor(0,0,0).rgb());

		QPainter painter( &saveimage );
		int offsetx = (Monitor.width() - image->width())/2;
		painter.drawImage(offsetx, 0, *image );

		for (int j = 0; j < number; j++)
		{
			QString imagesavename = m_DirFileName + "-movie-" + QString("%1").arg(m_Iteration) + ".png";
			saveimage.save(imagesavename,"PNG");
			emit signalNewImageSaved(m_Iteration);
			++m_Iteration;
		}
		painter.end();		
	}
Antworten