我在Android中有一个RectF(A),我在外部RectF(A)中绘制另一个矩形(B)。如何根据纹理(位图)的原始尺寸的纵横比来缩放RectF(B)?
答案 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;
}