Zeit, was auf meinem Ansichtsfenster ist:glReadPixels funktioniert nicht mit nicht-quadratischen Breite und Höhe?
Hier meine Exportbild Methode.
void exportImage()
{
int width = 200;
int height = 100;
GLubyte *data = new GLubyte[4*width*height];
glReadPixels(0,0,width,height,GL_RGBA,GL_UNSIGNED_BYTE, data);
cv::Mat imageMat(width, height, CV_8UC4, data);
cv::flip(imageMat, imageMat, 0);
cv::imwrite("ok.jpg",imageMat);
}
Bei Verwendung 800x800,
Bei Verwendung 200x200,
Aber wenn Gebrauch 200x100, (bitte gelb immer blau nichts ausmacht)
void exportImage()
{
int width = 200;
int height = 100;
GLubyte *data = new GLubyte[4*width*height];
glReadPixels(0,0,width,height,GL_RGBA,GL_UNSIGNED_BYTE, data);
cv::Mat imageMat(width, height, CV_8UC4, data);
cv::flip(imageMat, imageMat, 0);
cv::imwrite("ok.jpg",imageMat);
}
Zunächst Breite wurde Höhe, und das Bild ist falsch. Es sieht aus wie Array-Index-Verschiebung Problem, aber ich konnte nicht verstehen, warum, weil die Zuordnung abhängig von der Breite und Höhe auch nach dem Code ändern sollte.
Als ich versuchte, Swapping Breite und Höhe in glReadPixels
:
void exportImage()
{
int width = 200;
int height = 100;
GLubyte *data = new GLubyte[4*width*height];
glReadPixels(0,0,height,width,GL_RGBA,GL_UNSIGNED_BYTE, data);
cv::Mat imageMat(width, height, CV_8UC4, data);
cv::flip(imageMat, imageMat, 0);
cv::imwrite("ok.jpg",imageMat);
}
Das Bild sieht richtig? Aber die Breite und Höhe noch ausgetauscht?
Sie sagen, "180x200", aber der Screenshot sagt "190x200". Was ist damit? –
Oh, es ist ein Tipp. Die Informationen im Screenshot sind korrekt. – 5argon
Moment mal, ich habe tatsächlich 190 in die "Höhe" gesetzt aber warum ist es so weit gekommen ..? Vielleicht ist das das Problem. – 5argon