2013-05-16 80 views
0

我不明白android缩放是如何工作的,我使用矩阵和postScaled从尺寸540到960的位图,当我按1.067和1.023缩放时,结果是368。Android奇怪缩放

540 * 1.067 = 576 not 368 
960 * 1.023 = 981 not 682 

我无法理解缩放的逻辑,也值了它缩放从0.67到0.7,而不是1.067和1.023,我把在那里的变化。

有谁知道这是如何工作,并帮助我?

编辑:

public Bitmap resizeBitmap(Bitmap b){ 
    int width = b.getWidth(); 
    int height = b.getHeight(); 
    Matrix max = new Matrix(); 

    max.postScale(Vars.screenWidthMulti, Vars.screenHeightMulti); 
    Bitmap resizedBitmap = Bitmap.createBitmap(b, 0, 0, width, height, max, false); 
    return resizedBitmap; 

}

我不知道Bitmap.createScaledBitmap但如果它帮助它给出了相同的结果,所以我想它只是一个比例:继承人的,做缩放代码矩阵如下:/

编辑2:我发现在两个轴上缩放1.5f使得位图成为原始大小,现在通过除长度得到的缩放因子似乎与缩放矩阵使用的缩放因子不匹配我不知道如何将它们“转换”为它rk正确。

+1

你能发表你正在使用的实际代码吗? –

+0

只是一个疯狂的猜测,它可能会考虑“内在”的高度和宽度,而缩放。 –

+0

嗯,我对内在的宽度和高度不是很熟悉,但是从我读的内容来看,我认为它不会是这样。 –

回答

0

我发现矩阵缩放将放入的值除以1.5f,因此当缩放出奇怪时没有任何意义。下面有什么,我已经加入到功能,现在工作得很好(至少对于缩放1F及以上):

if(Vars.screenWidthMulti > 1 && Vars.screenWidthMulti != 1){ 
    scaleWidth = 1.5f+(Vars.screenWidthMulti-1)*1.5f; 
    scaleHeight = 1.5f+(Vars.screenHeightMulti-1)*1.5f; 
}else if(Vars.screenWidthMulti == 1){ 
    scaleWidth = 1f; 
    scaleHeight = 1f; 
}else if(Vars.screenWidthMulti < 1){ 
    scaleWidth = 1.5f -(Vars.screenWidthMulti*1.5f); 
    scaleHeight = 1.5f -(Vars.screenHeightMulti*1.5f); 
} 

注:我还没有测试低于1的比例又那么bevare。

0

试试这个tutorial,它显示了Matrix的基本用法。为了更好地为您提供帮助,我们需要查看您的源代码

+0

它基本上是相同的,据我所知,但它不适合我 –

+0

这里奇怪的是,它似乎为每个人都工作,它应该是正确的路,但它不能正常工作。 –