0

我正在我的应用程序中使用相机拍照,并将照片通过电子邮件发送到某个电子邮件地址。现在我希望通过电子邮件发送的图片的物理尺寸为 10 厘米宽和 8 厘米高。我尝试过的代码如下:

1)在xml中声明一个imageview,如下所示:

 <ImageView
    android:id="@+id/imageView3"
    android:layout_width="100mm"
    android:layout_height="80mm"
    android:src="@drawable/ic_launcher" />

2)及以后在java文件中:

 final BitmapFactory.Options opts = new BitmapFactory.Options ();
    opts.inSampleSize = 2;
    final ImageView thumbNail = (ImageView)findViewById(R.id.imageView3);
    thumbNail.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

        @Override
        public void onGlobalLayout() {
            // TODO Auto-generated method stub
            thumbNail.setImageBitmap(Bitmap.createScaledBitmap (BitmapFactory.decodeFile(myPhoto.getPath(), opts), thumbNail.getWidth(), thumbNail.getHeight(), false));
        }
    });

根据文档,生成的位图应具有 10 厘米的宽度和 8 厘米的高度。但在 xml 文件中,这些行有警告

    android:layout_width="100mm"
    android:layout_height="80mm"
     Avoid using "mm" as units (it does not work accurately on all devices); use "dp" instead.

所以我不知道我应该做什么。所以请给我一个适用于所有设备的解决方案。

4

2 回答 2

1

这个?

public static int mm2pixels(int val, Context current) {
    DisplayMetrics metrics = current.getResources().getDisplayMetrics();
    return (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM, val, metrics);
}
于 2017-02-02T07:07:25.737 回答
0

我使用了 WarrenFaiths 的说明并提出了以下解决方案。

  DisplayMetrics metrics = activity.getResources().getDisplayMetrics();
  totalDIP_X = metrics.xdpi;
  totalDIP_Y = metrics.ydpi;

totalDIP_X 和 totalDIP_Y 表示电话上每英寸的 DIP 总数。

所以如果你想让手机上的位图是5cms*5cms,相当于1.968inch*1.968inch,我们应该使用下面的代码。

  imageView1.setImageBitmap(Bitmap.createScaledBitmap (aBitmap, (int)(1.968*totalDIP_X), (int)(1.968*totalDIP_Y), false));
于 2013-07-04T13:38:49.157 回答