基于位图的原始尺寸的纵横比来缩放RectF,该尺寸用作纹理

时间:2014-07-10 16:28:44

标签: android opengl-es aspect-ratio

我在Android中有一个RectF(A),我在外部RectF(A)中绘制另一个矩形(B)。如何根据纹理(位图)的原始尺寸的纵横比来缩放RectF(B)?

图片: http://i.stack.imgur.com/hdm3h.jpg

1 个答案:

答案 0 :(得分:0)

当尝试将缩放的矩形放置在另一个矩形内时,您有两种可能性,适合和填充。第一个将留下一些未覆盖的边界,而第二个将填充整个矩形但是矩形的某些部分将不可见(在矩形之外)。在这两种情况下,矩形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;
}