1
は次のとおりです。glReadPixelsは非正方形の幅と高さでは機能しませんか?私のビューポート上で現在何
はここに私の輸出画像法です。
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);
}
使用時800×800、(青になってきて黄色気にしないでください)
使用200×200、
でも使用200x100、
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);
}
まずはすべての幅が高さになり、画像が間違っています。それは配列のインデックスのシフトの問題のように見えますが、私は割り当てがなぜコードによって幅と高さに応じて変わるのか理解できませんでした。
私は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);
}
画像が正しく見えますか?しかし、幅と高さは依然としてスワップしていましたか?
あなたは "180x200" と言うが、スクリーンショットは "190x200" を言います。どうしたの? –
ああ、ミスタイプです。スクリーンショットの情報は正しいです。 – 5argon
ちょっと待って、実際には「高さ」に190を入れましたが、なぜそれが幅として出てきましたか?たぶんこれが問題です。 – 5argon