我知道標題使它聽起來像是重複的,但我認爲我有一個非常特殊的情況,我無法從所有搜索中解決。根據圖像尺寸調整ImageViews的尺寸
首先,我有基於特定顯示器(是,顯示器,不是手持設備的屏幕)的特定尺寸的圖像。這些圖像都基於這些具體的設置:
- 1600x900的20" 顯示器在96ppi
現在,所有的圖像都必須以毫米爲單位的大小(它們是方形的圖像順便說一句,所以高度=寬度)。使用這些特定的設置作爲決定性因素,1mm = 3.78px。因此,我的圖像使用此尺寸進行設置。例如,對於圖像顯示爲65毫米,我將圖像尺寸調整爲246像素。設置和測量屏幕上的圖像確實出來正確
所以現在在我的Android應用程序,我加載將這些圖像放入要顯示的ImageViews
中。這是我卡住的地方。該設備是MDPI設備。如果我將圖像加載到MDPI drawables
文件夾中,則圖像在監視器上顯示得太大。使用我上面的例子,我將Drawable
轉換爲Bitmap
並將圖像的高度轉儲到我的日誌中。這是正確的,並顯示246px,但由於某種原因,它的測量值超過85mm而不是65mm。
如果我將所有圖像加載到HDPI中(是的,我知道它是一個mdpi設備,所以它將根據Android操作系統進行調整),圖像高度(使用我的示例)轉儲爲164px並顯示大約50毫米。這更容易解釋,但我仍然對如何讓這些圖像像在Photoshop中一樣出現感到困惑。
所以我的問題是,以編程方式將ImageView
設爲圖像的確切大小的最佳方法是什麼?對於我的例子,我需要找出爲什麼我的246像素的方形圖像(96ppi)沒有像65mm那樣顯示。
由於這些ImageView
s的程序生成,我曾嘗試以下兩兩件事:
- 設置
ImageView
高度和寬度(使用LayoutParams
)到圖像的高度(246px)。我是這麼想的,WRAP_CONTENT
不是應該這樣做。 - 使用
ImageView.ScaleType.CENTER
嘗試確保ImageView
的尺寸與圖像完全一致。
這些東西都不影響輸出。
更新:
我已經驗證了我的設備是MDPI設備。這意味着由於1:1的關係,沒有DPI到PX的轉換(反之亦然)。某處,大小正在增加,我無法確定在哪裏。正如我在以下答案的評論中指出的那樣,當我拉出Drawable並將其轉換爲Bitmap時,它將拉出我製作的EXACT像素高度。我開始計算它應該是什麼尺寸差異的百分比(65毫米和85毫米),它的結果是23.529%。我縮放我的位圖減去這個值,但它毀了我的圖像的質量。
我開始放棄。
我利用該設備是一種MK802III瑞芯器件(Amazon Link)
所以,如果MDPI是160dpi,應該怎麼了我的圖像,當涉及到PPI?我同意,我現在很困惑。當使用'getDisplayMetrics()。density'時,它會拉動'1.0',我將其視爲MDPI。真奇怪的是,當我從位圖轉儲圖像高度時,它拉出了我爲其創建圖像的精確px維。我想知道它是否將其轉化爲DPI? – burmat
也困惑不解。你的設備顯然是MDPI,並不像我所期望的那樣。請注意,由於密度縮放,「Bitmap.getWidth()」不一定會報告將被繪製到屏幕的寬度。 –
這就是我撞牆的地方。 '位圖。getHeight()/ getWidth()'等於我生成圖像的像素的精確數量,但是當我將它放在屏幕上時,它不會像這樣顯示。當你將它轉換爲DPI時,由於它是MDPI設備,它具有1:1的關係,所以246像素可以轉換爲246dpi。不管我做什麼,儘管在Photoshop中查看圖像時圖像比65mm大得多。 Android設備正在改變它,我只是無法找到位置。我甚至將246硬編碼爲'LayoutParams',沒有任何改變。 – burmat