创建位图到屏幕尺寸保持率

时间:2014-09-07 14:55:49

标签: java android bitmap android-wallpaper

original_Bitmap to new_Bitmap

我正在尝试制作壁纸应用程序。在使用位图设置壁纸时遇到了大麻烦。我试着找出一个星期的答案。

我想将Bitmap设置为类似

的壁纸
  1. 避免裁剪
  2. scaleType:fit_center(对齐中心垂直,保持原始位图' s)
  3. 我该怎么做?我是否必须创建新的位图?

2 个答案:

答案 0 :(得分:0)

您需要根据屏幕尺寸调整图片大小以制作新的位图。

以下代码:

        Bitmap bitmapOrg = BitmapFactory.decodeFile(getApplicationContext()
                .getFilesDir().toString() + "/images/" + imagename);

        Log.e("imageheight", "" + bitmapOrg.getHeight());
        Log.e("imagewidth", "" + bitmapOrg.getWidth());

        double imageheight = bitmapOrg.getHeight();
        double imagewidth = bitmapOrg.getWidth();

        DisplayMetrics metrics = getApplicationContext().getResources()
                .getDisplayMetrics();
        double screenwidth = metrics.widthPixels;
        double sreeenheight = metrics.heightPixels;

        Log.e("screennwidth", "" + screenwidth);

        double newratio = screenwidth / imagewidth;

        Log.e("newratio", "" + newratio);

        double newratio1 = newratio * imageheight;
        double newratio2 = newratio * (imagewidth - 10); // 10 margin in width

        Log.e("newratio1", "" + newratio1);

        int mainheight = (int) newratio1;
        // int mainweidth = (int) imagewidth;
        int mainweidth = (int) newratio2;
        Log.e("Mainheight", "" + mainheight);
        Log.e("Mainweidtht", "" + mainweidth);

        // Here you will get the scaled bitmap
        Bitmap new_ScaledBitmap = Bitmap.createScaledBitmap(bitmapOrg, mainweidth,mainheight, true);
       // Use this bitmap as wallpaper

答案 1 :(得分:0)

要使位图适应屏幕而不剪切任何内容,首先必须确定宽高比是否大于屏幕的宽高比。如果图像宽高比大于屏幕宽高比,则意味着位图更高和/或不像屏幕那样宽,就像问题中的第二个图像一样。因此,您应该根据高度缩放图像,如下所示:

if(imageWidth/imageHeight > screenWidth/screenHeight){
    scaleFactor = screenHeight/imageHeight;
    imageXPosition = screenWidth/2-imageWidth/2;
    imageYPosition = 0;

否则应根据宽度缩放图像:

}else{
    scaleFactor = screenWidth/imageHeight;
    imageXPosition = 0;
    imageYPosition = screenWidth/2-imageWidth/2;
}

您可以使用这些值使用Matrix绘制位图,或创建尺寸为imageWidth*scaleFactorimageHeight*scaleFactor的缩放位图,并在imageXPosition |处绘制imageYPosition(这可以节省更多内存。