createBitmap使用哪种资源大小?

时间:2014-09-17 12:14:07

标签: android bitmap

我从图片的垂直部分创建了一个位图。但我只想显示20%的图片,并在资源文件夹中有多种尺寸。当我使用静态像素时,结果为假。

Bitmap SOURCE_BITMAP = BitmapFactory.decodeResource(getResources(), R.drawable.bg_main);
int START_Y = 15;
int HEIGHT_PX = 500;

// Crop bitmap
Bitmap newBitmap = Bitmap.createBitmap(SOURCE_BITMAP, 0, START_Y, SOURCE_BITMAP.getWidth(), HEIGHT_PX, null, false);

// Assign new bitmap to ImageView
ImageView image = (ImageView)findViewById(R.id.iv_bg);
image.setImageBitmap(newBitmap);

我的想法是将HEIGHT_PX分配给(int)(SOURCE_BITMAP.getHeight() * 0.2f);但是没有更好的方法来创建没有像素声明的位图(=相对于大小)?

1 个答案:

答案 0 :(得分:1)

  1. 您可以使用已加载的位图来查找多少20%,因为位图的大小已经包含密度信息(在xhdpi屏幕上,相同图像的像素数将是mdpi屏幕的两倍)< / LI>
  2. 或者您可以使用显示密度将绝对像素值转换为考虑屏幕逻辑密度的值。绝对像素值与160dpi屏幕上的mdpi位图有关。
  3. 要从像素15开始获取20%的位图,您可以这样做:

    // retrieve screen density
    Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
    DisplayMetrics metrics = new DisplayMetrics();
    display.getMetrics( metrics );
    float density = metrics.density;
    
    // read Bitmap from resources
    Bitmap source = BitmapFactory.decodeResource(getResources(), R.drawable.bg_main);
    int y = Math.round(15f * density);
    int height = Math.round(source.getHeight() * 0.2f);
    
    // Crop bitmap
    Bitmap newBitmap = Bitmap.createBitmap(source, 0, y, source.getWidth(), height);