[QT4] qpixmap.loadFromData - Problem
-
Hallo,
Ich muss (mehrere) Bilder aus (einer) Dateien einlesen und will diese mit
QImage.fromData (const uchar * data, int size, const char * format = 0 )
in ein QImage speichern & nachher anzeigen.
Dummerweise sagen mir die "Trolle" ;o) nicht, wie das Format in den "data" - array aussehen muss....
einfach nur rgb-Pixelwerte reinschreiben funzt nicht.und was kann man evtl. als "format" angeben ? Überall steht nur Null - gibt es Alternativen ?
Hat jemand schon mal sowas erfolgreich gelöst oder vielleicht eine Idee, die mir weiterhilft ?
Vielen Dank im Voraus
-
In welchem Bildformat hast du denn die Bilder? Für gängige Bildformate gibt es die load() Funktionen und auch die Konstruktoren, die einen Dateinamen bekommen.
-
Die bilddaten liegen als jeweils 4 Integer-Werte pro Pixel vor,
also R,G,B,alphaist irgend so ein komisches Bildformat, welches aus einer Delphi - Anwendung gespeichert wird - habe noch keine Parallelen zu vorhandenen Formaten feststellen können...
deshalb will ich es ja auch pixelweise auslesen.
mfg
hilby
-
Dann wirst du wohl den QImageReader um eine neues Format erweitern müssen.
-
das habe ich befürchtet...
- momentan lese ich alle Pixel einzeln aus und setzte sie im QImage.
nicht ganz die feine Art...
-
darf man fragen wie du die einzelne Pixel ins QImage packst?
MfG
-
das geht ganz einfach,bei 32bpp mit
void setPixel32bpp(QImage &image, int x, int y, uint red, uint green, uint blue) { uint *ptr = (uint *)image.scanLine(y)+x; *ptr = qRgb(red, green, blue); }
oder bei 8bpp ebend noch einfacher
void setPixel8bpp(QImage &image, int x, int y, unsigned char value) { *(image.scanLine(y)+x)= value; }
aso, ich nutz QT4...
:xmas1:
mfg hilby
-
thx für die Erklärung und wie muss ich die Farbe setzen damit das Bild ein Transparenten Hintergrund bekommt?
Wäre nett wenn du mir da auch noch helfen könntest.
P.S.: ich benutze auch Qt4MfG
-
Transparenten Hintergrund habe ich bisher nur mit PNG-Bildern verwendet, bei denen die Transparenz in den Bildinformationen drinsteht.
und zwar so:
QLabel* mainwidget = new QLabel(); QPixmap pm = QPixmap("hilby.png"); mainwidget->setPixmap(pm); mainwidget->setMask(pm.mask()); // Transparenz-Maske mainwidget->show();
probier das mal aus - sollte funktionieren.
mfg
hilby
-
hmm will ja kein bild laden soll ja intern ein bild "gemalt" werden.
Hier mal ein Test Code wie ich jetzt zur Zeit mache:QImage img(20,20, QImage::Format_Mono); img.fill(255); img.setPixel(2,2, 0); //.. algorithmus
Was ich noch nicht erwähnt habe das Bild hat nur zwei Farben Schwarz und Weiss deswegen ist das Format inmoment auch Mono.
Nun und jetzt will ich halt das der weisse Hintergrund halt Transparent haben.
Hab schon ein bissel mit ein paar Methoden von QImage herumexperimentiert aber selbsgemaltes transparent bekomm ich nicht hin.MfG
-
achso,
dann mach das doch lieber mit einem QPainter
und drawPoint() - der malt doch auf den Hintergrund.und den Painter kannst dann in ein Pixmap speichern, wenn Du eins brauchst...
schönes WE
hilby
-
versteh ich jetzt nicht will ja kein hintergrund malen brauch ja ein QImage später nur das das QImage halt ein transparenten hintergrund haben soll.
dir auch ein schönes WE
MfG
-
ok habs nun hinbekommen mittels qRgba(x,x,x,0) als Farbwert.
MfG
-
cool !