Pixel setzen?
Pixel setzen?
Hallo,
Ich habe gerade ein kleines QT Verständnis, bzw. verständigungs Problem.
1. Ich lade eine Datei in einen Array. klappt wunderbar.
Anmerkung: Die Datei ist Byte orientiert.
2. Die einzelnen Bytes sind Pixel. Das Format ist 332 (RGB). Also z.B. 111 000 00 würde ein rotes Pixel darstellen.
4. Das Bild ist 80x60Pixel groß.
3. Jetzt möchte ich mir diese Pixel halt grafisch anzeigen lassen. Im Prinzip einfach die Pixel je nach Wert setzten.
Was mich verwirrt ist die unglaubliche Fülle an Befehlen Konfigurationen, Vorwissen zum Aufbau (nebst Farbtabellen, Header, usw. usw.) hab ich alles nicht! Ich hab nur Farbwerte und die größe.
Es geht schon mit dem Ausgabe Modul los. Soll ich Label nehmen? Was anderes geht nämlich nicht, bzw. ist nicht auswählbar. Ich hab in verschiedenen Threads gelesen das irgendein Pixel-label oder so verwendet wird? Qimage vielleicht, aber auch das gibt es als Widget nicht auswählbar, nur label. Da kann man dann auch wohl eine Pixelmap als Hintergrund laden. Ja ne, ich will Pixel setzten!
Hab dann "QImage::setPixel(int x, int y, uint index_or_rgb)" im Assistant nachgeschlagen, puh. Also, ääääh, was? Hunderte von mir nichts sagende Einstellungen, sobald es etwas konkreter wird, werden .bmp oder andere Grafikdateien geladen.
Kann mir vielleicht jemand auf die Sprünge helfen? Das kann doch nicht so schwer sein...oder
Gruß
Ralf
Ich habe gerade ein kleines QT Verständnis, bzw. verständigungs Problem.
1. Ich lade eine Datei in einen Array. klappt wunderbar.
Anmerkung: Die Datei ist Byte orientiert.
2. Die einzelnen Bytes sind Pixel. Das Format ist 332 (RGB). Also z.B. 111 000 00 würde ein rotes Pixel darstellen.
4. Das Bild ist 80x60Pixel groß.
3. Jetzt möchte ich mir diese Pixel halt grafisch anzeigen lassen. Im Prinzip einfach die Pixel je nach Wert setzten.
Was mich verwirrt ist die unglaubliche Fülle an Befehlen Konfigurationen, Vorwissen zum Aufbau (nebst Farbtabellen, Header, usw. usw.) hab ich alles nicht! Ich hab nur Farbwerte und die größe.
Es geht schon mit dem Ausgabe Modul los. Soll ich Label nehmen? Was anderes geht nämlich nicht, bzw. ist nicht auswählbar. Ich hab in verschiedenen Threads gelesen das irgendein Pixel-label oder so verwendet wird? Qimage vielleicht, aber auch das gibt es als Widget nicht auswählbar, nur label. Da kann man dann auch wohl eine Pixelmap als Hintergrund laden. Ja ne, ich will Pixel setzten!
Hab dann "QImage::setPixel(int x, int y, uint index_or_rgb)" im Assistant nachgeschlagen, puh. Also, ääääh, was? Hunderte von mir nichts sagende Einstellungen, sobald es etwas konkreter wird, werden .bmp oder andere Grafikdateien geladen.
Kann mir vielleicht jemand auf die Sprünge helfen? Das kann doch nicht so schwer sein...oder
Gruß
Ralf
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Hm,... die Antwort analysier ich gleich nochmal genauer, bisher hab ich halt das hier:
Code: Alles auswählen
void Bild_viewer::on_pushButton_datei_open_clicked()
{
QString fileName;
fileName = QFileDialog::getOpenFileName(this,
tr("Öffnen"),"");
QFile file(fileName);
if (file.open(QFile::ReadOnly)) {
char buf[10240];
qint64 lineLength = file.read(buf, sizeof(buf));
int Linie;
int Spalte;
for (Linie=0;Linie<59;Linie++){
for(Spalte=0;Spalte<79;Spalte++){
QImage::setPixel(Spalte, Linie); //..,uint index_or_rgb??
}
}
}
}
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Ich würde sagen - da ist wohl erstmal ein C++-Buch angebracht.
QImage::setPixel() ist nun wirklich keine statische Funktion... ein QImage-Objekt sollte es schon sein. Und wenn Du erst ein QImage-Objekt erzeugt hast, sollte wohl auch klar sein ob was mit 'uint index_or_rgb' gemeint ist.
QImage Doku
QImage::setPixel() ist nun wirklich keine statische Funktion... ein QImage-Objekt sollte es schon sein. Und wenn Du erst ein QImage-Objekt erzeugt hast, sollte wohl auch klar sein ob was mit 'uint index_or_rgb' gemeint ist.
QImage Doku
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Danke für Deine Antwort.
Das QImage stand da nur als Beispiel für das was ich nicht kann, klar ist das noch gar nichts.
Also erstmal ein QImage Objekt erzeugen. Jetzt komme ich aber schon durcheinander:
Constant: QImage::Format_RGB32
Value: 4
Erklärung: The image is stored using a 32-bit RGB format (0xffRRGGBB).
So weit so gut, aber was bedeutet nun "0xffRRGGBB"?
Was soll dieses 0xff (ja, Hex255 schon klar, nur in diesem Zusammenhang nicht?)
Ist damit gemeint: 0xff(Anfang 1Byte) tja, und dann??
Vielleicht: 8Bit(R), 8Bit(R), 8Bit(G), 8Bit(G) tja, ende mit 32bit...
oder 4Byte(R), 4Byte(R) usw. das ergäbe ne krasse Größe...
Versteh ich nicht?!?
Das QImage stand da nur als Beispiel für das was ich nicht kann, klar ist das noch gar nichts.
Also erstmal ein QImage Objekt erzeugen. Jetzt komme ich aber schon durcheinander:
Constant: QImage::Format_RGB32
Value: 4
Erklärung: The image is stored using a 32-bit RGB format (0xffRRGGBB).
So weit so gut, aber was bedeutet nun "0xffRRGGBB"?
Was soll dieses 0xff (ja, Hex255 schon klar, nur in diesem Zusammenhang nicht?)
Ist damit gemeint: 0xff(Anfang 1Byte) tja, und dann??
Vielleicht: 8Bit(R), 8Bit(R), 8Bit(G), 8Bit(G) tja, ende mit 32bit...
oder 4Byte(R), 4Byte(R) usw. das ergäbe ne krasse Größe...
Versteh ich nicht?!?
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
qRGB ist wie nahezu überall 32 Bit.
und das ff ist das Alpha-Kanal. Siehe auch http://doc.trolltech.com/4.3/qcolor.html
und das ff ist das Alpha-Kanal. Siehe auch http://doc.trolltech.com/4.3/qcolor.html
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Nö, sorry, ist es nicht, ich komme aus der uC Welt und da ist es überall nicht 32 Bit
"ff ist das Alpha-Kanal" Alpha Kanal? Ich habe 3Bit für Rot 3Bit für Grün und 2 Bit für Blau, nicht mehr und nicht weniger.
Ich kann das beliebig Umrechnen, kein Problem, von mir aus auch auf 32 Bit, aber dazu muß ich das Format verstehen. Die Site die Du verlinkt hast beschreibt sehr schön sehr komplexe Verfahren und verschiedenste Farb Modi. Ich habe aber nur.... nicht schon wieder.
Die initalisierung des Objektes sieht im übrigen nun so aus:
scheint er so auch zu nehmen.
Set Pix so:
scheint er auch so zu nehmen.
Fehlt noch die Umrechnung von 332-RGB in irgendein kryptisches 32-Bit RGB Format und das schreiben in das Label.
In das Label schreiben klappt leider noch nicht. Habs so probiert:
"ff ist das Alpha-Kanal" Alpha Kanal? Ich habe 3Bit für Rot 3Bit für Grün und 2 Bit für Blau, nicht mehr und nicht weniger.
Ich kann das beliebig Umrechnen, kein Problem, von mir aus auch auf 32 Bit, aber dazu muß ich das Format verstehen. Die Site die Du verlinkt hast beschreibt sehr schön sehr komplexe Verfahren und verschiedenste Farb Modi. Ich habe aber nur.... nicht schon wieder.
Die initalisierung des Objektes sieht im übrigen nun so aus:
Code: Alles auswählen
QImage Bild;
Bild.QImage(80,60,4);
Set Pix so:
Code: Alles auswählen
Bild.setPixel(Spalte,Linie,4);
Fehlt noch die Umrechnung von 332-RGB in irgendein kryptisches 32-Bit RGB Format und das schreiben in das Label.
In das Label schreiben klappt leider noch nicht. Habs so probiert:
Code: Alles auswählen
ui.label_pixmap.pixmap(Bild);
[\code]
Wobei der erste Teil schon richtig ist, also "ui.label_pixmap" und der hintere Teil voll daneben... hmmm
Gruß
Ralf-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Steht doch alles dort - rgb - also 0xffrrggbb - was ist da so schwer umzurechnen? Ein ganz normaler ARGB-32Bit Integer.
Ich würde außerdem das Qt-Tutorial empfehlen bevor Du hier weitermachst.
Ich würde außerdem das Qt-Tutorial empfehlen bevor Du hier weitermachst.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Was so schwer umzurechnen ist?? Hab ich doch geschrieben:
Zur Erinnerung von vor 10Minuten:
So weit so gut, aber was bedeutet nun "0xffRRGGBB"?
Was soll dieses 0xff (ja, Hex255 schon klar, nur in diesem Zusammenhang nicht?)
Ist damit gemeint: 0xff(Anfang 1Byte) tja, und dann??
Vielleicht: 8Bit(R), 8Bit(R), 8Bit(G), 8Bit(G) tja, ende mit 32bit...
oder 4Byte(R), 4Byte(R) usw. das ergäbe ne krasse Größe...
Zur Erinnerung von vor 10Minuten:
So weit so gut, aber was bedeutet nun "0xffRRGGBB"?
Was soll dieses 0xff (ja, Hex255 schon klar, nur in diesem Zusammenhang nicht?)
Ist damit gemeint: 0xff(Anfang 1Byte) tja, und dann??
Vielleicht: 8Bit(R), 8Bit(R), 8Bit(G), 8Bit(G) tja, ende mit 32bit...
oder 4Byte(R), 4Byte(R) usw. das ergäbe ne krasse Größe...
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Ok - es ist ein 32-Bit Integer und Standard ARGB - also 8 Byte Alpha, 8 Byte Rot, 8 Byte Grün und 8 Byte Blau - so wie jedes 32Bit - Pixel auf einem handelsüblichen PC heute aufgebaut ist. Und so wie es auch in der Qt-Doku steht (http://doc.trolltech.com/4.3/qcolor.html#QRgb-typedef)
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung