簡體   English   中英

非標准縱橫比格式的圖像裁剪

[英]Image cropping for non standard aspect ratio format

我面臨着渲染正確圖像的問題,其中部分邊緣被裁剪掉了。 我只能在非標准縱橫比中觀察到這一點。 在我的例子中,寬度為 1228,高度為 972,其縱橫比為 1.26。

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
glClearColor(0.0, 0.0, 0.0, 1.0);


float vx = float(m_uiImageWidth) / float(m_uiImageWidth);
float vy = float(m_uiImageHeight) / float(m_uiImageWidth);

glEnable(GL_TEXTURE_2D);
    
    glTexImage2D(GL_TEXTURE_2D, 0, 3, m_uiImageWidth, m_uiImageHeight, 0, GL_BGR, GL_UNSIGNED_BYTE, m_arrayBufferVS1);

    glLoadIdentity();

    glBindTexture(GL_TEXTURE_2D, m_texture);

    //glTranslatef(0.0f, 0.0f, -1.36f);
    glTranslatef(0.0f, 0.0f, -1.358f);

    //Normal
    if(m_bContextMenuNormal)
        glRotatef(180, 1, 0, 0);
    else if (m_bContextMenuRotate180 && m_bContextMenuMirror) 
    {
        //do nothing
    }
    else if(m_bContextMenuMirror)
        glRotatef(180, 0, 0, 0);
    else if(m_bContextMenuRotate180)
        glRotatef(180, 0, 1, 0);
    
    glScalef(1, -1, 1);

    glBegin(GL_QUADS);

        glTexCoord2f(1.0f, 1.0f); //top right
        glVertex3f(vx, vy, 0.0f);

        glTexCoord2f(0.0f, 1.0f); // left top
        glVertex3f(-vx, vy, 0.0f);

        glTexCoord2f(0.0f, 0.0f); //left bottom
        glVertex3f(-vx, -vy, 0.0f);

        glTexCoord2f(1.0f, 0.0f); //right bottom
        glVertex3f(vx, -vy, 0.0f);

    glEnd();

glDisable(GL_TEXTURE_2D);

這是我的代碼片段。 如果有人指出我所犯的錯誤並提出修復建議,那將是一個很大的幫助。

修改對glTexCoord2f的調用,在四個頂點之間插入十進制值,然后乘以圖像的寬度和高度,以計算要繪制到屏幕的紋理中每個像素的坐標。 如果要將縱橫比為 1.26 的圖像的左側和右側裁剪成正方形,您可以使用以下紋理坐標:

glTexCoord2f(1.0f - 0.13f, 1.0f); //top right
glTexCoord2f(0.0f + 0.13f, 1.0f); // left top
glTexCoord2f(0.0f + 0.13f, 0.0f); //left bottom
glTexCoord2f(1.0f - 0.13f, 0.0f); //right bottom

0.13 * 1228 為 159.64 像素,當您從 1228 像素寬紋理的任一側移除 159.64 像素時,圖像的剩余部分為 972 像素寬,這意味着繪制的像素的縱橫比將為 1:1,因為您的紋理是972 像素高

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM