Seite 1 von 1

'X Error: BadRequest'-Fehler bei Ausführung

Verfasst: 20. Oktober 2006 14:12
von Soc
hallo

ich habe ein Programm geschrieben, welches von einem anderen PC Bilder erhält, und diese dann anzeigt.

Prinzip: Socket aufbauen, auf Daten warten, wenn das Bild da ist, das Bild ein bisschen manipulieren (zB. einzelne Punkte im Bild einfärben) und anzeigen.

Idee: ImageViewer kreiieren (von QWidget abgeleitet). Dieser beinhaltet verschiedene Labels (Beschriftung / Bilder):

Code: Alles auswählen

ImageViewer::ImageViewer(QWidget* parent, const char* name, WFlags fl )
    : QMainWindow( parent, name, fl )
{
    if ( !name )
	setName( "ImageViewer" );
    setCentralWidget( new QWidget( this, "qt_central_widget" ) );
    Text1Label = new QLabel(centralWidget(), "Text1");
    Text1Label->setText("Originalbild mit Kanten");
    Text1Label->setGeometry(QRect(10,0,320,20));
    PictureLabel = new QLabel( centralWidget(), "PictureLabel" );
    PictureLabel->setGeometry( QRect( 10, 20, 320, 200 ) );
    PictureLabel->setPixmap( QPixmap::fromMimeSource( "testimage.ppm" ) );
    PictureLabel->setScaledContents( TRUE );
...
danach einen Thread startet welcher den Socket beinhaltet...
In diesem wird das Bild vom PORT gelesen und in ein image gespeichert.
Um die einzuzeichnenden Punkte berechnen zu können wird aus diesem Image ein Binärbild erstellt und dann die Punkte bestimmt. (ist im Code nicht enthalten...)

Das Bild wird dann einem Pixmap übergeben und in diesem Pixmap die Pixel gesetzt.

Code: Alles auswählen

void QUDPthread::run(){
	sd = new QSocketDevice(QSocketDevice::Datagram);
	ha = new QHostAddress();
	sd->bind(ha->ip4Addr(), PORT);
	image = new QImage();
	image1 = new QImage();
	pm = new QPixmap();

	while(1) {
		rc = 0;
		while(sd -> bytesAvailable()){
			usleep(100);
			rc = sd->readBlock(buffer,sd -> bytesAvailable());
		}
		if(rc > 0){
			datei = open("testimage.ppm",O_WRONLY|O_CREAT,0700);
			write(datei,&buffer,rc);
			close(datei);
			image->load("testimage.ppm", "PPM");

// Binärbild erstellen, Punkte berechnen etc...

			image1->load("white.ppm", "PPM");
			for(y=0; y<WINDOWHEIGHT;y++){
				for(x=0; x<WINDOWWIDTH;x++){
					if(bpicture->bin_pic[y*WINDOWWIDTH+x]==0x00)
						image1->setPixel(x,y,0);
				}
			}
			pm->convertFromImage(*image1, QPixmap::Color);
			image1->reset();
			Iv->Binary1Label->setPixmap(*pm);
		}
		usleep(1000);
	}
}

Code: Alles auswählen

int main( int argc, char ** argv )
{
	QUDPthread UDPThread;
    QApplication a( argc, argv );
	ImageViewer Iv;

	a.setMainWidget(&Iv);
	Iv.show();
	UDPThread.init(&Iv);
	UDPThread.start();
	a.exec();

    	return 0;
}
Im Grunde funktioniert das Programm ohne Probleme.

Ab und an tritt ein Fehler auf. Manchmal nach 1 min, manchmal nach 5 min...

X Error: BadRequest (invalid request code or no such operation) 1
Major opcode: 0
Minor opcode: 0
In file kernel/qpixmap_x11.cpp, line 632: Out of memory
Segmentation fault


Weiss jemand woher der Fehler kommt?

System: suse 9.0, qt3.0

Gruss Soc