タイトルが重複しているように聞こえることはわかっていますが、すべての検索から解決できない非常に特殊な状況がここにあると思います.
まず、特定のモニターに基づいて特別にサイズ設定された画像があります (はい、モニターです。ハンドヘルド デバイスの画面ではありません)。画像は、次の特定の設定に基づいています。
- 1600x900 20 インチ モニター、96ppi
ここで、すべての画像のサイズをミリメートル単位で指定する必要があります (これらは正方形の画像なので、高さ = 幅)。これらの特定の設定を決定要因として使用すると、1mm = 3.78px. だから、私の画像はこれを使ってサイズ調整されています。たとえば、画像を 65mm として表示するには、画像のサイズを 246px にします。これらの設定を使用して Photoshop でこれをテストしたところ、実際に画面上の画像を測定すると正しい結果が得られました。
そこで、私の Android アプリケーションで、これらの画像をロードしてImageViews
表示します。これは私が立ち往生しているところです。デバイスは MDPI デバイスです。画像を MDPIdrawables
フォルダーにロードすると、画像がモニターに大きく表示されます。上記の例を使用して、 を に変換しDrawable
、Bitmap
画像の高さをログにダンプします。これは正しく、246px を示していますが、何らかの理由で 65mm ではなく 85mm をはるかに超えています。
すべての画像を HDPI にロードすると (はい、mdpi デバイスであるため、Android OS によってサイズが調整されます)、画像の高さ (私の例を使用) は 164px としてダンプされ、約 50mm で表示されます。これはより説明しやすいのですが、Photoshop で行ったようにこれらの画像を表示する方法についてはまだ混乱しています。
だから私の質問はImageView
、画像の正確なサイズになるようにプログラムでサイズを変更する最良の方法は何ですか? 私の例では、246px の正方形の画像 (96ppi) が 65mm として表示されない理由を見つける必要があります。
これらImageView
はプログラムで生成されるため、次の 2 つのことを試しました。
ImageView
高さと幅を ( を使用してLayoutParams
) 画像の高さ (246px) に設定します。私はこの考えをしたのですが、本来WRAP_CONTENT
の行動をしていませんでした。- のサイズが画像と正確に一致
ImageView.ScaleType.CENTER
することを確認するために使用されます。ImageView
これらのどちらも出力に影響を与えていないようです。
更新:
デバイスが MDPI デバイスであることを確認しました。これは、1:1 の関係により、DPI から PX への変換 (またはその逆) が必要ないことを意味します。どこかでサイズが大きくなっていて、どこにあるのかわかりません。以下の回答のコメントで示したように、ドローアブルをプルしてビットマップに変換すると、作成した正確なピクセルの高さがプルされます。本来あるべきサイズ (65mm 対 85mm) とのサイズの違いのパーセンテージを把握し始めており、23.529% であることがわかりました。この値を差し引いてビットマップをスケーリングしていますが、イメージの品質が損なわれます。
私はあきらめ始めています。
私が利用しているデバイスは MK802III Rockchip デバイスです ( Amazon リンク)