[gelöst] QImage auffüllen und anzeigen, geht nicht

Alles rund um die Programmierung mit Qt
Antworten
René
Beiträge: 75
Registriert: 15. August 2006 11:14
Kontaktdaten:

[gelöst] QImage auffüllen und anzeigen, geht nicht

Beitrag von René »

Hallo,

das Problem ist eigentlich ganz einfach.
Ich möchte ein Graustufenbild, also channel = 1, depth = 8 bit, erzeugen und das mit einem Graustufenwert auffüllen. Das mache ich so:

Code: Alles auswählen

QImage *qtImage = new QImage( 1024, 768, QImage::Format_Indexed8 ); // Anlegen eines Bildes auf dem Heap
qtImage->fill(200); // auffüllen mit hellem Grauton
Das Bild möchte ich mir nun ansehen und stelle es dazu auf einem QLabel dar:

Code: Alles auswählen

QLabel *label = new QLabel();
label->setPixmap( QPixmap::fromImage(*qtImage) );
label->show();
Wenn ich das Programm ausführe kommt folgender Fehler (VS2005):

Code: Alles auswählen

Debug Error!

Program: ...
Module: 4.1.4
File: d:\programme\qt4\4.1.4\src\corelib\global\qglobal.cpp
Line: 2087

ASSERT failure in QVector<T>::at: "index out of range", file d:\programme\qt4\4.1.4\src\corelib\tools\qvector.h, line 213

(Press Retry to debug the application)
Da werde ich nicht schlau draus. Das Programm funktioniert übrigens einwandfrei, wenn ich die Zeile 2 mit qtImage->fill(200) ersetze durch qtImage->load( QString("testGraustufenBild.png" ) );

Kann mir da jemand weiterhelfen ?
Zuletzt geändert von René am 17. August 2006 22:46, insgesamt 1-mal geändert.
dhcase
Beiträge: 132
Registriert: 10. Juni 2006 20:38

Beitrag von dhcase »

Den Fehler kann ich reproduzieren, wenn du z.B. QImage::Format_RGB32 verwendest dann funktioniert es... mehr weiss ich gerade auch nicht.
René
Beiträge: 75
Registriert: 15. August 2006 11:14
Kontaktdaten:

Beitrag von René »

Ok, Problem ist gelöst.

Ein 8bit Image ist bei Qt noch lange kein 1-Kanal Bild, es kann nachwievor aus vollem 32bit Farbraum (RGB+Alphakanal) schöpfen, nur kann es nur 256 verschiedene Farben maximal gleichzeitig besitzen, da diese in einer 8bit IndexTabelle gespeichert sind. Um ein Graustufenbild selbst zu erzeugen habe ich nun folgendes gemacht:

Code: Alles auswählen

QVector<QRgb> colorTable(256);
QRgb *data = colorTable.data();

for ( int i=0; i < 256; i++ )
  data[i] = qRgb(i, i, i);

qtImage->setColorTable(colorTable);
qtImage->fill(255);
Mit fill(255) erhält man dann weiß, mit fill(0) schwarz und mit Werten zwischen 0 und 255 alle Grautöne, die ein "echtes" 1-Kanal Graustufenbild besitzen kann.
Antworten