像素,密度,屏幕分辨率 - 表面视图上的位图?

时间:2015-02-17 20:34:17

标签: android canvas bitmap

我想知道是否有人可以帮助我在我的计划方面让我的逻辑正确。 我在其画布上有一个表面视图,我正在绘制一个位图。 我发现这段编码可以解决不同分辨率和屏幕密度的位图大小问题。

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
   Display display = wm.getDefaultDisplay();

    DisplayMetrics metrics = new DisplayMetrics();
    display.getMetrics(metrics);
        Point size = new Point();
        display.getSize(size);
        Log.e("XXX", "Display w/h: " +size.x + "/" + size.y);

    bmp1 = BitmapFactory.decodeResource(getResources(), R.drawable.speedo); 
    int width = bmp1.getWidth();
    int height = bmp1.getHeight();
    Log.e("XXX", "w/h: " + width + "/" + height);

    float scaleWidth = metrics.scaledDensity;
    float scaleHeight = metrics.scaledDensity;
    Log.e("XXX", "w/h: " + scaleWidth + "/" + scaleHeight);

    // create a matrix for the manipulation
    Matrix matrix = new Matrix();
    // resize the bit map
    matrix.postScale(scaleWidth, scaleHeight);

    // recreate the new Bitmap
    bmp2 = Bitmap.createBitmap(bmp1, 0, 0, width, height, matrix, true);

我在Canvas上绘制后,已在3台设备上记录了我的值。

  1. GenyMotion仿真器(598x360)[scale1.0]
  2. Lg Optimus2x(800x480)[scale1.5]
  3. OnePlus1(1980x1080)[scale3.0]
  4. 我制作的图像(位图)(在Adobe中)为800 x 179像素@ 72像素/英寸

    GENYMOTION中的

    =它出现在267 x 60

    在Lg =它出现在400 x 90

    在OnePlus1中=出现在800 x 179

    我知道尺寸是如何根据尺度而变化的,但是在1plus1中虽然说长度为800,但它比屏幕长,即1980年!怎么可能? 有人可以向我解释究竟发生了什么的逻辑吗?

1 个答案:

答案 0 :(得分:0)

是的,我发现了原因: - 因为我的RnD错误。

创建bmp2然后绘制后,我没有测量它。所以它实际上是800x3 = 2400,这是> 1980年(屏幕长度)!