[solved] Array mit Pixelwerten füllen und anzeigen lassen. Wo ist der Fehler
-
ich glaube daran lag es nicht. sondern dass array wird schlicht nicht gefüllt.
denn zb..... ... .. QImage video_pixmap(512, 256, QImage::Format_ARGB32); QPixmap setPixmap(QPixmap::fromImage(video_pixmap)); setPixmap.save("temp.png","PNG");erzeugt ein schwarzes image der angegebenen größe !
-
du musst 4 bytes weiter springen um die nechsten 4 bytes zu manipulieren
for( int i = 0; i < 512*256*4; i =+ 4 ) { pix[i*4] = 0; pix[i*4+1] = 66; pix[i*4+2] = 56; pix[i*4+3] = 234; }EDIT:
muss pix[... *4 ...] wircklich sein? vieleich ohne *4
-
lass mal delete[] pix; weg:
QImage::QImage ( uchar * data, int width, int height, Format format )
Constructs an image with the given width, height and format, that uses an existing memory buffer, data.
The buffer must remain valid throughout the life of the QImagedenn die QPixmap ist nur eine Referenz auf das QImage.
-
Ramsis schrieb:
du musst 4 bytes weiter springen um die nechsten 4 bytes zu manipulieren
for( int i = 0; i < 512*256*4; i =+ 4 ) { pix[i*4] = 0; pix[i*4+1] = 66; pix[i*4+2] = 56; pix[i*4+3] = 234; }EDIT:
muss pix[... *4 ...] wircklich sein? vieleich ohne *4ja das muss sein.
ich übergebe doch jedem Pixel vier Werte ---> ARGB !!
Wenn ich zb einstd::cout << pix[i*4] << std::end;einfüge wird mir nix ausgegeben, obwohl der Wert 0 angezeigt werden müsste
-
ich wäre ja schon zufrieden wenn ich überhaupt irgendwas sichtbar machen kann. sprich das image muss nicht gleich richtig dargestellt sein. aber ich kann das pix/array scheinbar nicht an QImage übergeben
-
DerBert schrieb:
Wenn ich zb ein
std::cout << pix[i*4] << std::end;einfüge wird mir nix ausgegeben, obwohl der Wert 0 angezeigt werden müsste
uchar wird vielleicht als ASCII-Zeichen interpretiert, also evtl einen cast auf int?
-
Badestrand schrieb:
uchar wird vielleicht als ASCII-Zeichen interpretiert, also evtl einen cast auf int?
Leider löst es das Problem auch nicht!
-
hellihjb schrieb:
lass mal delete[] pix; weg:
QImage::QImage ( uchar * data, int width, int height, Format format )
Constructs an image with the given width, height and format, that uses an existing memory buffer, data.
The buffer must remain valid throughout the life of the QImagedenn die QPixmap ist nur eine Referenz auf das QImage.
Das hat auch nichts gebracht und führt ebenso zum Speicherzugriffsfehler
-
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1223743792 (LWP 5616)]
0xb79de98a in QImage::QImage () from /usr/lib/libQtGui.so.4sagt der gdb...
-
data must be 32-bit aligned
Weiss Dein Compiler das?
-
hellihjb schrieb:
data must be 32-bit aligned
Weiss Dein Compiler das?
Huch, das könnte vielleicht helfen. Ich könnte nämlich nicht behaupten, dass er es weiss.
Wie gehe ich an die Sache ran? gibts hierfür ein gutes Beispiel: QImage::setColorTable?
-
Wie gehe ich an die Sache ran?
Die Adresse muss ohne Rest durch 4 teilbar sein.
Oder andersrum: Die unteren 2 Bit muessen 0 sein.
Generelles: Welches System nutzt Du, welchen Compiler setzt Du ein, welche Qt-Version nimmst Du und ist die mit dem gleichen Compiler uebersetzt worden?gibts hierfür ein gutes Beispiel: QImage::setColorTable?
dazu gibt's gar nicht viel zu sagen: Ist Dein QImage vom Typ "QImage::Format_Indexed8" ist jedes Byte ein Index in eine Farbpalette welcher die eigentlichen RGB-Anteile entnommen werden - siehe Indexed Colors.
-
hellihjb schrieb:
Die Adresse muss ohne Rest durch 4 teilbar sein.
Oder andersrum: Die unteren 2 Bit muessen 0 sein.
Generelles: Welches System nutzt Du, welchen Compiler setzt Du ein, welche Qt-Version nimmst Du und ist die mit dem gleichen Compiler uebersetzt worden?System: OpenSuse 10.2
Qt Version: 4.2.1
Compiler: GCC Version 4.1.2 2006115 prerelease
-
OpenSuse 10.3, Qt 4.3.3, GCC 4.2.1:
uchar *pix = new uchar[512*256*4]; mImage= new QImage(pix, 512, 256, QImage::Format_ARGB32); [...] paint.drawImage(0,0, *mImage);geht.
-
hellihjb schrieb:
OpenSuse 10.3, Qt 4.4.3, GCC 4.2.1:
uchar *pix = new uchar[512*256*4]; mImage= new QImage(pix, 512, 256, QImage::Format_ARGB32); [...] paint.drawImage(0,0, *mImage);geht.
Ich drehe durch! Bei mir geht es immer noch nicht.
Kannst du mir per Mail den File schicken mit dem du das Image erzeugst? Ich möchte mal testen ob ich den zum Laufen bringen kann.
Wenn du es überhaupt gecodet hast....
vorab danke