Android 根据用作纹理的位图原始尺寸的纵横比缩放矩形

Android 根据用作纹理的位图原始尺寸的纵横比缩放矩形,android,opengl-es,aspect-ratio,Android,Opengl Es,Aspect Ratio,我在Android中有一个矩形,我正在外部矩形中绘制另一个矩形。如何根据纹理位图原始尺寸的纵横比缩放RectFB 图片: 当尝试将缩放的矩形放置在另一个矩形中时,有两种可能:拟合和填充。第一个将留下一些未覆盖的边界,而第二个将填充整个矩形,但矩形的某些部分在矩形外不可见。在这两种情况下,矩形B的一个尺寸将与目标区域相同,这取决于比较两个矩形的比率和拟合或填充模式 像这样的事情应该可以做到: float pannelWidth, pannelHeight; float imageWidth, im

我在Android中有一个矩形,我正在外部矩形中绘制另一个矩形。如何根据纹理位图原始尺寸的纵横比缩放RectFB

图片:

当尝试将缩放的矩形放置在另一个矩形中时,有两种可能:拟合和填充。第一个将留下一些未覆盖的边界,而第二个将填充整个矩形,但矩形的某些部分在矩形外不可见。在这两种情况下,矩形B的一个尺寸将与目标区域相同,这取决于比较两个矩形的比率和拟合或填充模式

像这样的事情应该可以做到:

float pannelWidth, pannelHeight;
float imageWidth, imageHeight;

float pannelRatio = pannelWidth/pannelHeight;
float imageRatio = imageWidth/imageHeight;

float outputWidth, outputHeight;

bool useFit = true;//set whatever

if(pannelRatio > imageRatio) {
    if(useFit) {
        //fit in width (width scale is 1.0)
        outputWidth = pannelWidth;
        outputHeight = pannelWidth*(imageHeight/imageWidth);
    }
    else {
        //fill in height (height scale is 1.0)
        outputWidth = pannelHeight*(imageWidth/imageHeight);
        outputHeight = pannelHeight;
    }

}
else if(pannelRatio < imageRatio) {
    if(useFit) {
        //fit in height (height scale is 1.0)
        outputWidth = pannelHeight*(imageWidth/imageHeight);
        outputHeight = pannelHeight;
    }
    else {
        //fill in width (width scale is 1.0)
        outputWidth = pannelWidth;
        outputHeight = pannelWidth*(imageHeight/imageWidth);
    }
}
else {
    outputWidth = pannelWidth;
    outputHeight = pannelHeight;
}